/* This file is part of TALER (C) 2017 GNUnet e.V. 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 */ /** * Page shown to the user to confirm creation * of a reserve, usually requested by the bank. * * @author Florian Dold */ import * as React from "react"; import * as ReactDOM from "react-dom"; import URI = require("urijs"); import * as i18n from "../../i18n"; import { acceptTip, getReserveCreationInfo, getTipStatus, } from "../wxApi"; import { WithdrawDetailView, renderAmount, } from "../renderHtml"; import * as Amounts from "../../amounts"; import { TipToken } from "../../talerTypes"; import { ReserveCreationInfo, TipStatus } from "../../walletTypes"; interface TipDisplayProps { tipToken: TipToken; } interface TipDisplayState { tipStatus?: TipStatus; rci?: ReserveCreationInfo; working: boolean; discarded: boolean; } class TipDisplay extends React.Component { constructor(props: TipDisplayProps) { super(props); this.state = { working: false, discarded: false }; } async update() { const tipStatus = await getTipStatus(this.props.tipToken); this.setState({ tipStatus }); const rci = await getReserveCreationInfo(tipStatus.exchangeUrl, tipStatus.amount); this.setState({ rci }); } componentDidMount() { this.update(); const port = chrome.runtime.connect(); port.onMessage.addListener((msg: any) => { if (msg.notify) { console.log("got notified"); this.update(); } }); this.update(); } renderExchangeInfo() { const rci = this.state.rci; if (!rci) { return

Waiting for info about exchange ...

; } const totalCost = Amounts.add(rci.overhead, rci.withdrawFee).amount; return (

The tip is handled by the exchange {rci.exchangeInfo.baseUrl}.{" "} The exchange provider will charge {" "} {renderAmount(totalCost)} {" "}.

); } accept() { this.setState({ working: true}); acceptTip(this.props.tipToken); } discard() { this.setState({ discarded: true }); } render(): JSX.Element { const ts = this.state.tipStatus; if (!ts) { return

Processing ...

; } const renderAccepted = () => ( <>

You've accepted this tip! Go back to merchant

{this.renderExchangeInfo()} ); const renderButtons = () => ( <>