Skip to content

Commit b3bc024

Browse files
authored
Merge pull request #113 from blocknative/develop
Release 1.0.4
2 parents 4d43f7b + 5182a66 commit b3bc024

File tree

5 files changed

+70
-49
lines changed

5 files changed

+70
-49
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "bnc-onboard",
3-
"version": "1.0.3",
3+
"version": "1.0.4",
44
"description": "Onboard users to web3 by allowing them to select a wallet, get that wallet ready to transact and have access to synced wallet state.",
55
"keywords": [
66
"ethereum",

src/components/Modal.svelte

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
11
<script lang="ts">
2-
import { fade } from "svelte/transition";
3-
import { app } from "../stores";
4-
export let closeModal: () => void;
2+
import { fade } from 'svelte/transition'
3+
import { app } from '../stores'
4+
export let closeModal: () => void
55
6-
let closeHovered: boolean;
6+
let closeHovered: boolean
77
</script>
88

99
<style>
1010
/* === TARGET BY ELEMENT TO ALLOW CUSTOM OVERRIDES TO HAVE ADEQUATE SPECIFICITY ===*/
1111
/* .bn-onboard-modal */
1212
aside {
1313
display: flex;
14-
font-family: "Helvetica Neue";
14+
font-family: 'Helvetica Neue';
1515
justify-content: center;
1616
align-items: center;
1717
position: absolute;
1818
font-size: 16px;
19-
z-index: 99999999;
19+
z-index: 99;
2020
top: 0;
2121
left: 0;
2222
width: 100vw;
@@ -37,7 +37,7 @@
3737
background: #ffffff;
3838
border-radius: 10px;
3939
box-shadow: 0 1px 5px 0 rgba(0, 0, 0, 0.1);
40-
font-family: "Helvetica Neue";
40+
font-family: 'Helvetica Neue';
4141
font-size: inherit;
4242
padding: 1.33em;
4343
position: relative;

src/interfaces.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,6 +196,7 @@ export interface WalletStateSliceStore {
196196
export interface BalanceStore {
197197
subscribe: (subscriber: (store: any) => void) => () => void
198198
setStateSyncer: (stateSyncer: StateSyncer) => number | undefined
199+
reset: () => void
199200
}
200201

201202
export interface AppState {

src/modules/select/wallets/wallet-connect.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ function walletConnect(options: WalletConnectOptions): WalletModule {
4040
const { default: WalletConnectProvider } = await import(
4141
'@walletconnect/web3-provider'
4242
)
43-
const provider = new WalletConnectProvider({
43+
44+
provider = new WalletConnectProvider({
4445
infuraId: infuraKey
4546
})
4647

@@ -63,7 +64,10 @@ function walletConnect(options: WalletConnectOptions): WalletModule {
6364
})
6465
)
6566
}),
66-
disconnect: () => provider.close(),
67+
disconnect: () => {
68+
provider.close()
69+
provider = undefined
70+
},
6771
address: {
6872
onChange: func => {
6973
provider

src/stores.ts

Lines changed: 55 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ export const walletInterface: WalletInterfaceStore = createWalletInterfaceStore(
7272
walletInterface.subscribe((walletInterface: WalletInterface | null) => {
7373
if (walletInterface) {
7474
// reset state
75+
balance.reset()
7576
address.reset()
7677
network.reset()
7778

@@ -159,13 +160,14 @@ function createBalanceStore(initialState: string | null): BalanceStore {
159160
let stateSyncer: StateSyncer
160161
let emitter: any
161162
let emitterAddress: String
163+
let cancel: () => void = () => {}
162164

163165
const { subscribe } = derived(
164166
[address, network],
165-
([$address]: string[], set: any) => {
167+
([$address, $network]: string[], set: any) => {
166168
if (stateSyncer && !stateSyncer.onChange) {
167-
if ($address && stateSyncer.get && set) {
168-
syncStateWithTimeout({
169+
if ($address && $network && stateSyncer.get && set) {
170+
cancel = syncStateWithTimeout({
169171
getState: stateSyncer.get,
170172
setState: set,
171173
timeout: 4000,
@@ -177,13 +179,14 @@ function createBalanceStore(initialState: string | null): BalanceStore {
177179
emitter = blocknative.account(blocknative.clientIndex, $address)
178180
.emitter
179181
emitter.on('txConfirmed', () => {
180-
stateSyncer.get &&
181-
syncStateWithTimeout({
182+
if (stateSyncer.get) {
183+
cancel = syncStateWithTimeout({
182184
getState: stateSyncer.get,
183185
setState: set,
184-
timeout: 4000,
186+
timeout: 1500,
185187
currentBalance: get(balance)
186188
})
189+
}
187190

188191
return false
189192
})
@@ -224,51 +227,64 @@ function createBalanceStore(initialState: string | null): BalanceStore {
224227
stateSyncer = syncer
225228

226229
return undefined
227-
}
230+
},
231+
reset: cancel
228232
}
229233
}
230234

235+
let timesTried: number = 0
236+
231237
function syncStateWithTimeout(options: {
232238
getState: () => Promise<string | number | null>
233239
setState: (newState: string) => void
234240
timeout: number
235241
currentBalance: string
236242
}) {
237-
const { getState, setState, timeout, currentBalance } = options
238-
const prom = makeQuerablePromise(
239-
new Cancelable(
240-
(
241-
resolve: (val: string | number | null) => void,
242-
reject: (err: any) => void,
243-
onCancel: (callback: () => void) => void
244-
) => {
245-
getState().then(resolve)
246-
247-
onCancel(() => {
248-
balanceSyncStatus.error =
249-
'There was a problem getting the balance of this wallet'
250-
})
251-
}
252-
).catch(() => {})
253-
)
243+
if (timesTried < 4) {
244+
timesTried++
245+
246+
const { getState, setState, timeout, currentBalance } = options
247+
const prom = makeQuerablePromise(
248+
new Cancelable(
249+
(
250+
resolve: (val: string | number | null) => void,
251+
reject: (err: any) => void,
252+
onCancel: (callback: () => void) => void
253+
) => {
254+
getState().then(resolve)
255+
256+
onCancel(() => {
257+
balanceSyncStatus.error =
258+
'There was a problem getting the balance of this wallet'
259+
})
260+
}
261+
).catch(() => {})
262+
)
254263

255-
balanceSyncStatus.syncing = prom
264+
balanceSyncStatus.syncing = prom
256265

257-
prom
258-
.then((result: string) => {
259-
if (result === currentBalance) {
260-
syncStateWithTimeout(options)
261-
} else {
262-
setState(result)
266+
prom
267+
.then(async (result: string) => {
268+
if (result === currentBalance) {
269+
await wait(150)
270+
syncStateWithTimeout(options)
271+
} else {
272+
setState(result)
273+
}
274+
})
275+
.catch(() => {})
276+
277+
const timedOut = wait(timeout)
278+
279+
timedOut.then(() => {
280+
if (!prom.isFulfilled()) {
281+
prom.cancel(() => {})
263282
}
264283
})
265-
.catch(() => {})
266284

267-
const timedOut = wait(timeout)
268-
269-
timedOut.then(() => {
270-
if (!prom.isFulfilled()) {
271-
prom.cancel(() => {})
272-
}
273-
})
285+
return () => prom.cancel(() => {})
286+
} else {
287+
timesTried = 0
288+
return () => {}
289+
}
274290
}

0 commit comments

Comments
 (0)