|
1 | 1 | <script lang="ts">
|
2 | 2 | import { ProviderRpcErrorCode, WalletModule } from '@web3-onboard/common'
|
3 | 3 | import { BigNumber } from 'ethers'
|
| 4 | + import { BehaviorSubject, takeUntil } from 'rxjs' |
4 | 5 | import EventEmitter from 'eventemitter3'
|
5 | 6 | import { _ } from 'svelte-i18n'
|
6 | 7 | import en from '../../i18n/en.json'
|
7 | 8 | import { selectAccounts } from '../../provider'
|
8 | 9 | import { state } from '../../store'
|
9 |
| - import { connectWallet$, internalState$ } from '../../streams' |
| 10 | + import { connectWallet$, internalState$, onDestroy$ } from '../../streams' |
10 | 11 | import {
|
11 | 12 | getChainId,
|
12 | 13 | requestAccounts,
|
|
47 | 48 | let windowWidth: number
|
48 | 49 | let scrollContainer: HTMLElement
|
49 | 50 |
|
50 |
| - const walletToAutoSelect = |
| 51 | + let walletToAutoSelect = |
51 | 52 | autoSelect &&
|
52 | 53 | walletModules.find(
|
53 | 54 | ({ label }) => label.toLowerCase() === autoSelect.label.toLowerCase()
|
54 | 55 | )
|
55 | 56 |
|
| 57 | + const modalStep$ = new BehaviorSubject<keyof i18n['connect']>( |
| 58 | + 'selectingWallet' |
| 59 | + ) |
| 60 | +
|
56 | 61 | // ==== SELECT WALLET ==== //
|
57 | 62 | async function selectWallet({
|
58 | 63 | label,
|
|
185 | 190 | // user rejected account access
|
186 | 191 | if (code === ProviderRpcErrorCode.ACCOUNT_ACCESS_REJECTED) {
|
187 | 192 | connectionRejected = true
|
| 193 | + if (autoSelect) { |
| 194 | + walletToAutoSelect = null |
| 195 | + } |
188 | 196 | return
|
189 | 197 | }
|
190 | 198 |
|
|
229 | 237 | setTimeout(() => connectWallet$.next({ inProgress: false }), 1500)
|
230 | 238 | }
|
231 | 239 |
|
232 |
| - let step: keyof i18n['connect'] = 'selectingWallet' |
233 |
| -
|
234 |
| - // ==== STEP HANDLING LOGIC ==== // |
235 |
| - $: switch (step) { |
236 |
| - case 'selectingWallet': { |
237 |
| - if (walletToAutoSelect) { |
238 |
| - autoSelectWallet(walletToAutoSelect) |
239 |
| - } else { |
240 |
| - loadWalletsForSelection() |
| 240 | + modalStep$.pipe(takeUntil(onDestroy$)).subscribe(step => { |
| 241 | + switch (step) { |
| 242 | + case 'selectingWallet': { |
| 243 | + if (walletToAutoSelect) { |
| 244 | + autoSelectWallet(walletToAutoSelect) |
| 245 | + } else { |
| 246 | + loadWalletsForSelection() |
| 247 | + } |
| 248 | + break |
| 249 | + } |
| 250 | + case 'connectingWallet': { |
| 251 | + connectWallet() |
| 252 | + break |
| 253 | + } |
| 254 | + case 'connectedWallet': { |
| 255 | + updateAccountDetails() |
| 256 | + break |
241 | 257 | }
|
242 |
| -
|
243 |
| - break |
244 |
| - } |
245 |
| - case 'connectingWallet': { |
246 |
| - connectWallet() |
247 |
| - break |
248 |
| - } |
249 |
| - case 'connectedWallet': { |
250 |
| - updateAccountDetails() |
251 |
| - break |
252 | 258 | }
|
253 |
| - } |
| 259 | + }) |
254 | 260 |
|
255 | 261 | function setStep(update: keyof i18n['connect']) {
|
256 |
| - step = update |
| 262 | + modalStep$.next(update) |
257 | 263 | }
|
258 | 264 |
|
259 | 265 | function scrollToTop() {
|
|
331 | 337 | <Modal {close}>
|
332 | 338 | <div class="container relative flex">
|
333 | 339 | {#if windowWidth >= 809}
|
334 |
| - <Sidebar {step} /> |
| 340 | + <Sidebar step={$modalStep$} /> |
335 | 341 | {/if}
|
336 | 342 |
|
337 | 343 | <div class="content flex flex-column">
|
338 | 344 | <div class="header relative flex items-center">
|
339 | 345 | <h4 class="header-heading">
|
340 |
| - {$_(`connect.${step}.header`, { |
341 |
| - default: en.connect[step].header, |
| 346 | + {$_(`connect.${$modalStep$}.header`, { |
| 347 | + default: en.connect[$modalStep$].header, |
342 | 348 | values: {
|
343 | 349 | connectionRejected,
|
344 | 350 | wallet: selectedWallet && selectedWallet.label
|
|
351 | 357 | </div>
|
352 | 358 |
|
353 | 359 | <div class="scroll-container" bind:this={scrollContainer}>
|
354 |
| - {#if step === 'selectingWallet'} |
| 360 | + {#if $modalStep$ === 'selectingWallet'} |
355 | 361 | {#if wallets.length}
|
356 | 362 | <Agreement bind:agreed />
|
357 | 363 |
|
|
368 | 374 | {/if}
|
369 | 375 | {/if}
|
370 | 376 |
|
371 |
| - {#if step === 'connectingWallet' && selectedWallet} |
| 377 | + {#if $modalStep$ === 'connectingWallet' && selectedWallet} |
372 | 378 | <ConnectingWallet
|
373 | 379 | {connectWallet}
|
374 | 380 | {connectionRejected}
|
|
378 | 384 | />
|
379 | 385 | {/if}
|
380 | 386 |
|
381 |
| - {#if step === 'connectedWallet' && selectedWallet} |
| 387 | + {#if $modalStep$ === 'connectedWallet' && selectedWallet} |
382 | 388 | <ConnectedWallet {selectedWallet} />
|
383 | 389 | {/if}
|
384 | 390 | </div>
|
|
0 commit comments