aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2016-10-19 20:16:01 +0200
committerFlorian Dold <florian.dold@gmail.com>2016-10-19 20:16:01 +0200
commit4fd1e07449c97619dbf1e0e17baa47168644dba9 (patch)
tree4f7d6a16597dd0fdd4cb2c803c8137d621e4c944
parentb0b737f72ecc3cb96acff510906db9f818eab463 (diff)
downloadwallet-core-4fd1e07449c97619dbf1e0e17baa47168644dba9.tar.xz
fix db issue
-rw-r--r--lib/wallet/query.ts9
-rw-r--r--lib/wallet/wallet.ts9
-rw-r--r--pages/confirm-contract.tsx35
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>
);
}