diff options
Diffstat (limited to 'src/pages')
-rw-r--r-- | src/pages/confirm-create-reserve.tsx | 29 | ||||
-rw-r--r-- | src/pages/tree.tsx | 51 |
2 files changed, 54 insertions, 26 deletions
diff --git a/src/pages/confirm-create-reserve.tsx b/src/pages/confirm-create-reserve.tsx index 372f11a4b..963bd0697 100644 --- a/src/pages/confirm-create-reserve.tsx +++ b/src/pages/confirm-create-reserve.tsx @@ -26,7 +26,7 @@ import {amountToPretty, canonicalizeBaseUrl} from "src/helpers"; import { AmountJson, CreateReserveResponse, ReserveCreationInfo, Amounts, - Denomination, + Denomination, DenominationRecord, } from "src/types"; import {getReserveCreationInfo} from "src/wxApi"; import {ImplicitStateComponent, StateHolder} from "src/components"; @@ -74,25 +74,25 @@ function renderReserveCreationDetails(rci: ReserveCreationInfo|null) { let denoms = rci.selectedDenoms; let countByPub: {[s: string]: number} = {}; - let uniq: Denomination[] = []; + let uniq: DenominationRecord[] = []; - denoms.forEach((x: Denomination) => { - let c = countByPub[x.denom_pub] || 0; + denoms.forEach((x: DenominationRecord) => { + let c = countByPub[x.denomPub] || 0; if (c == 0) { uniq.push(x); } c += 1; - countByPub[x.denom_pub] = c; + countByPub[x.denomPub] = c; }); - function row(denom: Denomination) { + function row(denom: DenominationRecord) { return ( <tr> - <td>{countByPub[denom.denom_pub] + "x"}</td> + <td>{countByPub[denom.denomPub] + "x"}</td> <td>{amountToPretty(denom.value)}</td> - <td>{amountToPretty(denom.fee_withdraw)}</td> - <td>{amountToPretty(denom.fee_refresh)}</td> - <td>{amountToPretty(denom.fee_deposit)}</td> + <td>{amountToPretty(denom.feeWithdraw)}</td> + <td>{amountToPretty(denom.feeRefresh)}</td> + <td>{amountToPretty(denom.feeDeposit)}</td> </tr> ); } @@ -274,6 +274,7 @@ class ExchangeSelection extends ImplicitStateComponent<ExchangeSelectionProps> { this.reserveCreationInfo(null); if (!this.url()) { this.statusString(i18n`Error: URL is empty`); + this.detailCollapsed(false); return; } @@ -285,7 +286,8 @@ class ExchangeSelection extends ImplicitStateComponent<ExchangeSelectionProps> { } try { - let r = await getReserveCreationInfo(this.url()!, + let url = canonicalizeBaseUrl(this.url()!); + let r = await getReserveCreationInfo(url, this.props.amount); console.log("get exchange info resolved"); this.reserveCreationInfo(r); @@ -294,9 +296,11 @@ class ExchangeSelection extends ImplicitStateComponent<ExchangeSelectionProps> { console.log("get exchange info rejected"); if (e.hasOwnProperty("httpStatus")) { this.statusString(`Error: request failed with status ${e.httpStatus}`); + this.detailCollapsed(false); } else if (e.hasOwnProperty("errorResponse")) { let resp = e.errorResponse; this.statusString(`Error: ${resp.error} (${resp.hint})`); + this.detailCollapsed(false); } } } @@ -310,7 +314,7 @@ class ExchangeSelection extends ImplicitStateComponent<ExchangeSelectionProps> { exchange: string, amount: AmountJson, callback_url: string) { - const d = {exchange, amount}; + const d = {exchange: canonicalizeBaseUrl(exchange), amount}; const cb = (rawResp: any) => { if (!rawResp) { throw Error("empty response"); @@ -338,6 +342,7 @@ class ExchangeSelection extends ImplicitStateComponent<ExchangeSelectionProps> { this.statusString( `Oops, something went wrong.` + `The wallet responded with error status (${rawResp.error}).`); + this.detailCollapsed(false); } }; chrome.runtime.sendMessage({type: 'create-reserve', detail: d}, cb); diff --git a/src/pages/tree.tsx b/src/pages/tree.tsx index daabdaf49..58eb82c3f 100644 --- a/src/pages/tree.tsx +++ b/src/pages/tree.tsx @@ -21,12 +21,12 @@ */ -import { ExchangeRecord } from "src/types"; +import {ExchangeRecord, DenominationRecord} from "src/types"; import { ReserveRecord, CoinRecord, PreCoinRecord, Denomination } from "src/types"; import { ImplicitStateComponent, StateHolder } from "src/components"; import { getReserves, getExchanges, getCoins, getPreCoins, - refresh + refresh, getDenoms } from "src/wxApi"; import { prettyAmount, abbrev } from "src/renderHtml"; import { getTalerStampDate } from "src/helpers"; @@ -272,33 +272,56 @@ class ExpanderText extends ImplicitStateComponent<ExpanderTextProps> { class DenominationList extends ImplicitStateComponent<DenominationListProps> { expanded = this.makeState<boolean>(false); + denoms = this.makeState<undefined|DenominationRecord[]>(undefined); - renderDenom(d: Denomination) { + constructor(props: DenominationListProps) { + super(props); + this.update(); + } + + async update() { + let d = await getDenoms(this.props.exchange.baseUrl); + this.denoms(d); + } + + renderDenom(d: DenominationRecord) { return ( <div className="tree-item"> <ul> <li>Value: {prettyAmount(d.value)}</li> - <li>Withdraw fee: {prettyAmount(d.fee_withdraw)}</li> - <li>Refresh fee: {prettyAmount(d.fee_refresh)}</li> - <li>Deposit fee: {prettyAmount(d.fee_deposit)}</li> - <li>Refund fee: {prettyAmount(d.fee_refund)}</li> - <li>Start: {getTalerStampDate(d.stamp_start)!.toString()}</li> - <li>Withdraw expiration: {getTalerStampDate(d.stamp_expire_withdraw)!.toString()}</li> - <li>Legal expiration: {getTalerStampDate(d.stamp_expire_legal)!.toString()}</li> - <li>Deposit expiration: {getTalerStampDate(d.stamp_expire_deposit)!.toString()}</li> - <li>Denom pub: <ExpanderText text={d.denom_pub} /></li> + <li>Withdraw fee: {prettyAmount(d.feeWithdraw)}</li> + <li>Refresh fee: {prettyAmount(d.feeRefresh)}</li> + <li>Deposit fee: {prettyAmount(d.feeDeposit)}</li> + <li>Refund fee: {prettyAmount(d.feeRefund)}</li> + <li>Start: {getTalerStampDate(d.stampStart)!.toString()}</li> + <li>Withdraw expiration: {getTalerStampDate(d.stampExpireWithdraw)!.toString()}</li> + <li>Legal expiration: {getTalerStampDate(d.stampExpireLegal)!.toString()}</li> + <li>Deposit expiration: {getTalerStampDate(d.stampExpireDeposit)!.toString()}</li> + <li>Denom pub: <ExpanderText text={d.denomPub} /></li> </ul> </div> ); } render(): JSX.Element { + let denoms = this.denoms() + if (!denoms) { + return ( + <div className="tree-item"> + Denominations (...) + {" "} + <Toggle expanded={this.expanded}> + ... + </Toggle> + </div> + ); + } return ( <div className="tree-item"> - Denominations ({this.props.exchange.active_denoms.length.toString()}) + Denominations ({denoms.length.toString()}) {" "} <Toggle expanded={this.expanded}> - {this.props.exchange.active_denoms.map((d) => this.renderDenom(d))} + {denoms.map((d) => this.renderDenom(d))} </Toggle> </div> ); |