aboutsummaryrefslogtreecommitdiff
path: root/src/pages
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-11-16 01:59:39 +0100
committerFlorian Dold <florian.dold@gmail.com>2016-11-16 02:00:31 +0100
commitbd65bb67e25a79b019d745b7262b2008ce2adb15 (patch)
tree89e1b032103a63737f1a703e6a943832ef261704 /src/pages
parentf91466595b651721690133f58ab37f977539e95b (diff)
downloadwallet-core-bd65bb67e25a79b019d745b7262b2008ce2adb15.tar.xz
incrementally verify denoms
The denominations are not stored in a separate object store.
Diffstat (limited to 'src/pages')
-rw-r--r--src/pages/confirm-create-reserve.tsx29
-rw-r--r--src/pages/tree.tsx51
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>
);