Skip to content

Commit d9d73d2

Browse files
committed
feat: introduce a $ready store for when captp is initialised
Also clean up the state resetting.
1 parent 9a22fc0 commit d9d73d2

File tree

6 files changed

+23
-17
lines changed

6 files changed

+23
-17
lines changed

packages/dapp-svelte-wallet/ui/src/App.svelte

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
import Purses from './Purses.svelte';
1111
import Config from './Config.svelte';
1212
import Transactions from './Transactions.svelte';
13-
import { connected } from './store';
13+
import { connected, ready } from './store';
1414
1515
import ListItems from '../lib/ListItems.svelte';
1616
import MenuButton from '../lib/MenuButton.svelte';
@@ -195,7 +195,7 @@
195195
</nav>
196196
</header>
197197
</div>
198-
{#if !$connected}
198+
{#if !$ready}
199199
<div
200200
class="disconnected-background"
201201
on:click|preventDefault|stopPropagation={() => {}} />

packages/dapp-svelte-wallet/ui/src/Payment.svelte

+4-3
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,10 @@ import Select from "smelte/src/components/Select/Select.svelte";
2020
return E(item.actions).deposit(destination ? destination.purse : undefined);
2121
};
2222
23-
$: purseItems = [{ value: null, text: 'Automatic' }, ...(
24-
$purses ? $purses.filter(({ brand }) => brand === item.brand).map(p => ({ value: p, text: p.text })) : []
25-
)];
23+
$: purseItems = [
24+
{ value: null, text: 'Automatic' },
25+
...$purses.filter(({ brand }) => brand === item.brand).map(p => ({ value: p, text: p.text }))
26+
];
2627
// $: console.log('purseItems', purseItems);
2728
</script>
2829

packages/dapp-svelte-wallet/ui/src/Payments.svelte

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import ListCard from "../lib/ListCard.svelte";
88
import Card from "smelte/src/components/Card";
99
10-
$: paymentItems = $payments && $payments.filter(pmt => pmt.status !== 'deposited');
10+
$: paymentItems = $payments.filter(pmt => pmt.status !== 'deposited');
1111
</script>
1212

1313
<ListCard items={paymentItems}>

packages/dapp-svelte-wallet/ui/src/Transfer.svelte

+2-2
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,8 @@
3737
}
3838
};
3939
40-
$: contactItems = $contacts ? $contacts.map(({ value, text }) => ({ value, text })) : [];
41-
$: purseItems = $purses ? $purses.filter(({ brand }) => brand === source.brand).map(p => ({ value: p, text: p.text })) : [];
40+
$: contactItems = $contacts.map(({ value, text }) => ({ value, text }));
41+
$: purseItems = $purses.filter(({ brand }) => brand === source.brand).map(p => ({ value: p, text: p.text }));
4242
</script>
4343

4444
<div>

packages/dapp-svelte-wallet/ui/src/captp.js

+3-5
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,8 @@ export function makeCapTPConnection(makeConnection, { onReset }) {
3535
await E.G(getBootstrap()).LOADING;
3636

3737
// Begin the flow of messages to our wallet, which
38-
// we refetch from the new, loaded, bootstrap object.
39-
const bootPresence = getBootstrap();
40-
41-
bootPK.resolve(bootPresence);
38+
// we refetch from the new, loaded, bootstrap promise.
39+
bootPK.resolve(getBootstrap());
4240
}
4341

4442
// This is the public state, a promise that never resolves,
@@ -61,7 +59,7 @@ export function makeCapTPConnection(makeConnection, { onReset }) {
6159

6260
// Prepare the first reset, delayed so that our caller
6361
// can use makePermanentPresence.
64-
setTimeout(() => onReset(Promise.resolve(true)), 1);
62+
setTimeout(() => onReset(bootPK.promise), 1);
6563

6664
return { makeStableForwarder, ...props };
6765
}

packages/dapp-svelte-wallet/ui/src/store.js

+11-4
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ export const walletP = makeStableForwarder(bootP => E.G(bootP).wallet);
1818
export const boardP = makeStableForwarder(bootP => E.G(bootP).board);
1919

2020
const resetAlls = [];
21+
22+
// We initialize as false, but reset to true on disconnects.
23+
const [ready, setReady] = makeReadable(false, true);
2124
const [inbox, setInbox] = makeReadable([]);
2225
const [purses, setPurses] = makeReadable([]);
2326
const [dapps, setDapps] = makeReadable([]);
@@ -26,7 +29,7 @@ const [contacts, setContacts] = makeReadable([]);
2629
const [selfContact, setSelfContact] = makeReadable();
2730
const [issuers, setIssuers] = makeReadable([]);
2831

29-
export { inbox, purses, dapps, payments, issuers, contacts, selfContact };
32+
export { ready, inbox, purses, dapps, payments, issuers, contacts, selfContact };
3033

3134
function cmp(a, b) {
3235
return a < b ? -1 : a === b ? 0 : 1;
@@ -39,6 +42,10 @@ function kv(keyObj, val) {
3942
}
4043

4144
function onReset(readyP) {
45+
// Reset is beginning, set unready.
46+
setReady(false);
47+
48+
// When the ready promise fires, reset to ready.
4249
readyP.then(() => resetAlls.forEach(fn => fn()));
4350
E(walletP).getSelfContact().then(sc => setSelfContact({ contactPetname: 'Self', ...kv('Self', sc) }));
4451
// Set up our subscriptions.
@@ -77,8 +84,8 @@ function onReset(readyP) {
7784
}
7885

7986
// like React useHook, return a store and a setter for it
80-
function makeReadable(value, start = undefined) {
81-
const store = writable(value, start);
82-
resetAlls.push(() => store.set(start));
87+
function makeReadable(value, reset = value) {
88+
const store = writable(value);
89+
resetAlls.push(() => store.set(reset));
8390
return [{ subscribe: store.subscribe }, store.set];
8491
}

0 commit comments

Comments
 (0)