From 8714240c909d9c2f2deeb6ae99f219295f67c708 Mon Sep 17 00:00:00 2001 From: Florian Dold Date: Wed, 2 Mar 2016 02:16:18 +0100 Subject: show accepted exchanges --- lib/decl/mithril.d.ts | 2 +- lib/wallet/types.ts | 63 +++++++++++++++++++++++++++++++++++++++++++++ lib/wallet/wallet.ts | 64 ++-------------------------------------------- lib/wallet/wxMessaging.ts | 2 +- pages/confirm-contract.tsx | 38 ++++++++++++++++++++++++--- 5 files changed, 102 insertions(+), 67 deletions(-) diff --git a/lib/decl/mithril.d.ts b/lib/decl/mithril.d.ts index c87102260..c45633490 100644 --- a/lib/decl/mithril.d.ts +++ b/lib/decl/mithril.d.ts @@ -608,7 +608,7 @@ declare module _mithril { * * @see m.component */ - controller: MithrilControllerFunction | + controller?: MithrilControllerFunction | MithrilControllerConstructor; /** diff --git a/lib/wallet/types.ts b/lib/wallet/types.ts index 748df6f4c..feab1bcb1 100644 --- a/lib/wallet/types.ts +++ b/lib/wallet/types.ts @@ -150,6 +150,69 @@ export interface Coin { } +@Checkable.Class +export class ExchangeHandle { + @Checkable.String + master_pub: string; + + @Checkable.String + url: string; + + static checked: (obj: any) => ExchangeHandle; +} + + +@Checkable.Class +export class Contract { + @Checkable.String + H_wire: string; + + @Checkable.Value(AmountJson) + amount: AmountJson; + + @Checkable.List(Checkable.AnyObject) + auditors: any[]; + + @Checkable.String + expiry: string; + + @Checkable.Any + locations: any; + + @Checkable.Value(AmountJson) + max_fee: AmountJson; + + @Checkable.Any + merchant: any; + + @Checkable.String + merchant_pub: string; + + @Checkable.List(Checkable.Value(ExchangeHandle)) + exchanges: ExchangeHandle[]; + + @Checkable.List(Checkable.AnyObject) + products: any[]; + + @Checkable.String + refund_deadline: string; + + @Checkable.String + timestamp: string; + + @Checkable.Number + transaction_id: number; + + @Checkable.String + fulfillment_url: string; + + @Checkable.Optional(Checkable.String) + repurchase_correlation_id: string; + + static checked: (obj: any) => Contract; +} + + export type PayCoinInfo = Array<{ updatedCoin: Coin, sig: CoinPaySig }>; diff --git a/lib/wallet/wallet.ts b/lib/wallet/wallet.ts index 3764edfbc..0dc232bb0 100644 --- a/lib/wallet/wallet.ts +++ b/lib/wallet/wallet.ts @@ -33,6 +33,8 @@ import {CryptoApi} from "./cryptoApi"; import {Coin} from "./types"; import {PayCoinInfo} from "./types"; import {CheckRepurchaseResult} from "./types"; +import {Contract} from "./types"; +import {ExchangeHandle} from "./types"; "use strict"; @@ -182,68 +184,6 @@ export class ConfirmReserveRequest { } -@Checkable.Class -export class ExchangeHandle { - @Checkable.String - master_pub: string; - - @Checkable.String - url: string; - - static checked: (obj: any) => ExchangeHandle; -} - - -@Checkable.Class -export class Contract { - @Checkable.String - H_wire: string; - - @Checkable.Value(AmountJson) - amount: AmountJson; - - @Checkable.List(Checkable.AnyObject) - auditors: any[]; - - @Checkable.String - expiry: string; - - @Checkable.Any - locations: any; - - @Checkable.Value(AmountJson) - max_fee: AmountJson; - - @Checkable.Any - merchant: any; - - @Checkable.String - merchant_pub: string; - - @Checkable.List(Checkable.Value(ExchangeHandle)) - exchanges: ExchangeHandle[]; - - @Checkable.List(Checkable.AnyObject) - products: any[]; - - @Checkable.String - refund_deadline: string; - - @Checkable.String - timestamp: string; - - @Checkable.Number - transaction_id: number; - - @Checkable.String - fulfillment_url: string; - - @Checkable.Optional(Checkable.String) - repurchase_correlation_id: string; - - static checked: (obj: any) => Contract; -} - @Checkable.Class export class Offer { diff --git a/lib/wallet/wxMessaging.ts b/lib/wallet/wxMessaging.ts index d49a80efb..4f496861d 100644 --- a/lib/wallet/wxMessaging.ts +++ b/lib/wallet/wxMessaging.ts @@ -22,7 +22,7 @@ import {Checkable} from "./checkable"; import {AmountJson} from "./types"; import Port = chrome.runtime.Port; import {Notifier} from "./types"; -import {Contract} from "./wallet"; +import {Contract} from "./types"; "use strict"; diff --git a/pages/confirm-contract.tsx b/pages/confirm-contract.tsx index 9ce1b0a5a..0c7419c6c 100644 --- a/pages/confirm-contract.tsx +++ b/pages/confirm-contract.tsx @@ -21,12 +21,14 @@ * @author Florian Dold */ -/// -"use strict"; +/// +import MithrilComponent = _mithril.MithrilComponent; import {substituteFulfillmentUrl} from "../lib/wallet/helpers"; +import m from "mithril"; +import {Contract} from "../lib/wallet/types"; +"use strict"; -declare var m: any; function prettyAmount(amount) { let v = amount.value + amount.fraction / 1e6; @@ -34,6 +36,35 @@ function prettyAmount(amount) { } +const Details = { + controller() { + return {collapsed: m.prop(true)}; + }, + view(ctrl, contract: Contract) { + if (ctrl.collapsed()) { + return m("div", [ + m("button.linky", { + onclick: () => { + ctrl.collapsed(false); + } + }, "show more details") + ]); + } else { + return m("div", [ + m("button.linky", { + onclick: () => { + ctrl.collapsed(true); + } + }, "show less details"), + m("div", [ + "Accepted exchanges:", + m("ul", contract.exchanges.map(e => m("li", `${e.url}: ${e.master_pub}`))) + ]) + ]); + } + } +}; + export function main() { let url = URI(document.location.href); let query: any = URI.parseQuery(url.query()); @@ -58,6 +89,7 @@ export function main() { `${p.description}: ${prettyAmount(p.price)}`))), m("button.confirm-pay", {onclick: doPayment}, i18n`Confirm Payment`), m("p", error ? error : []), + m(Details, contract) ]; } }; -- cgit v1.2.3