From 4c03a1200eb947a0ed13f78b46fd670601b8cb80 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Mon, 1 May 2017 04:05:16 +0200 Subject: implement payback (with rudimentary UI) --- src/pages/payback.tsx | 99 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/pages/payback.tsx (limited to 'src/pages/payback.tsx') diff --git a/src/pages/payback.tsx b/src/pages/payback.tsx new file mode 100644 index 000000000..9e463d4a0 --- /dev/null +++ b/src/pages/payback.tsx @@ -0,0 +1,99 @@ +/* + This file is part of TALER + (C) 2017 Inria + + TALER is free software; you can redistribute it and/or modify it under the + terms of the GNU General Public License as published by the Free Software + Foundation; either version 3, or (at your option) any later version. + + TALER is distributed in the hope that it will be useful, but WITHOUT ANY + WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR + A PARTICULAR PURPOSE. See the GNU General Public License for more details. + + You should have received a copy of the GNU General Public License along with + TALER; see the file COPYING. If not, see + */ + +/** + * View and edit auditors. + * + * @author Florian Dold + */ + + +import { + ExchangeRecord, + ExchangeForCurrencyRecord, + DenominationRecord, + AuditorRecord, + CurrencyRecord, + ReserveRecord, + CoinRecord, + PreCoinRecord, + Denomination, + WalletBalance, +} from "../types"; +import { ImplicitStateComponent, StateHolder } from "../components"; +import { + getCurrencies, + updateCurrency, + getPaybackReserves, + withdrawPaybackReserve, +} from "../wxApi"; +import { prettyAmount } from "../renderHtml"; +import { getTalerStampDate } from "../helpers"; +import * as React from "react"; +import * as ReactDOM from "react-dom"; + +class Payback extends ImplicitStateComponent { + reserves: StateHolder = this.makeState(null); + constructor() { + super(); + let port = chrome.runtime.connect(); + port.onMessage.addListener((msg: any) => { + if (msg.notify) { + console.log("got notified"); + this.update(); + } + }); + this.update(); + } + + async update() { + let reserves = await getPaybackReserves(); + this.reserves(reserves); + } + + withdrawPayback(pub: string) { + withdrawPaybackReserve(pub); + } + + render(): JSX.Element { + let reserves = this.reserves(); + if (!reserves) { + return loading ...; + } + if (reserves.length == 0) { + return No reserves with payback available.; + } + return ( +
+ {reserves.map(r => ( +
+

Reserve for ${prettyAmount(r.current_amount!)}

+
    +
  • Exchange: ${r.exchange_base_url}
  • +
+ +
+ ))} +
+ ); + } +} + +export function main() { + ReactDOM.render(, document.getElementById("container")!); +} + +document.addEventListener("DOMContentLoaded", main); -- cgit v1.2.3