Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bridge] Support second account connect for substrate networks #1435

Merged
merged 26 commits into from
Jun 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
0c85f6e
update adapters
Nikita-Polyakov May 24, 2024
d28bf0a
Merge remote-tracking branch 'origin/develop' into feature/bridge-sec…
Nikita-Polyakov May 29, 2024
40b39e7
update SelectProvider
Nikita-Polyakov May 29, 2024
2ceb174
add selectSubAccount action
Nikita-Polyakov May 30, 2024
5fb155c
use inheritance in SubAdapter
Nikita-Polyakov May 30, 2024
227882f
update account inject
Nikita-Polyakov May 30, 2024
e44ae93
incoming tx history update
Nikita-Polyakov Jun 2, 2024
c15632c
update selectSubAccount
Nikita-Polyakov Jun 3, 2024
cf126be
adding ConnectionView
Nikita-Polyakov Jun 6, 2024
7470561
connection integration
Nikita-Polyakov Jun 7, 2024
03cc101
connect wallet on Bridge view
Nikita-Polyakov Jun 7, 2024
5055412
Merge branch 'develop' into feature/bridge-second-account-support
Nikita-Polyakov Jun 7, 2024
4eb14ab
update wallet
Nikita-Polyakov Jun 7, 2024
b3ed0bf
fix change account butn
Nikita-Polyakov Jun 9, 2024
bc1d925
update wallet 1.38.0-beta.1
Nikita-Polyakov Jun 9, 2024
0c70575
wallet 1.38.0-beta.2
Nikita-Polyakov Jun 10, 2024
1b194c0
update changeSubAccountName
Nikita-Polyakov Jun 11, 2024
59e87d2
add SelectSoraAccountDialog
Nikita-Polyakov Jun 11, 2024
5b72ed2
fix sonar issues
Nikita-Polyakov Jun 11, 2024
15247a1
open SORA account connect dialog on pages
Nikita-Polyakov Jun 11, 2024
7cd776c
fix referral route
Nikita-Polyakov Jun 11, 2024
7c45915
fix build
Nikita-Polyakov Jun 13, 2024
2e3a431
Merge branch 'develop' into feature/bridge-second-account-support
Nikita-Polyakov Jun 17, 2024
cc27d86
Merge remote-tracking branch 'origin/develop' into feature/bridge-sec…
Nikita-Polyakov Jun 17, 2024
78d2b66
update wallet 1.38.0
Nikita-Polyakov Jun 17, 2024
5fc4a8b
Merge remote-tracking branch 'origin/develop' into feature/bridge-sec…
Nikita-Polyakov Jun 17, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "polkaswap-exchange-web",
"version": "1.36.0",
"version": "1.38.0",
"repository": {
"type": "git",
"url": "https://github.com/sora-xor/polkaswap-exchange-web.git"
Expand Down Expand Up @@ -28,7 +28,7 @@
"dependencies": {
"@cedelabs/widgets-universal": "^1.3.1",
"@metamask/detect-provider": "^2.0.0",
"@soramitsu/soraneo-wallet-web": "1.35.2",
"@soramitsu/soraneo-wallet-web": "1.38.0",
"@walletconnect/ethereum-provider": "^2.12.2",
"@walletconnect/modal": "^2.6.2",
"core-js": "^3.37.0",
Expand Down
26 changes: 19 additions & 7 deletions src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,13 @@
{{ t('browserNotificationDialog.pointer') }}
</notification-enabling-page>
<alerts />
<confirm-dialog />
<confirm-dialog
:get-api="getApi"
:account="account"
:visibility="isSignTxDialogVisible"
:set-visibility="setSignTxDialogVisibility"
/>
<select-sora-account-dialog />
</s-design-system-provider>
</template>

Expand All @@ -56,10 +62,8 @@ import AppHeader from '@/components/App/Header/AppHeader.vue';
import AppMenu from '@/components/App/Menu/AppMenu.vue';
import NodeErrorMixin from '@/components/mixins/NodeErrorMixin';
import SoraLogo from '@/components/shared/Logo/Sora.vue';
import { PageNames, Components, Language, BreakpointClass, Breakpoint, WalletPermissions } from '@/consts';
import { PageNames, Components, Language, BreakpointClass, WalletPermissions } from '@/consts';
import { getLocale } from '@/lang';
import { isDashboardPage } from '@/modules/dashboard/router';
import { isVaultPage } from '@/modules/vault/router';
import router, { goTo, lazyComponent } from '@/router';
import { action, getter, mutation, state } from '@/store/decorators';
import { getMobileCssClasses, preloadFontFace, updateDocumentTitle } from '@/utils';
Expand Down Expand Up @@ -87,6 +91,7 @@ import type Theme from '@soramitsu-ui/ui-vue2/lib/types/Theme';
AppBrowserNotifsBlockedDialog: lazyComponent(Components.AppBrowserNotifsBlockedDialog),
ReferralsConfirmInviteUser: lazyComponent(Components.ReferralsConfirmInviteUser),
BridgeTransferNotification: lazyComponent(Components.BridgeTransferNotification),
SelectSoraAccountDialog: lazyComponent(Components.SelectSoraAccountDialog),
NotificationEnablingPage: components.NotificationEnablingPage,
ConfirmDialog: components.ConfirmDialog,
},
Expand All @@ -109,7 +114,7 @@ export default class App extends Mixins(mixins.TransactionMixin, NodeErrorMixin)

@getter.settings.nodeIsConnected nodeIsConnected!: boolean;
@getter.wallet.transactions.firstReadyTx firstReadyTransaction!: Nullable<HistoryItem>;
@getter.wallet.account.isLoggedIn isSoraAccountConnected!: boolean;
@getter.wallet.account.isLoggedIn isLoggedIn!: boolean;
@getter.libraryTheme libraryTheme!: Theme;
@getter.libraryDesignSystem libraryDesignSystem!: DesignSystem;

Expand Down Expand Up @@ -146,6 +151,9 @@ export default class App extends Mixins(mixins.TransactionMixin, NodeErrorMixin)
message: string;
}) => Promise<void>;

@state.wallet.transactions.isSignTxDialogVisible public isSignTxDialogVisible!: boolean;
@mutation.wallet.transactions.setSignTxDialogVisibility public setSignTxDialogVisibility!: (flag: boolean) => void;

// [DESKTOP] To Enable Desktop
// @mutation.wallet.account.setIsDesktop private setIsDesktop!: (v: boolean) => void;

Expand Down Expand Up @@ -173,7 +181,7 @@ export default class App extends Mixins(mixins.TransactionMixin, NodeErrorMixin)
}
}

@Watch('isSoraAccountConnected')
@Watch('isLoggedIn')
private async confirmInviteUserIfConnected(isSoraConnected: boolean): Promise<void> {
if (isSoraConnected) {
await this.confirmInvititation();
Expand All @@ -182,7 +190,7 @@ export default class App extends Mixins(mixins.TransactionMixin, NodeErrorMixin)

@Watch('storageReferrer', { immediate: true })
private async confirmInviteUserIfHasStorage(storageReferrerValue: string): Promise<void> {
if (this.isSoraAccountConnected && !!storageReferrerValue) {
if (this.isLoggedIn && !!storageReferrerValue) {
await this.confirmInvititation();
}
}
Expand Down Expand Up @@ -296,6 +304,10 @@ export default class App extends Mixins(mixins.TransactionMixin, NodeErrorMixin)
this.setBrowserNotifsPopupBlocked(value);
}

getApi() {
return api;
}

goTo(name: PageNames): void {
goTo(name);
this.closeMenu();
Expand Down
6 changes: 3 additions & 3 deletions src/components/App/Header/AppHeader.vue
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@
</s-button>
</div>
<div class="app-controls s-flex">
<app-account-button :disabled="loading" @click="goTo(PageNames.Wallet)" />
<app-account-button :disabled="loading" @click="navigateToWallet" />
<app-header-menu />
</div>
<select-language-dialog />
Expand All @@ -23,7 +23,7 @@ import { XOR, ETH } from '@sora-substrate/util/build/assets/consts';
import { components, WALLET_CONSTS } from '@soramitsu/soraneo-wallet-web';
import { Component, Mixins, Prop } from 'vue-property-decorator';

import WalletConnectMixin from '../../../components/mixins/WalletConnectMixin';
import InternalConnectMixin from '../../../components/mixins/InternalConnectMixin';
import PolkaswapLogo from '../../../components/shared/Logo/Polkaswap.vue';
import { PageNames, Components, BreakpointClass } from '../../../consts';
import { lazyComponent, goTo } from '../../../router';
Expand All @@ -49,7 +49,7 @@ import type Theme from '@soramitsu-ui/ui-vue2/lib/types/Theme';
WalletAvatar: components.WalletAvatar,
},
})
export default class AppHeader extends Mixins(WalletConnectMixin) {
export default class AppHeader extends Mixins(InternalConnectMixin) {
readonly PageNames = PageNames;
readonly xor = XOR;
readonly eth = ETH;
Expand Down
26 changes: 26 additions & 0 deletions src/components/mixins/InternalConnectMixin.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
import { Component, Mixins } from 'vue-property-decorator';

import TranslationMixin from '@/components/mixins/TranslationMixin';
import { PageNames } from '@/consts';
import { goTo } from '@/router';
import { getter, mutation, state } from '@/store/decorators';
import { formatAddress } from '@/utils';

@Component
export default class InternalConnectMixin extends Mixins(TranslationMixin) {
@state.wallet.account.address public soraAddress!: string;

@getter.wallet.account.isLoggedIn public isLoggedIn!: boolean;

@mutation.web3.setSoraAccountDialogVisibility public setSoraAccountDialogVisibility!: (flag: boolean) => void;

formatAddress = formatAddress;

public connectSoraWallet(): void {
this.setSoraAccountDialogVisibility(true);
}

public navigateToWallet(): void {
goTo(PageNames.Wallet);
}
}
20 changes: 5 additions & 15 deletions src/components/mixins/WalletConnectMixin.ts
Original file line number Diff line number Diff line change
@@ -1,43 +1,33 @@
import { Component, Mixins } from 'vue-property-decorator';

import TranslationMixin from '@/components/mixins/TranslationMixin';
import { PageNames } from '@/consts';
import InternalConnectMixin from '@/components/mixins/InternalConnectMixin';
import router from '@/router';
import { action, getter, mutation, state } from '@/store/decorators';
import { getWalletAddress, formatAddress } from '@/utils';
import { Provider, installExtensionKey, handleRpcProviderError } from '@/utils/ethers-util';

import type { BridgeNetworkType } from '@sora-substrate/util/build/bridgeProxy/consts';
import type { BridgeNetworkId } from '@sora-substrate/util/build/bridgeProxy/types';

@Component
export default class WalletConnectMixin extends Mixins(TranslationMixin) {
export default class WalletConnectMixin extends Mixins(InternalConnectMixin) {
@state.web3.evmProvider evmProvider!: Nullable<Provider>;
@state.web3.evmProviderLoading evmProviderLoading!: boolean;
@state.web3.evmProviderLoading evmProviderLoading!: Nullable<Provider>;
@state.web3.evmAddress evmAddress!: string;
@state.web3.networkSelected networkSelected!: BridgeNetworkId;
@state.web3.networkType networkType!: BridgeNetworkType;

@getter.wallet.account.isLoggedIn isSoraAccountConnected!: boolean;
@getter.bridge.isSubBridge isSubBridge!: boolean;

@mutation.web3.setSelectAccountDialogVisibility private setSelectAccountDialogVisibility!: (flag: boolean) => void;
@mutation.web3.setSubAccountDialogVisibility setSubAccountDialogVisibility!: (flag: boolean) => void;
@mutation.web3.setSelectProviderDialogVisibility setSelectProviderDialogVisibility!: (flag: boolean) => void;

@action.web3.changeEvmNetworkProvided changeEvmNetworkProvided!: AsyncFnWithoutArgs;
@action.web3.selectEvmProvider selectEvmProvider!: (provider: Provider) => Promise<void>;
@action.web3.resetEvmProviderConnection resetEvmProviderConnection!: FnWithoutArgs;
@action.web3.disconnectExternalNetwork disconnectExternalNetwork!: AsyncFnWithoutArgs;

getWalletAddress = getWalletAddress;
formatAddress = formatAddress;

connectSoraWallet(): void {
router.push({ name: PageNames.Wallet });
}

connectSubWallet(): void {
this.setSelectAccountDialogVisibility(true);
this.setSubAccountDialogVisibility(true);
}

connectEvmWallet(): void {
Expand Down
76 changes: 0 additions & 76 deletions src/components/pages/Bridge/SelectAccount.vue

This file was deleted.

56 changes: 56 additions & 0 deletions src/components/pages/Bridge/SelectAddress.vue
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
<template>
<div class="select-address">
<address-book-input ref="input" v-model="address" :is-valid="validAddress" @update-name="updateName" />

<s-button
class="s-typography-button--large select-address-button"
type="primary"
:disabled="!validAddress"
@click="handleSelectAddress"
>
{{ t('saveText') }}
</s-button>
</div>
</template>

<script lang="ts">
import { api, components } from '@soramitsu/soraneo-wallet-web';
import { Component, Mixins, ModelSync } from 'vue-property-decorator';

import TranslationMixin from '@/components/mixins/TranslationMixin';

// This component is not used for now, but kept for future
@Component({
components: {
AddressBookInput: components.AddressBookInput,
},
})
export default class BridgeSelectAddress extends Mixins(TranslationMixin) {
@ModelSync('value', 'input', { type: String })
readonly address!: string;

private name = '';

get validAddress(): boolean {
return api.validateAddress(this.address);
}

handleSelectAddress(): void {
this.$emit('select', { address: this.address, name: this.name });
}

updateName(name: string): void {
this.name = name;
}
}
</script>

<style lang="scss" scoped>
.select-address {
display: flex;
flex-flow: column nowrap;
gap: $inner-spacing-medium;

@include full-width-button('select-address-button', 0);
}
</style>
Loading