diff options
author | Florian Dold <florian.dold@gmail.com> | 2016-10-19 20:16:01 +0200 |
---|---|---|
committer | Florian Dold <florian.dold@gmail.com> | 2016-10-19 20:16:01 +0200 |
commit | 4fd1e07449c97619dbf1e0e17baa47168644dba9 (patch) | |
tree | 4f7d6a16597dd0fdd4cb2c803c8137d621e4c944 | |
parent | b0b737f72ecc3cb96acff510906db9f818eab463 (diff) |
fix db issue
-rw-r--r-- | lib/wallet/query.ts | 9 | ||||
-rw-r--r-- | lib/wallet/wallet.ts | 9 | ||||
-rw-r--r-- | pages/confirm-contract.tsx | 35 |
3 files changed, 36 insertions, 17 deletions
diff --git a/lib/wallet/query.ts b/lib/wallet/query.ts index 3571c32c7..c369e4b67 100644 --- a/lib/wallet/query.ts +++ b/lib/wallet/query.ts @@ -51,6 +51,7 @@ export class Index<S extends IDBValidKey,T> { constructor(s: Store<T>, indexName: string, keyPath: string | string[]) { this.storeName = s.name; this.indexName = indexName; + this.keyPath = keyPath; } } @@ -60,7 +61,7 @@ export class Index<S extends IDBValidKey,T> { */ export interface QueryStream<T> { indexJoin<S,I extends IDBValidKey>(index: Index<I,S>, - keyFn: (obj: T) => I): QueryStream<[T, S]>; + keyFn: (obj: T) => I): QueryStream<JoinResult<T, S>>; keyJoin<S,I extends IDBValidKey>(store: Store<S>, keyFn: (obj: T) => I): QueryStream<JoinResult<T,S>>; filter(f: (T: any) => boolean): QueryStream<T>; @@ -106,7 +107,7 @@ abstract class QueryStreamBase<T> implements QueryStream<T> { } indexJoin<S,I extends IDBValidKey>(index: Index<I,S>, - keyFn: (obj: T) => I): QueryStream<[T, S]> { + keyFn: (obj: T) => I): QueryStream<JoinResult<T, S>> { this.root.addStoreAccess(index.storeName, false); return new QueryStreamIndexJoin(this, index.storeName, index.indexName, keyFn); } @@ -212,7 +213,7 @@ class QueryStreamFlatMap<T> extends QueryStreamBase<T> { } -class QueryStreamIndexJoin<T, S> extends QueryStreamBase<[T, S]> { +class QueryStreamIndexJoin<T, S> extends QueryStreamBase<JoinResult<T, S>> { s: QueryStreamBase<T>; storeName: string; key: any; @@ -239,7 +240,7 @@ class QueryStreamIndexJoin<T, S> extends QueryStreamBase<[T, S]> { req.onsuccess = () => { let cursor = req.result; if (cursor) { - f(false, [value, cursor.value], tx); + f(false, {left: value, right: cursor.value}, tx); cursor.continue(); } else { f(true, undefined, tx); diff --git a/lib/wallet/wallet.ts b/lib/wallet/wallet.ts index 380243b44..851b7b048 100644 --- a/lib/wallet/wallet.ts +++ b/lib/wallet/wallet.ts @@ -320,7 +320,7 @@ export namespace Stores { super("coins", {keyPath: "coinPub"}); } - exchangeBaseUrlIndex = new Index<string,Coin>(this, "exchangeBaseUrl", "exchageBaseUrl"); + exchangeBaseUrlIndex = new Index<string,Coin>(this, "exchangeBaseUrl", "exchangeBaseUrl"); } class HistoryStore extends Store<HistoryRecord> { @@ -461,10 +461,10 @@ export class Wallet { let x: number; - function storeExchangeCoin(mc: any, url: string) { - let exchange: IExchangeInfo = mc[0]; + function storeExchangeCoin(mc: JoinResult<IExchangeInfo, Coin>, url: string) { + let exchange: IExchangeInfo = mc.left; console.log("got coin for exchange", url); - let coin: Coin = mc[1]; + let coin: Coin = mc.right; if (coin.suspended) { console.log("skipping suspended coin", coin.denomPub, @@ -517,6 +517,7 @@ export class Wallet { console.log("not suitable exchanges found"); } + console.log("exchange coins:"); console.dir(m); // We try to find the first exchange where we have diff --git a/pages/confirm-contract.tsx b/pages/confirm-contract.tsx index a30046c2d..5867051ac 100644 --- a/pages/confirm-contract.tsx +++ b/pages/confirm-contract.tsx @@ -24,26 +24,37 @@ /// <reference path="../lib/decl/preact.d.ts" /> import {substituteFulfillmentUrl} from "../lib/wallet/helpers"; -import {Contract, AmountJson} from "../lib/wallet/types"; +import {Contract, AmountJson, IExchangeInfo} from "../lib/wallet/types"; import {renderContract, prettyAmount} from "../lib/wallet/renderHtml"; "use strict"; +import {getExchanges} from "../lib/wallet/wxApi"; interface DetailState { collapsed: boolean; + exchanges: null|IExchangeInfo[]; } interface DetailProps { - contract: Contract; + contract: Contract + collapsed: boolean } class Details extends preact.Component<DetailProps, DetailState> { - constructor() { - super(); + constructor(props: DetailProps) { + super(props); this.state = { - collapsed: true + collapsed: props.collapsed, + exchanges: null }; + + this.update(); + } + + async update() { + let exchanges = await getExchanges(); + this.setState({exchanges} as any); } render(props: DetailProps, state: DetailState) { @@ -51,7 +62,7 @@ class Details extends preact.Component<DetailProps, DetailState> { return ( <div> <button className="linky" - onClick={() => { this.setState({collapsed: false})}}> + onClick={() => { this.setState({collapsed: false} as any)}}> show more details </button> </div> @@ -60,7 +71,7 @@ class Details extends preact.Component<DetailProps, DetailState> { return ( <div> <button className="linky" - onClick={() => this.setState({collapsed: true})}> + onClick={() => this.setState({collapsed: true} as any)}> show less details </button> <div> @@ -69,6 +80,12 @@ class Details extends preact.Component<DetailProps, DetailState> { {props.contract.exchanges.map( e => <li>{`${e.url}: ${e.master_pub}`}</li>)} </ul> + Exchanges in the wallet: + <ul> + {(state.exchanges || []).map( + (e: IExchangeInfo) => + <li>{`${e.baseUrl}: ${e.masterPublicKey}`}</li>)} + </ul> </div> </div>); } @@ -143,7 +160,7 @@ class ContractPrompt extends preact.Component<ContractPromptProps, ContractPromp this.state.error = `Error: ${resp.error}`; break; } - preact.rerender(); + this.setState({} as any); return; } let c = d.offer.contract; @@ -165,7 +182,7 @@ class ContractPrompt extends preact.Component<ContractPromptProps, ContractPromp Confirm payment </button> {(state.error ? <p className="errorbox">{state.error}</p> : <p />)} - <Details contract={c} /> + <Details contract={c} collapsed={!state.error}/> </div> ); } |