diff --git a/package.json b/package.json index c74e36d32..ccb098289 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "polkaswap-exchange-web", - "version": "1.23.2", + "version": "1.24.0", "repository": { "type": "git", "url": "https://github.com/sora-xor/polkaswap-exchange-web.git" @@ -24,7 +24,7 @@ }, "dependencies": { "@metamask/detect-provider": "^2.0.0", - "@soramitsu/soraneo-wallet-web": "1.23.3", + "@soramitsu/soraneo-wallet-web": "1.23.4", "@walletconnect/web3-provider": "^1.8.0", "core-js": "^3.26.0", "country-code-emoji": "^2.3.0", diff --git a/src/components/App/Menu/AppMenu.vue b/src/components/App/Menu/AppMenu.vue index c4016ca22..d2f1e73f6 100644 --- a/src/components/App/Menu/AppMenu.vue +++ b/src/components/App/Menu/AppMenu.vue @@ -248,34 +248,13 @@ export default class AppMenu extends Mixins(TranslationMixin) { background-color: unset !important; } } -} - -// TODO: [TECH] move from fonts provided values -.sora-card-sidebar-icon { - path { - fill: var(--s-color-base-content-tertiary) !important; - } -} -.el-menu-item:not(.is-active):not(.is-disabled) { - .sidebar-item-content { - &:hover .sora-card-sidebar-icon path { - fill: var(--s-color-base-content-secondary) !important; + .el-menu-item { + i.el-icon-bank-card { + width: 28px; } } } - -.el-menu-item.is-disabled { - &:hover path { - fill: var(--s-color-base-content-tertiary) !important; - } -} - -.is-active .sora-card-sidebar-icon { - path { - fill: var(--s-color-theme-accent) !important; - } -} </style> <style lang="scss" scoped> diff --git a/src/components/App/Menu/SidebarItemContent.vue b/src/components/App/Menu/SidebarItemContent.vue index 38c15d937..add8a2e99 100644 --- a/src/components/App/Menu/SidebarItemContent.vue +++ b/src/components/App/Menu/SidebarItemContent.vue @@ -1,10 +1,6 @@ <template> <component :is="tag" :class="classes" :tabindex="tabindex"> - <!-- TODO: [TECH] move from fonts provided values --> - <div v-if="icon === 'sora-card'" class="icon-container"> - <sora-card-icon class="sora-card-sidebar-icon" /> - </div> - <div v-else-if="icon" class="icon-container"> + <div if="icon" class="icon-container"> <s-icon :name="icon" size="28" /> </div> <span>{{ title }}</span> @@ -16,13 +12,7 @@ import { Component, Mixins, Prop } from 'vue-property-decorator'; import TranslationMixin from '@/components/mixins/TranslationMixin'; -import SoraCardIcon from './SoraCardIcon.vue'; - -@Component({ - components: { - SoraCardIcon, - }, -}) +@Component export default class AppSidebarItemContent extends Mixins(TranslationMixin) { @Prop({ default: '', type: String }) readonly icon!: string; @Prop({ default: '', type: String }) readonly title!: string; @@ -93,13 +83,4 @@ $icon-size: 42px; box-shadow: none; } } -.sora-card-sidebar-icon { - display: block; - margin: auto; - background-repeat: no-repeat; - background-position: center center; -} -.el-menu-item:not(.is-active):not(.is-disabled):focus .sora-card-sidebar-icon path { - fill: var(--s-color-base-content-secondary) !important; // focus state of sora card item -} </style> diff --git a/src/components/App/Menu/SoraCardIcon.vue b/src/components/App/Menu/SoraCardIcon.vue deleted file mode 100644 index 7de7d30a9..000000000 --- a/src/components/App/Menu/SoraCardIcon.vue +++ /dev/null @@ -1,16 +0,0 @@ -<template> - <svg width="24" height="24" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"> - <path - fill-rule="evenodd" - clip-rule="evenodd" - d="M0 5C0 2.79086 1.79086 1 4 1H20C22.2091 1 24 2.79086 24 5V6.25H0V5ZM24 10.25V7.75H0V10.25H24ZM24 11.75H0V19C0 21.2091 1.79086 23 4 23H20C22.2091 23 24 21.2091 24 19V11.75ZM6 16.25C5.58579 16.25 5.25 16.5858 5.25 17C5.25 17.4142 5.58579 17.75 6 17.75H8C8.41421 17.75 8.75 17.4142 8.75 17C8.75 16.5858 8.41421 16.25 8 16.25H6Z" - /> - </svg> -</template> - -<script lang="ts"> -import { Component, Vue } from 'vue-property-decorator'; - -@Component -export default class SoraCardIcon extends Vue {} -</script> diff --git a/src/components/pages/SoraCard/Dashboard/Dashboard.vue b/src/components/pages/SoraCard/Dashboard/Dashboard.vue index cd94ddbe8..e62676090 100644 --- a/src/components/pages/SoraCard/Dashboard/Dashboard.vue +++ b/src/components/pages/SoraCard/Dashboard/Dashboard.vue @@ -9,7 +9,17 @@ draggable="false" class="unselectable sora-card-hub-image" /> - <formatted-amount class="sora-card-hub-balance" :value="balance" fiatSign="€" value-can-be-hidden is-fiat-value /> + <formatted-amount + v-if="userInfo.iban" + class="sora-card-hub-balance" + :value="balance" + fiatSign="€" + value-can-be-hidden + is-fiat-value + /> + <p class="sora-card-hub-management-coming"> + {{ t('card.cardHub.comingSoon') }} + </p> <div class="sora-card-hub-options"> <s-button v-for="option in options" @@ -31,6 +41,10 @@ <s-input :placeholder="t('card.cardHub.ibanLabel')" :value="iban" readonly /> <s-icon name="basic-copy-24" @click.native="handleCopyIban" /> </div> + <div v-else class="sora-card-hub-info-iban-missing"> + <p class="label">{{ t('card.cardHub.ibanLabel') }}</p> + <p v-html="t('card.ibanPendingDesc', { email: emailLink })" /> + </div> <div class="sora-card-hub-logout" @click="logoutFromSoraCard"> <span>{{ t('card.cardHub.logout') }}</span> <s-icon name="arrows-chevron-right-rounded-24" size="18" /> @@ -74,6 +88,12 @@ export default class Dashboard extends Mixins(mixins.LoadingMixin, TranslationMi @state.soraCard.userInfo userInfo!: UserInfo; @state.wallet.settings.shouldBalanceBeHidden private shouldBalanceBeHidden!: boolean; + email = 'techsupport@soracard.com'; + + get emailLink(): string { + return `<a href='mailto: ${this.email} rel="nofollow noopener"'>${this.email}</a>`; + } + options: Array<Options> = [ { icon: OptionsIcon.TopUp, type: Option.TopUp }, { icon: OptionsIcon.Transfer, type: Option.Transfer }, @@ -88,9 +108,9 @@ export default class Dashboard extends Mixins(mixins.LoadingMixin, TranslationMi get balance(): string { const balance = this.userInfo.availableBalance; - if (balance === 0) return '0'; + if (!balance) return '0'; - return balance ? `${balance / 100}` : ''; + return `${balance / 100}`; } handleClick(type: Option): void {} @@ -114,6 +134,7 @@ export default class Dashboard extends Mixins(mixins.LoadingMixin, TranslationMi .sora-card { &-hub { &-balance { + margin-bottom: $basic-spacing; .formatted-amount { font-size: 28px; letter-spacing: -0.56px; @@ -167,28 +188,60 @@ export default class Dashboard extends Mixins(mixins.LoadingMixin, TranslationMi margin-right: $inner-spacing-mini; } } + + &-management-coming { + text-align: center; + color: var(--s-color-base-content-secondary); + font-size: var(--s-font-size-medium); + margin-bottom: $basic-spacing-mini; + font-weight: 500; + } + &-logout { margin-top: $inner-spacing-mini; display: flex; align-items: center; justify-content: space-between; background: var(--s-color-utility-body); - font-size: var(--s-font-size-big); + font-size: var(--s-font-size-medium); font-weight: 500; border-radius: var(--s-border-radius-small); padding: 18px $basic-spacing; color: var(--s-color-theme-accent-hover); - i { - color: var(--s-color-base-content-tertiary); - } &:hover { cursor: pointer; } + &:hover i { color: var(--s-color-base-content-secondary); } } + + &-info { + &-iban-missing { + margin-top: $inner-spacing-mini; + background: var(--s-color-utility-body); + font-size: var(--s-font-size-medium); + font-weight: 400; + border-radius: var(--s-border-radius-small); + padding: 18px $basic-spacing; + line-height: 140%; + + .label { + color: var(--s-color-base-content-secondary); + margin-bottom: 5px; + } + + &:hover i { + color: var(--s-color-base-content-secondary); + } + } + + i { + color: var(--s-color-base-content-tertiary); + } + } } &-hub-info { @@ -215,3 +268,13 @@ export default class Dashboard extends Mixins(mixins.LoadingMixin, TranslationMi } } </style> + +<style lang="scss"> +.sora-card-hub-info-iban-missing { + a { + color: var(--s-color-base-content-primary); + + @include focus-outline; + } +} +</style> diff --git a/src/components/pages/SoraCard/common/BalanceIndicator.vue b/src/components/pages/SoraCard/common/BalanceIndicator.vue index 9222ecc70..f62254115 100644 --- a/src/components/pages/SoraCard/common/BalanceIndicator.vue +++ b/src/components/pages/SoraCard/common/BalanceIndicator.vue @@ -25,14 +25,12 @@ import TranslationMixin from '@/components/mixins/TranslationMixin'; import { state } from '@/store/decorators'; import { delay } from '@/utils'; -const hundred = 100; - @Component export default class BalanceIndicator extends Mixins(TranslationMixin, mixins.LoadingMixin) { @state.soraCard.xorToDeposit private xorToDeposit!: FPNumber; @state.soraCard.euroBalance private euroBalance!: string; - @Ref('progress') private readonly progressBar!: HTMLInputElement; + @Ref('progress') private readonly progressBar!: Nullable<HTMLInputElement>; @Watch('euroBalance') private handleEuroBalanceChange() { @@ -47,17 +45,19 @@ export default class BalanceIndicator extends Mixins(TranslationMixin, mixins.Lo } async runProgressBarAnimation(): Promise<void> { - if (this.progressBar) { - const balanceInteger = Math.round(Number(this.euroBalance)); - for (let i = 0; i < balanceInteger; i = i + 0.12) { - await delay(1); - this.progressBar.style.setProperty('width', `${i}%`); - } + if (!this.progressBar) return; + + const balanceInteger = Math.round(Number(this.euroBalance)); + for (let i = 0; i < balanceInteger; i = i + 0.12) { + await delay(1); + this.progressBar?.style?.setProperty?.('width', `${i}%`); } } mounted(): void { - setTimeout(this.runProgressBarAnimation, 2500); + this.$nextTick().then(() => { + setTimeout(this.runProgressBarAnimation, 2_500); + }); } } </script> diff --git a/src/components/pages/SoraCard/steps/Phone.vue b/src/components/pages/SoraCard/steps/Phone.vue index 19fd4947e..341351bfd 100644 --- a/src/components/pages/SoraCard/steps/Phone.vue +++ b/src/components/pages/SoraCard/steps/Phone.vue @@ -1,17 +1,32 @@ <template> <div> + <p class="sora-card__number-input-desc">{{ t('card.verificationCodeText') }}</p> + <s-button + class="country-container" + autofocus + type="tertiary" + size="big" + :disabled="phoneInputDisabled" + @click="openSelectCountryDialog" + > + <span class="country-container__label s-flex"> + <span class="country-container__text s-flex"> + <template v-if="selectedCountry"> + <span class="country-container__flag">{{ selectedCountry.flag }}</span> + <span>{{ selectedCountry.translatedName }}</span> + </template> + <template v-else> + <div class="country-container__flag country-container__flag--empty" /> + <span>{{ t('card.selectCountryText') }}</span> + </template> + </span> + <s-icon class="country-container__icon" name="arrows-circle-chevron-bottom-24" size="18" /> + </span> + </s-button> <div class="sora-card__number-input"> <div class="phone-container s-flex"> + <s-input class="phone-code" disabled :placeholder="t('card.code')" :value="selectedCountry?.dialCode || ''" /> <s-input - ref="code" - class="phone-code" - :placeholder="countryCodePlaceholder" - v-maska="'+###'" - v-model="countryCode" - :disabled="phoneInputDisabled" - /> - <s-input - ref="phone" class="phone-number" :placeholder="t('card.phonePlaceholder')" v-maska="'############'" @@ -48,28 +63,34 @@ > <span class="text"> {{ buttonText }}</span> </s-button> + <select-country-dialog :visible.sync="showSelectCountryDialog" @select="handleSelectCountry" /> </div> </template> <script lang="ts"> -import { mixins, WALLET_CONSTS } from '@soramitsu/soraneo-wallet-web'; +import { mixins } from '@soramitsu/soraneo-wallet-web'; import { Component, Mixins, Watch, Ref } from 'vue-property-decorator'; import TranslationMixin from '@/components/mixins/TranslationMixin'; +import { Components } from '@/consts'; +import { lazyComponent } from '@/router'; import { action, getter, mutation, state } from '@/store/decorators'; -import { UserInfo, VerificationStatus, CardUIViews, AttemptCounter } from '@/types/card'; +import { UserInfo, VerificationStatus, CardUIViews, AttemptCounter, CountryInfo } from '@/types/card'; const MIN_PHONE_LENGTH_WITH_CODE = 8; const OTP_CODE_LENGTH = 6; const RESEND_INTERVAL = 59; -@Component +@Component({ + components: { + SelectCountryDialog: lazyComponent(Components.SelectCountryDialog), + }, +}) export default class Phone extends Mixins(TranslationMixin, mixins.LoadingMixin, mixins.NotificationMixin) { @state.soraCard.authLogin private authLogin!: any; @state.soraCard.userInfo userInfo!: UserInfo; @state.soraCard.attemptCounter private attemptCounter!: AttemptCounter; @state.soraCard.wantsToPassKycAgain private wantsToPassKycAgain!: boolean; - @state.wallet.settings.soraNetwork private soraNetwork!: WALLET_CONSTS.SoraNetwork; @getter.soraCard.currentStatus private currentStatus!: VerificationStatus; @getter.soraCard.isEuroBalanceEnough private isEuroBalanceEnough!: boolean; @@ -82,12 +103,8 @@ export default class Phone extends Mixins(TranslationMixin, mixins.LoadingMixin, @action.soraCard.initPayWingsAuthSdk private initPayWingsAuthSdk!: AsyncFnWithoutArgs; @action.soraCard.getUserKycAttempt private getUserKycAttempt!: AsyncFnWithoutArgs; - @Ref('code') private readonly inputCode!: HTMLInputElement; - @Ref('phone') private readonly inputPhone!: HTMLInputElement; @Ref('otp') private readonly inputOtp!: HTMLInputElement; - private countryCodeInternal = ''; - private phoneNumberInternal = ''; private smsCountDown = ''; private smsResendCount = RESEND_INTERVAL; @@ -95,6 +112,9 @@ export default class Phone extends Mixins(TranslationMixin, mixins.LoadingMixin, smsSent = false; sendOtpBtnLoading = false; notFoundPhoneWhenApplied = false; + showSelectCountryDialog = false; + selectedCountry: Nullable<CountryInfo> = null; + phoneNumber = ''; @Watch('smsResendCount', { immediate: true }) private handleSmsCountChange(value: number): void { @@ -119,8 +139,11 @@ export default class Phone extends Mixins(TranslationMixin, mixins.LoadingMixin, } sendSms(): void { + if (this.phoneNumber[0] === '0') { + this.phoneNumber = this.phoneNumber.slice(1); // remove 1st zero + } this.authLogin - .PayWingsSendOtp(`${this.countryCode}${this.phoneNumber}`, 'Your verification code is: @Otp') + .PayWingsSendOtp(`${this.selectedCountry?.dialCode}${this.phoneNumber}`, 'Your verification code is: @Otp') .catch((error) => { console.error('[SoraCard]: Auth', error); }); @@ -128,31 +151,12 @@ export default class Phone extends Mixins(TranslationMixin, mixins.LoadingMixin, this.startSmsCountDown(); } - get countryCode(): string { - return this.countryCodeInternal; - } - - set countryCode(value: string) { - if (value.length > 3) { - this.inputPhone.focus(); - } - this.countryCodeInternal = value; + openSelectCountryDialog(): void { + this.showSelectCountryDialog = true; } - get phoneNumber(): string { - return this.phoneNumberInternal; - } - - set phoneNumber(value: string) { - if (!value.length) { - this.inputCode.focus(); - } - this.phoneNumberInternal = value; - } - - /** Real example when `countryCode` is empty */ - get countryCodePlaceholder(): string { - return this.countryCode ? this.t('card.code') : '+44'; + handleSelectCountry(country: CountryInfo): void { + this.selectedCountry = country; } get buttonDisabled() { @@ -181,8 +185,8 @@ export default class Phone extends Mixins(TranslationMixin, mixins.LoadingMixin, } get isPhoneNumberValid(): boolean { - const code = this.countryCode.replace('+', ''); - return !!(+code && this.phoneNumber && `${code}${this.phoneNumber}`.length >= MIN_PHONE_LENGTH_WITH_CODE); + const code = this.selectedCountry?.dialCode; + return !!(code && this.phoneNumber && `${code}${this.phoneNumber}`.length >= MIN_PHONE_LENGTH_WITH_CODE); } get sendSmsDisabled(): boolean { @@ -197,7 +201,7 @@ export default class Phone extends Mixins(TranslationMixin, mixins.LoadingMixin, if (this.smsSent) { return this.t('card.phoneInputAfterSendDesc'); } - return this.t('card.phoneInputBeforeSendDesc'); + return this.t('card.noSpamText'); } startSmsCountDown(): void { @@ -215,7 +219,6 @@ export default class Phone extends Mixins(TranslationMixin, mixins.LoadingMixin, async mounted(): Promise<void> { await this.$nextTick(); - this.inputCode.focus(); localStorage.removeItem('PW-Email'); @@ -349,4 +352,54 @@ input::-webkit-outer-spin-button, input::-webkit-inner-spin-button { -webkit-appearance: none; } + +.country-container { + $max-text-width: 370px - $inner-spacing-mini; + + width: 100%; + margin-bottom: $inner-spacing-medium; + + &:not(:disabled):hover { + .country-container__flag--empty { + background-color: var(--s-color-base-content-secondary); + } + .country-container__icon { + color: var(--s-color-base-content-secondary); + } + } + + &:disabled .country-container__icon:hover { + color: var(--s-color-base-content-tertiary); + cursor: not-allowed; + } + + &__label { + width: 100%; + align-items: center; + justify-content: space-between; + } + + &__flag { + margin-right: $inner-spacing-mini; + font-size: 20px; + &--empty { + background-color: var(--s-color-base-content-tertiary); + height: $inner-spacing-small; + width: $inner-spacing-small; + border-radius: 50%; + } + } + + &__text { + align-items: center; + max-width: $max-text-width; + > :last-child { + @include text-ellipsis; + } + } + + &__icon { + margin-left: $inner-spacing-mini; + } +} </style> diff --git a/src/components/pages/SoraCard/steps/SelectCountryDialog.vue b/src/components/pages/SoraCard/steps/SelectCountryDialog.vue new file mode 100644 index 000000000..f9f2feeb9 --- /dev/null +++ b/src/components/pages/SoraCard/steps/SelectCountryDialog.vue @@ -0,0 +1,163 @@ +<template> + <dialog-base :visible.sync="isVisible" class="select-country-dialog" :title="t('card.selectCountryText')"> + <search-input + ref="search" + v-model="query" + class="select-country__search" + autofocus + :placeholder="t('card.filterCountries')" + @clear="handleClearSearch" + /> + <s-scrollbar class="select-country__scrollbar"> + <div class="select-country__list"> + <div + class="p1 select-country__item s-flex" + v-for="item in filteredCountries" + :key="item.key" + @click="selectCountry(item)" + > + <span class="flags flag-emodji">{{ item.flag }}</span> + <span class="text"> + <p class="p1 text__name">{{ item.translatedName }}</p> + <p class="p3 text__name">{{ item.name }}</p> + </span> + <span class="p1 code">{{ item.dialCode }}</span> + </div> + </div> + </s-scrollbar> + </dialog-base> +</template> + +<script lang="ts"> +import { components, mixins } from '@soramitsu/soraneo-wallet-web'; +import { countryCodeEmoji } from 'country-code-emoji'; +import { Component, Mixins, Watch } from 'vue-property-decorator'; + +import SearchInputMixin from '@/components/mixins/SearchInputMixin'; +import TranslationMixin from '@/components/mixins/TranslationMixin'; +import { state } from '@/store/decorators'; +import type { CountryInfo, PhoneCode } from '@/types/card'; +import { getPhoneCodes } from '@/utils/card'; + +@Component({ + components: { + DialogBase: components.DialogBase, + SearchInput: components.SearchInput, + }, +}) +export default class SelectCountryDialog extends Mixins(TranslationMixin, mixins.DialogMixin, SearchInputMixin) { + @state.settings.displayRegions private displayRegions!: Nullable<Intl.DisplayNames>; + private countriesObject: Record<string, PhoneCode> = {}; + + private get countries(): Array<CountryInfo> { + return Object.entries(this.countriesObject) + .map(([key, value]) => { + const flag = this.getFlag(key); + const translatedName = this.formatCountryName(key, value.name); + return { + key, + name: value.name, + dialCode: value.dial_code, + flag, + translatedName, + }; + }) + .sort((a, b) => (a.translatedName < b.translatedName ? -1 : a.translatedName > b.translatedName ? 1 : 0)); + } + + get filteredCountries() { + const countries = this.countries; + if (this.query) { + const query = this.query.toLowerCase().trim(); + return countries.filter( + (item) => + item.dialCode.includes(query) || + item.name.toLowerCase().includes(query) || + item.translatedName.toLowerCase().includes(query) + ); + } + return countries; + } + + private getFlag(iso: string): string { + try { + return countryCodeEmoji(iso); + } catch { + return ''; + } + } + + private formatCountryName(key: string, defaultValue: string): string { + try { + const isoCode = key.toUpperCase(); + if (!this.displayRegions) { + return defaultValue; + } + const name = this.displayRegions.of(isoCode); + return name ?? defaultValue; + } catch (error) { + console.warn('Unsupported format of SORA Card Phone Country', error); + return defaultValue; + } + } + + async mounted(): Promise<void> { + this.countriesObject = await getPhoneCodes(); + } + + @Watch('visible') + private async handleVisibleChangeToFocusSearch(value: boolean): Promise<void> { + await this.$nextTick(); + + if (!value) return; + this.clearAndFocusSearch(); + } + + public selectCountry(country: CountryInfo): void { + this.handleClearSearch(); + this.$emit('select', country); + this.closeDialog(); + } +} +</script> + +<style lang="scss"> +.select-country__scrollbar { + @include scrollbar(-$inner-spacing-big); +} +</style> + +<style lang="scss" scoped> +$item-height: 66px; +$list-items: 7; +$max-text-width: 370px; + +.select-country { + &__search { + margin-bottom: $inner-spacing-medium; + } + &__list { + height: calc(#{$item-height} * #{$list-items}); + } + &__item { + align-items: center; + height: $item-height; + padding: $inner-spacing-small $inner-spacing-big; + + &:hover { + background-color: var(--s-color-base-background-hover); + cursor: pointer; + } + .text { + flex: 1; + &__name { + max-width: $max-text-width; + @include text-ellipsis; + } + } + .flags { + margin-right: $inner-spacing-mini; + } + } +} +</style> diff --git a/src/components/pages/X1/X1Dialog.vue b/src/components/pages/X1/X1Dialog.vue index 787ad07a1..9503901fe 100644 --- a/src/components/pages/X1/X1Dialog.vue +++ b/src/components/pages/X1/X1Dialog.vue @@ -6,10 +6,12 @@ :id="widgetId" data-from-currency="EUR" data-locale="en" + :data-to-blockchain="blockchainSymbol" :data-address="accountAddress" :data-from-amount="restEuroToDeposit" :data-hide-buy-more-button="true" :data-hide-try-again-button="false" + :data-disable-to-blockchain="true" /> <div v-else class="x1-error-info-banner"> <s-icon class="x1-error-info-banner__icon" name="basic-clear-X-24" size="64px" /> @@ -77,6 +79,10 @@ export default class X1Dialog extends Mixins(mixins.DialogMixin, mixins.LoadingM return this.X1Widget.widgetId; } + get blockchainSymbol(): string { + return this.soraNetwork === WALLET_CONSTS.SoraNetwork.Prod ? 'XOR' : 'TXOR'; + } + async loadX1(): Promise<void> { try { await ScriptLoader.load(this.X1Widget.sdkUrl, false); diff --git a/src/components/shared/Input/TokenSelectButton.vue b/src/components/shared/Input/TokenSelectButton.vue index 64d5fe3d1..9018b9bab 100644 --- a/src/components/shared/Input/TokenSelectButton.vue +++ b/src/components/shared/Input/TokenSelectButton.vue @@ -41,7 +41,7 @@ import type { Asset, AccountAsset } from '@sora-substrate/util/build/assets/type export default class TokenSelectButton extends Mixins(TranslationMixin) { @Prop({ type: Object, default: () => null }) readonly token!: AccountAsset | Asset; @Prop({ type: Array, default: () => [] }) readonly tokens!: Array<AccountAsset | Asset>; - @Prop({ type: String, default: '' }) readonly icon!: boolean; + @Prop({ type: String, default: '' }) readonly icon!: string; @Prop({ type: [Number, String], default: 0 }) readonly tabindex!: number | string; get hasToken(): boolean { diff --git a/src/consts/index.ts b/src/consts/index.ts index d31c1e0d4..1578b59b0 100644 --- a/src/consts/index.ts +++ b/src/consts/index.ts @@ -172,6 +172,7 @@ export enum Components { ConfirmationInfo = 'pages/SoraCard/ConfirmationInfo', TermsAndConditions = 'pages/SoraCard/steps/TermsAndConditions', ToSDialog = 'pages/SoraCard/steps/ToSDialog', + SelectCountryDialog = 'pages/SoraCard/steps/SelectCountryDialog', Phone = 'pages/SoraCard/steps/Phone', Email = 'pages/SoraCard/steps/Email', Payment = 'pages/SoraCard/steps/Payment', @@ -330,7 +331,7 @@ const OtherPagesMenu: Array<SidebarMenuItemLink> = [ href: '/#/stats', }, { - icon: 'sora-card', + icon: 'el-icon-bank-card', title: PageNames.SoraCard, href: '/#/card', }, diff --git a/src/indexer/queries/assetSupply.ts b/src/indexer/queries/assetSupply.ts index 33a43ba19..fa1665aaf 100644 --- a/src/indexer/queries/assetSupply.ts +++ b/src/indexer/queries/assetSupply.ts @@ -1,14 +1,10 @@ import { FPNumber } from '@sora-substrate/math'; import { getCurrentIndexer, WALLET_CONSTS } from '@soramitsu/soraneo-wallet-web'; import { SubqueryIndexer, SubsquidIndexer } from '@soramitsu/soraneo-wallet-web/lib/services/indexer'; -import { SubsquidAssetSnapshotEntity } from '@soramitsu/soraneo-wallet-web/lib/services/indexer/subsquid/types'; import { gql } from '@urql/core'; -import type { - SubqueryAssetSnapshotEntity, - SubqueryConnectionQueryResponse, -} from '@soramitsu/soraneo-wallet-web/lib/services/indexer/subquery/types'; -import type { SnapshotTypes } from '@soramitsu/soraneo-wallet-web/lib/services/indexer/types'; +import type { SubqueryConnectionQueryResponse } from '@soramitsu/soraneo-wallet-web/lib/services/indexer/subquery/types'; +import type { SnapshotTypes, AssetSnapshotEntity } from '@soramitsu/soraneo-wallet-web/lib/services/indexer/types'; const { IndexerType } = WALLET_CONSTS; @@ -19,7 +15,7 @@ export type ChartData = { burn: number; }; -const SubqueryAssetSupplyQuery = gql<SubqueryConnectionQueryResponse<SubqueryAssetSnapshotEntity>>` +const SubqueryAssetSupplyQuery = gql<SubqueryConnectionQueryResponse<AssetSnapshotEntity>>` query AssetSupplyQuery($after: Cursor, $type: SnapshotType, $id: String, $from: Int, $to: Int) { data: assetSnapshots( after: $after @@ -49,7 +45,7 @@ const SubqueryAssetSupplyQuery = gql<SubqueryConnectionQueryResponse<SubqueryAss } `; -const SubsquidAssetSupplyQuery = gql<SubqueryConnectionQueryResponse<SubsquidAssetSnapshotEntity>>` +const SubsquidAssetSupplyQuery = gql<SubqueryConnectionQueryResponse<AssetSnapshotEntity>>` query AssetSupplyQuery($after: String, $type: SnapshotType, $id: String, $from: Int, $to: Int) { data: assetSnapshotsConnection( after: $after @@ -78,7 +74,7 @@ const toNumber = (value: string): number => { return fp.isFinity() ? fp.toNumber() : 0; }; -const parse = (node: SubqueryAssetSnapshotEntity | SubsquidAssetSnapshotEntity): ChartData => { +const parse = (node: AssetSnapshotEntity): ChartData => { return { timestamp: +node.timestamp * 1000, value: toNumber(node.supply), diff --git a/src/indexer/queries/assets.ts b/src/indexer/queries/assets.ts index 0fabceaa0..9105f13f5 100644 --- a/src/indexer/queries/assets.ts +++ b/src/indexer/queries/assets.ts @@ -7,12 +7,10 @@ import last from 'lodash/fp/last'; import type { Asset } from '@sora-substrate/util/build/assets/types'; import type { SubqueryAssetEntity, - SubqueryAssetSnapshotEntity, SubqueryConnectionQueryResponse, } from '@soramitsu/soraneo-wallet-web/lib/services/indexer/subquery/types'; import type { SubsquidAssetEntity, - SubsquidAssetSnapshotEntity, SubsquidConnectionQueryResponse, } from '@soramitsu/soraneo-wallet-web/lib/services/indexer/subsquid/types'; import type { AssetSnapshotEntity } from '@soramitsu/soraneo-wallet-web/lib/services/indexer/types'; @@ -31,16 +29,16 @@ export type TokenData = { type SubqueryAssetData = SubqueryAssetEntity & { hourSnapshots: { - nodes: SubqueryAssetSnapshotEntity[]; + nodes: AssetSnapshotEntity[]; }; daySnapshots: { - nodes: SubqueryAssetSnapshotEntity[]; + nodes: AssetSnapshotEntity[]; }; }; type SubsquidAssetData = SubsquidAssetEntity & { - hourSnapshots: SubsquidAssetSnapshotEntity[]; - daySnapshots: SubsquidAssetSnapshotEntity[]; + hourSnapshots: AssetSnapshotEntity[]; + daySnapshots: AssetSnapshotEntity[]; }; const SubqueryAssetsQuery = gql<SubqueryConnectionQueryResponse<SubqueryAssetData>>` diff --git a/src/lang/card/cs.json b/src/lang/card/cs.json index 9d44ec0d8..4f763d1b4 100644 --- a/src/lang/card/cs.json +++ b/src/lang/card/cs.json @@ -21,9 +21,11 @@ }, "okReadyText": "OK, jsem připraven", "emailPlaceholder": "E-mailem", + "noSpamText": "Žádný spam! Pouze pro zabezpečení vašeho účtu", "sendCodeBtn": "Pošlete SMS kód", "firstNamePlaceholder": "Jméno", "lastNamePlaceholder": "Příjmení", + "verificationCodeText": "Obdržíte ověřovací kód prostřednictvím SMS", "phonePlaceholder": "Telefonní číslo", "statusPendingTitle": "Probíhá ověřování", "sendEmailLinkBtn": "Poslat odkaz", @@ -94,6 +96,9 @@ "or": "nebo", "oneTimeApplicationFee": "Jednorázový poplatek za vydání karty", "applicationFeeNote": "Poznámka: Vydání placené karty bude k dispozici později.", - "statusRejectReasonMultiple": "Vaše přihláška byla zamítnuta z několika důvodů:" + "statusRejectReasonMultiple": "Vaše přihláška byla zamítnuta z několika důvodů:", + "selectCountryText": "Vyberte vaší zemi", + "filterCountries": "Filtrovat podle země nebo volacího kódu", + "ibanPendingDesc": "Vaše vydání IBAN čeká na vyřízení.\n V případě, že čekáte déle než 72 hodin, kontaktujte nás prostřednictvím {email}" } } \ No newline at end of file diff --git a/src/lang/card/de.json b/src/lang/card/de.json index 30931659b..7cb66ce03 100644 --- a/src/lang/card/de.json +++ b/src/lang/card/de.json @@ -21,9 +21,11 @@ }, "okReadyText": "OK, ich bin bereit", "emailPlaceholder": "E-Mail", + "noSpamText": "Kein Spam! Nur um Ihr Konto zu sichern", "sendCodeBtn": "SMS Code senden", "firstNamePlaceholder": "Vorname", "lastNamePlaceholder": "Familienname, Nachname", + "verificationCodeText": "Sie erhalten einen Verifizierungscode per SMS", "phonePlaceholder": "Telefonnummer", "statusPendingTitle": "Überprüfung läuft", "sendEmailLinkBtn": "Link senden", @@ -94,6 +96,9 @@ "or": "oder", "oneTimeApplicationFee": "Einmalige Gebühr für die Ausstellung einer Karte", "applicationFeeNote": "Hinweis: Die Ausstellung einer kostenpflichtigen Karte wird zu einem späteren Zeitpunkt verfügbar sein.", - "statusRejectReasonMultiple": "Ihr Antrag wurde aus mehreren Gründen abgelehnt:" + "statusRejectReasonMultiple": "Ihr Antrag wurde aus mehreren Gründen abgelehnt:", + "selectCountryText": "Wähle dein Land", + "filterCountries": "Nach Land oder Vorwahl filtern", + "ibanPendingDesc": "Die Ausstellung Ihrer IBAN steht noch aus.\n Falls die Wartezeit länger als 72 Stunden dauert, kontaktieren Sie uns per {email}" } } \ No newline at end of file diff --git a/src/lang/card/en.json b/src/lang/card/en.json index c49f04f08..91022a372 100644 --- a/src/lang/card/en.json +++ b/src/lang/card/en.json @@ -21,9 +21,11 @@ }, "okReadyText": "OK, I’m ready", "emailPlaceholder": "Email", + "noSpamText": "No spam! Only to secure your account", "sendCodeBtn": "Send SMS code", "firstNamePlaceholder": "First name", "lastNamePlaceholder": "Last name", + "verificationCodeText": "You will receive a verification code via SMS", "phonePlaceholder": "Phone Number", "statusPendingTitle": "Verification in progress", "sendEmailLinkBtn": "Send link", @@ -94,6 +96,9 @@ "or": "or", "oneTimeApplicationFee": "One-time fee to issue a card", "applicationFeeNote": "Note: paid card issuance will be available at a later stage.", - "statusRejectReasonMultiple": "Your application has been rejected for multiple reasons:" + "statusRejectReasonMultiple": "Your application has been rejected for multiple reasons:", + "selectCountryText": "Select your country", + "filterCountries": "Filter by Country or Dial code", + "ibanPendingDesc": "Your IBAN issuance is pending.<br/>In case the wait longer than 72h contact us via {email}" } } \ No newline at end of file diff --git a/src/lang/card/es.json b/src/lang/card/es.json index d9e0a374e..edb03ca13 100644 --- a/src/lang/card/es.json +++ b/src/lang/card/es.json @@ -21,9 +21,11 @@ }, "okReadyText": "De acuerdo, estoy listo", "emailPlaceholder": "Correo electrónico", + "noSpamText": "Sin spam! Sólo para asegurar tu cuenta", "sendCodeBtn": "Enviar código SMS", "firstNamePlaceholder": "Nombre", "lastNamePlaceholder": "Apellido", + "verificationCodeText": "Recibirá un código de verificación por SMS", "phonePlaceholder": "Número de teléfono", "statusPendingTitle": "Verificación en progreso", "sendEmailLinkBtn": "Enviar enlace", @@ -94,6 +96,9 @@ "or": "o", "oneTimeApplicationFee": "Tarifa única para emitir una tarjeta", "applicationFeeNote": "Nota: la emisión de tarjetas pagas estará disponible en una etapa posterior.", - "statusRejectReasonMultiple": "Su solicitud ha sido rechazada por múltiples motivos:" + "statusRejectReasonMultiple": "Su solicitud ha sido rechazada por múltiples motivos:", + "selectCountryText": "Selecciona tu pais", + "filterCountries": "Filtrar por país o código de marcación", + "ibanPendingDesc": "Tu emisión de IBAN está pendiente.\n En caso de que la espera supere las 72h contáctenos vía {email}" } } \ No newline at end of file diff --git a/src/lang/card/fr.json b/src/lang/card/fr.json index 64f9e7b2f..958820ccf 100644 --- a/src/lang/card/fr.json +++ b/src/lang/card/fr.json @@ -21,9 +21,11 @@ }, "okReadyText": "OK, je suis prêt(e)", "emailPlaceholder": "E-mail", + "noSpamText": "Pas de spam. Seulement pour sécuriser votre compte", "sendCodeBtn": "Envoyer le code", "firstNamePlaceholder": "Prénom", "lastNamePlaceholder": "Nom de famille", + "verificationCodeText": "Vous allez recevoir un code de vérification par SMS", "phonePlaceholder": "Numéro de téléphone", "statusPendingTitle": "Vérification en cours", "sendEmailLinkBtn": "Envoyer le lien", @@ -94,6 +96,9 @@ "or": "ou", "oneTimeApplicationFee": "Frais uniques pour émettre une carte", "applicationFeeNote": "Remarque : l'émission de cartes payantes sera disponible ultérieurement.", - "statusRejectReasonMultiple": "Votre candidature a été rejetée pour plusieurs raisons :" + "statusRejectReasonMultiple": "Votre candidature a été rejetée pour plusieurs raisons :", + "selectCountryText": "Sélectionnez votre pays", + "filterCountries": "Filtrer par pays ou code d'appel", + "ibanPendingDesc": "Votre émission d'IBAN est en attente.\n En cas d'attente supérieure à 72 heures, contactez-nous via {email}" } } \ No newline at end of file diff --git a/src/lang/card/hr.json b/src/lang/card/hr.json index bafbd4d76..5d2e91bcf 100644 --- a/src/lang/card/hr.json +++ b/src/lang/card/hr.json @@ -21,9 +21,11 @@ }, "okReadyText": "OK, spreman sam", "emailPlaceholder": "E-mail", + "noSpamText": "Bez spama! Samo da osigurate svoj račun", "sendCodeBtn": "Pošalji SMS kod", "firstNamePlaceholder": "Ime", "lastNamePlaceholder": "Prezime", + "verificationCodeText": "Primit ćete kontrolni kod putem SMS-a", "phonePlaceholder": "Broj telefona", "statusPendingTitle": "Provjera u tijeku", "sendEmailLinkBtn": "Pošalji link", @@ -94,6 +96,9 @@ "or": "ili", "oneTimeApplicationFee": "Jednokratna naknada za izdavanje kartice", "applicationFeeNote": "Napomena: izdavanje plaćene kartice bit će dostupno naknadno.", - "statusRejectReasonMultiple": "Vaša prijava je odbijena iz više razloga:" + "statusRejectReasonMultiple": "Vaša prijava je odbijena iz više razloga:", + "selectCountryText": "Izaberite svoju zemlju", + "filterCountries": "Filtrirajte po zemlji ili pozivnom broju", + "ibanPendingDesc": "Vaše izdavanje IBAN-a je na čekanju.\n U slučaju čekanja dužeg od 72h kontaktirajte nas putem {email}" } } \ No newline at end of file diff --git a/src/lang/card/hu.json b/src/lang/card/hu.json index a8c45a1b3..075d452b1 100644 --- a/src/lang/card/hu.json +++ b/src/lang/card/hu.json @@ -21,9 +21,11 @@ }, "okReadyText": "Rendben, készen állok", "emailPlaceholder": "Email", + "noSpamText": "Nincs spam! Csak a fiók biztonsága érdekében", "sendCodeBtn": "SMS kód küldése", "firstNamePlaceholder": "Keresztnév", "lastNamePlaceholder": "Vezetéknév", + "verificationCodeText": "SMS-ben fog kapni egy ellenőrző kódot", "phonePlaceholder": "Telefonszám", "statusPendingTitle": "Ellenőrzés folyamatban", "sendEmailLinkBtn": "Link elküldése", @@ -94,6 +96,9 @@ "or": "vagy", "oneTimeApplicationFee": "A kártya kiállításának egyszeri díja", "applicationFeeNote": "Megjegyzés: a fizetős kártya kibocsátása egy későbbi szakaszban lesz elérhető.", - "statusRejectReasonMultiple": "Jelentkezését több okból is elutasították:" + "statusRejectReasonMultiple": "Jelentkezését több okból is elutasították:", + "selectCountryText": "Válaszd ki az országod", + "filterCountries": "Szűrés ország vagy hívószám szerint", + "ibanPendingDesc": "Az Ön IBAN-kibocsátása függőben van.\n 72 óránál hosszabb várakozás esetén vegye fel velünk a kapcsolatot a következő címen {email}" } } \ No newline at end of file diff --git a/src/lang/card/hy.json b/src/lang/card/hy.json index d2dbd400e..e8d75768b 100644 --- a/src/lang/card/hy.json +++ b/src/lang/card/hy.json @@ -21,9 +21,11 @@ }, "okReadyText": "Լավ, ես պատրաստ եմ", "emailPlaceholder": "Էլ", + "noSpamText": "Ոչ մի սպամ: Միայն ձեր հաշիվը պաշտպանելու համար", "sendCodeBtn": "Ուղարկեք SMS կոդը", "firstNamePlaceholder": "Անուն", "lastNamePlaceholder": "Ազգանուն", + "verificationCodeText": "Դուք կստանաք հաստատման կոդ SMS-ի միջոցով", "phonePlaceholder": "Հեռախոսահամար", "statusPendingTitle": "Ստուգումն ընթացքի մեջ է", "sendEmailLinkBtn": "Ուղարկել հղումը", @@ -94,6 +96,9 @@ "or": "կամ", "oneTimeApplicationFee": "Քարտի թողարկման միանվագ վճար", "applicationFeeNote": "Նշում. վճարովի քարտի թողարկումը հասանելի կլինի ավելի ուշ:", - "statusRejectReasonMultiple": "Ձեր դիմումը մերժվել է մի քանի պատճառներով." + "statusRejectReasonMultiple": "Ձեր դիմումը մերժվել է մի քանի պատճառներով.", + "selectCountryText": "Ընտրեք ձեր երկիրը", + "filterCountries": "Բնորոշել ըստ երկիրի կամ զանգացման կոդի", + "ibanPendingDesc": "Ձեր IBAN-ի թողարկումը սպասվում է:\n 72 ժամից ավելի սպասելու դեպքում կապվեք մեզ հետ {email} ի միջոցով" } } \ No newline at end of file diff --git a/src/lang/card/id.json b/src/lang/card/id.json index 6cc43a4cb..1b5d208ea 100644 --- a/src/lang/card/id.json +++ b/src/lang/card/id.json @@ -21,9 +21,11 @@ }, "okReadyText": "Baik saya siap", "emailPlaceholder": "Surel", + "noSpamText": "Tidak ada email spam! Hanya untuk mengamankan akun Anda", "sendCodeBtn": "Kirim kode SMS", "firstNamePlaceholder": "Nama depan", "lastNamePlaceholder": "nama keluarga", + "verificationCodeText": "Anda akan menerima kode verifikasi melalui SMS", "phonePlaceholder": "Nomor telepon", "statusPendingTitle": "Verifikasi sedang berlangsung", "sendEmailLinkBtn": "Kirim tautan", @@ -94,6 +96,9 @@ "or": "atau", "oneTimeApplicationFee": "Biaya satu kali untuk menerbitkan kartu", "applicationFeeNote": "Catatan: Penerbitan kartu berbayar akan tersedia pada tahap selanjutnya.", - "statusRejectReasonMultiple": "Permohonan Anda telah ditolak karena beberapa alasan:" + "statusRejectReasonMultiple": "Permohonan Anda telah ditolak karena beberapa alasan:", + "selectCountryText": "Pilih negaramu", + "filterCountries": "Filter berdasarkan Negara atau Kode Panggilan", + "ibanPendingDesc": "Penerbitan IBAN Anda tertunda.\n Jika menunggu lebih dari 72 jam, hubungi kami melalui {email}" } } \ No newline at end of file diff --git a/src/lang/card/it.json b/src/lang/card/it.json index 2599481c0..2a4d978ef 100644 --- a/src/lang/card/it.json +++ b/src/lang/card/it.json @@ -21,9 +21,11 @@ }, "okReadyText": "Ok sono pronto", "emailPlaceholder": "E-mail", + "noSpamText": "Niente spam! Solo per proteggere il tuo account", "sendCodeBtn": "Invia codice SMS", "firstNamePlaceholder": "Nome di battesimo", "lastNamePlaceholder": "Cognome", + "verificationCodeText": "Riceverai un codice di verifica via SMS", "phonePlaceholder": "Numero di telefono", "statusPendingTitle": "Verifica in corso", "sendEmailLinkBtn": "Invia il link", @@ -94,6 +96,9 @@ "or": "O", "oneTimeApplicationFee": "Tariffa una tantum per l'emissione di una carta", "applicationFeeNote": "Nota: l'emissione delle carte a pagamento sarà disponibile in una fase successiva.", - "statusRejectReasonMultiple": "La tua richiesta è stata respinta per molteplici motivi:" + "statusRejectReasonMultiple": "La tua richiesta è stata respinta per molteplici motivi:", + "selectCountryText": "Seleziona il tuo paese", + "filterCountries": "Filtra per Paese o Codice di chiamata", + "ibanPendingDesc": "L'emissione del tuo IBAN è in sospeso.\n Nel caso in cui l'attesa superi le 72 ore contattaci tramite {email}" } } \ No newline at end of file diff --git a/src/lang/card/nl.json b/src/lang/card/nl.json index 49254376f..5cfc58786 100644 --- a/src/lang/card/nl.json +++ b/src/lang/card/nl.json @@ -21,9 +21,11 @@ }, "okReadyText": "OK, ik ben klaar", "emailPlaceholder": "E-mail", + "noSpamText": "Geen spam! Alleen om uw account te beveiligen", "sendCodeBtn": "SMS code verzenden", "firstNamePlaceholder": "Voornaam", "lastNamePlaceholder": "Achternaam", + "verificationCodeText": "U ontvangt een verificatiecode via SMS.", "phonePlaceholder": "Telefoonnummer", "statusPendingTitle": "Verificatie is gaande", "sendEmailLinkBtn": "Link nogmaals versturen", @@ -94,6 +96,9 @@ "or": "of", "oneTimeApplicationFee": "Eenmalige kosten voor het uitgeven van een kaart", "applicationFeeNote": "Let op: de uitgifte van betaalde kaarten zal in een later stadium beschikbaar zijn.", - "statusRejectReasonMultiple": "Uw aanvraag is om meerdere redenen afgewezen:" + "statusRejectReasonMultiple": "Uw aanvraag is om meerdere redenen afgewezen:", + "selectCountryText": "Kies je land", + "filterCountries": "Filteren op land of netnummer", + "ibanPendingDesc": "Uw IBAN-uitgifte is in behandeling.\n Neem contact met ons op via {email} als de wachttijd langer dan 72 uur is" } } \ No newline at end of file diff --git a/src/lang/card/no.json b/src/lang/card/no.json index e95281de3..88bd88f84 100644 --- a/src/lang/card/no.json +++ b/src/lang/card/no.json @@ -21,9 +21,11 @@ }, "okReadyText": "Ok jeg er klar", "emailPlaceholder": "E-post", + "noSpamText": "Ingen spam! Kun for å sikre kontoen din", "sendCodeBtn": "Send SMS-kode", "firstNamePlaceholder": "Fornavn", "lastNamePlaceholder": "Etternavn", + "verificationCodeText": "Du vil motta en bekreftelseskode via SMS", "phonePlaceholder": "Telefonnummer", "statusPendingTitle": "Verifisering pågår", "sendEmailLinkBtn": "Send lenke", @@ -94,6 +96,9 @@ "or": "eller", "oneTimeApplicationFee": "Engangsavgift for å utstede et kort", "applicationFeeNote": "Merk: utstedelse av betalingskort vil være tilgjengelig på et senere tidspunkt.", - "statusRejectReasonMultiple": "Søknaden din har blitt avvist av flere årsaker:" + "statusRejectReasonMultiple": "Søknaden din har blitt avvist av flere årsaker:", + "selectCountryText": "Velg ditt land", + "filterCountries": "Filtrer etter land eller kodenr.", + "ibanPendingDesc": "Din IBAN-utstedelse venter.\n Hvis ventetiden er lengre enn 72 timer, kontakt oss via {email}" } } \ No newline at end of file diff --git a/src/lang/card/pl.json b/src/lang/card/pl.json index d979e2a71..8adb430ae 100644 --- a/src/lang/card/pl.json +++ b/src/lang/card/pl.json @@ -21,9 +21,11 @@ }, "okReadyText": "Ok, jestem gotowy", "emailPlaceholder": "E-mail", + "noSpamText": "Bez spamu! Tylko w celu zabezpieczenia Twojego konta", "sendCodeBtn": "Wyślij kod SMS", "firstNamePlaceholder": "Imię", "lastNamePlaceholder": "Nazwisko", + "verificationCodeText": "Otrzymasz kod weryfikacyjny SMS-em", "phonePlaceholder": "Numer telefonu", "statusPendingTitle": "Trwa weryfikacja", "sendEmailLinkBtn": "Wyślij link", @@ -94,6 +96,9 @@ "or": "Lub", "oneTimeApplicationFee": "Opłata jednorazowa za wydanie karty", "applicationFeeNote": "Uwaga: wydawanie kart płatnych będzie możliwe w późniejszym terminie.", - "statusRejectReasonMultiple": "Twój wniosek został odrzucony z wielu powodów:" + "statusRejectReasonMultiple": "Twój wniosek został odrzucony z wielu powodów:", + "selectCountryText": "Wybierz swój kraj", + "filterCountries": "Filtruj według kraju lub kodu kierunkowego", + "ibanPendingDesc": "Wydanie Twojego numeru IBAN oczekuje na realizację.\n W przypadku, gdy czas oczekiwania będzie dłuższy niż 72 godziny, skontaktuj się z nami za pośrednictwem {email}" } } \ No newline at end of file diff --git a/src/lang/card/ru.json b/src/lang/card/ru.json index 95bbd54a3..da41b647e 100644 --- a/src/lang/card/ru.json +++ b/src/lang/card/ru.json @@ -17,13 +17,15 @@ "personalTitle": "Отправьте свою личную информацию", "personalDesc": "Заполните форму, указав свое имя и адрес", "proofAddressNote": "Примечание. Заявления таких необанков, как Revolut и N26, в настоящее время не считаются действительным подтверждением адреса.", - "paidAttemptDisclaimer": "У вас есть только {count} бесплатных попыток пройти процедуру KYC. Каждая следующая попытка после этого будет стоить €{cost}. Платные попытки станут доступны после следующего обновления приложения." + "paidAttemptDisclaimer": "У вас есть только {count} бесплатных попыток пройти процедуру KYC. Каждая следующая попытка после этого будет стоить € {cost} . Платные попытки станут доступны после следующего обновления приложения." }, "okReadyText": "Хорошо, я готов", "emailPlaceholder": "Электронная почта", + "noSpamText": "Никакого спама! Только для защиты вашего аккаунта", "sendCodeBtn": "Отправить SMS-код", "firstNamePlaceholder": "Имя", "lastNamePlaceholder": "Фамилия", + "verificationCodeText": "Вы получите код подтверждения по SMS", "phonePlaceholder": "Номер телефона", "statusPendingTitle": "Выполняется проверка", "sendEmailLinkBtn": "Отправить ссылку", @@ -94,6 +96,9 @@ "or": "или", "oneTimeApplicationFee": "Единоразовая плата за выпуск карты", "applicationFeeNote": "Примечание: выпуск платной карты будет доступен позднее.", - "statusRejectReasonMultiple": "Ваша заявка была отклонена по нескольким причинам:" + "statusRejectReasonMultiple": "Ваша заявка была отклонена по нескольким причинам:", + "selectCountryText": "Выберите свою страну", + "filterCountries": "Фильтр по стране или коду", + "ibanPendingDesc": "Выдача вашего IBAN ожидается.\nВ случае ожидания более 72 часов свяжитесь с нами по адресу {email}" } } \ No newline at end of file diff --git a/src/lang/card/sk.json b/src/lang/card/sk.json index 23a54b3c3..c475d5000 100644 --- a/src/lang/card/sk.json +++ b/src/lang/card/sk.json @@ -21,9 +21,11 @@ }, "okReadyText": "OK, som pripravený", "emailPlaceholder": "Email", + "noSpamText": "Žiadny spam! Iba na zabezpečenie vášho účtu", "sendCodeBtn": "Pošlite SMS kód", "firstNamePlaceholder": "Krstné meno", "lastNamePlaceholder": "Priezvisko", + "verificationCodeText": "Dostanete overovací kód prostredníctvom SMS", "phonePlaceholder": "Telefónne číslo", "statusPendingTitle": "Prebieha overovanie", "sendEmailLinkBtn": "Odoslať odkaz", @@ -94,6 +96,9 @@ "or": "alebo", "oneTimeApplicationFee": "Jednorazový poplatok za vydanie karty", "applicationFeeNote": "Poznámka: Vydanie platenej karty bude k dispozícii neskôr.", - "statusRejectReasonMultiple": "Vaša žiadosť bola zamietnutá z viacerých dôvodov:" + "statusRejectReasonMultiple": "Vaša žiadosť bola zamietnutá z viacerých dôvodov:", + "selectCountryText": "Vyber svoju krajinu", + "filterCountries": "Filtrovať podľa krajiny alebo kódového čísla", + "ibanPendingDesc": "Čaká sa na vydanie vášho čísla IBAN.\n V prípade čakania dlhšieho ako 72 hodín nás kontaktujte na {email}" } } \ No newline at end of file diff --git a/src/lang/card/sr.json b/src/lang/card/sr.json index 1951bf204..a3a9c9074 100644 --- a/src/lang/card/sr.json +++ b/src/lang/card/sr.json @@ -21,9 +21,11 @@ }, "okReadyText": "Ок ја сам спреман", "emailPlaceholder": "Емаил", + "noSpamText": "Нема нежељене поште! Само да бисте заштитили свој налог", "sendCodeBtn": "Пошаљите СМС код", "firstNamePlaceholder": "Име", "lastNamePlaceholder": "Презиме", + "verificationCodeText": "Добићете верификациони код путем СМС-а", "phonePlaceholder": "Број телефона", "statusPendingTitle": "Верификација је у току", "sendEmailLinkBtn": "Пошаљи линк", @@ -94,6 +96,9 @@ "or": "или", "oneTimeApplicationFee": "Једнократна накнада за издавање картице", "applicationFeeNote": "Напомена: издавање плаћене картице биће доступно касније.", - "statusRejectReasonMultiple": "Ваша пријава је одбијена из више разлога:" + "statusRejectReasonMultiple": "Ваша пријава је одбијена из више разлога:", + "selectCountryText": "Изаберите своју земљу", + "filterCountries": "Filtrirajte po zemlji ili pozivnom kodu", + "ibanPendingDesc": "Ваше ИБАН издавање је на чекању.\n У случају да чекате дуже од 72х контактирајте нас путем {email}" } } \ No newline at end of file diff --git a/src/lang/card/sv.json b/src/lang/card/sv.json index 944c1cc1a..3e856651a 100644 --- a/src/lang/card/sv.json +++ b/src/lang/card/sv.json @@ -21,9 +21,11 @@ }, "okReadyText": "OK jag är redo", "emailPlaceholder": "E-post", + "noSpamText": "Ingen spam! Endast för att säkra ditt konto", "sendCodeBtn": "Skicka SMS-kod", "firstNamePlaceholder": "Förnamn", "lastNamePlaceholder": "Efternamn", + "verificationCodeText": "Du kommer att få en verifieringskod via SMS", "phonePlaceholder": "Telefonnummer", "statusPendingTitle": "Verifiering pågår", "sendEmailLinkBtn": "Skicka länk", @@ -94,6 +96,9 @@ "or": "eller", "oneTimeApplicationFee": "Engångsavgift för att utfärda ett kort", "applicationFeeNote": "Obs! Utfärdande av betalkort kommer att vara tillgängligt i ett senare skede.", - "statusRejectReasonMultiple": "Din ansökan har avvisats av flera skäl:" + "statusRejectReasonMultiple": "Din ansökan har avvisats av flera skäl:", + "selectCountryText": "Välj ditt land", + "filterCountries": "Filtrera efter land eller riktnummer", + "ibanPendingDesc": "Ditt IBAN-utfärdande väntar.\n Om väntan är längre än 72 timmar kontakta oss via {email}" } } \ No newline at end of file diff --git a/src/lang/card/vi.json b/src/lang/card/vi.json index 7d0dcae29..641a5ef71 100644 --- a/src/lang/card/vi.json +++ b/src/lang/card/vi.json @@ -21,9 +21,11 @@ }, "okReadyText": "OK, tôi đã sẵn sàng", "emailPlaceholder": "Email", + "noSpamText": "Không có thư rác! Chỉ để bảo mật tài khoản của bạn", "sendCodeBtn": "Gửi mã SMS", "firstNamePlaceholder": "Họ", "lastNamePlaceholder": "Tên", + "verificationCodeText": "Bạn sẽ nhận được mã xác minh qua SMS", "phonePlaceholder": "Số điện thoại", "statusPendingTitle": "Đang xác minh", "sendEmailLinkBtn": "Gửi link", @@ -94,6 +96,9 @@ "or": "hoặc", "oneTimeApplicationFee": "Phí phát hành thẻ một lần", "applicationFeeNote": "Lưu ý: việc phát hành thẻ trả phí sẽ được thực hiện ở giai đoạn sau.", - "statusRejectReasonMultiple": "Đơn đăng ký của bạn đã bị từ chối vì nhiều lý do:" + "statusRejectReasonMultiple": "Đơn đăng ký của bạn đã bị từ chối vì nhiều lý do:", + "selectCountryText": "Chọn đất nước của bạn", + "filterCountries": "Lọc theo Quốc gia hoặc Mã quay số", + "ibanPendingDesc": "Việc cấp IBAN của bạn đang chờ xử lý.\n Trong trường hợp chờ đợi lâu hơn 72h, hãy liên hệ với chúng tôi qua {email}" } } \ No newline at end of file diff --git a/src/lang/card/yo.json b/src/lang/card/yo.json index 810403ef6..24c9166a7 100644 --- a/src/lang/card/yo.json +++ b/src/lang/card/yo.json @@ -21,9 +21,11 @@ }, "okReadyText": "O DARA, Mo setan", "emailPlaceholder": "Imeeli", + "noSpamText": "Ko si àwúrúju! Nikan lati ni aabo akọọlẹ rẹ", "sendCodeBtn": "Fi koodu SMS ranṣẹ", "firstNamePlaceholder": "Orukọ akọkọ", "lastNamePlaceholder": "Oruko idile", + "verificationCodeText": "Iwọ yoo gba koodu idaniloju nipasẹ SMS", "phonePlaceholder": "Nomba fonu", "statusPendingTitle": "Ijerisi ni ilọsiwaju", "sendEmailLinkBtn": "Fi ọna asopọ ranṣẹ", @@ -94,6 +96,9 @@ "or": "tabi", "oneTimeApplicationFee": "Owo-akoko kan lati fun kaadi kan", "applicationFeeNote": "Akiyesi: ipinfunni kaadi sisan yoo wa ni ipele nigbamii.", - "statusRejectReasonMultiple": "Ohun elo rẹ ti kọ fun awọn idi pupọ:" + "statusRejectReasonMultiple": "Ohun elo rẹ ti kọ fun awọn idi pupọ:", + "selectCountryText": "Yan orilẹ-ede rẹ", + "filterCountries": "Sàngan lori orilẹ́-èdè tabi koodu orọ", + "ibanPendingDesc": "Ipinfunni IBAN rẹ ti wa ni isunmọtosi.\n Ti idaduro to gun ju wakati 72 lọ kan si wa nipasẹ {email}" } } \ No newline at end of file diff --git a/src/lang/card/zh_CN.json b/src/lang/card/zh_CN.json index d00f93a2a..1c8854eef 100644 --- a/src/lang/card/zh_CN.json +++ b/src/lang/card/zh_CN.json @@ -21,9 +21,11 @@ }, "okReadyText": "好的,我准备好了", "emailPlaceholder": "电子邮件", + "noSpamText": "不要垃圾邮件!只是为了保护您的账户", "sendCodeBtn": "发送短信代码", "firstNamePlaceholder": "名", "lastNamePlaceholder": "姓", + "verificationCodeText": "您将通过短信收到验证码", "phonePlaceholder": "电话号码", "statusPendingTitle": "正在进行验证", "sendEmailLinkBtn": "发送链接", @@ -94,6 +96,9 @@ "or": "或者", "oneTimeApplicationFee": "一次性发卡费用", "applicationFeeNote": "注:付费卡发行将在稍后阶段提供。", - "statusRejectReasonMultiple": "您的申请因多种原因被拒绝:" + "statusRejectReasonMultiple": "您的申请因多种原因被拒绝:", + "selectCountryText": "选择您所在的国家\/地区", + "filterCountries": "按国家或拨号码筛选", + "ibanPendingDesc": "您的 IBAN 正在等待签发。\n如果等待时间超过 72 小时,请通过{email}联系我们" } } \ No newline at end of file diff --git a/src/lang/cs.json b/src/lang/cs.json index e77b4ea7a..450bca43f 100644 --- a/src/lang/cs.json +++ b/src/lang/cs.json @@ -305,7 +305,8 @@ "viewIn": "Zobrazit v {explorer}", "referrer": "Doporučitel", "referral": "Doporučení", - "adarTxDetailsTitle": "Podrobnosti transakce" + "adarTxDetailsTitle": "Podrobnosti transakce", + "comment": "Komentář" }, "appName": "{AppName}", "changeNetworkText": "Změnit síť v {Metamask}", diff --git a/src/lang/de.json b/src/lang/de.json index 7350f6aab..fc5740802 100644 --- a/src/lang/de.json +++ b/src/lang/de.json @@ -305,7 +305,8 @@ "viewIn": "Auf {explorer} ansehen", "referrer": "Referrer", "referral": "Referral", - "adarTxDetailsTitle": "Transaktionsdetails" + "adarTxDetailsTitle": "Transaktionsdetails", + "comment": "Kommentar" }, "appName": "{AppName}", "changeNetworkText": "Netzwerk in {Metamask} ändern", diff --git a/src/lang/en.json b/src/lang/en.json index c4b6da451..364da3907 100644 --- a/src/lang/en.json +++ b/src/lang/en.json @@ -305,7 +305,8 @@ "viewIn": "View in {explorer}", "referrer": "Referrer", "referral": "Referral", - "adarTxDetailsTitle": "Transaction details" + "adarTxDetailsTitle": "Transaction details", + "comment": "Comment" }, "appName": "{AppName}", "changeNetworkText": "Change network in {Metamask}", diff --git a/src/lang/es.json b/src/lang/es.json index 886467af2..42af145f3 100644 --- a/src/lang/es.json +++ b/src/lang/es.json @@ -305,7 +305,8 @@ "viewIn": "Ver en {explorer}", "referrer": "Referente", "referral": "Referencia", - "adarTxDetailsTitle": "Detalles de la transacción" + "adarTxDetailsTitle": "Detalles de la transacción", + "comment": "Comentario" }, "appName": "{AppName}", "changeNetworkText": "Cambiar de red en {Metamask}", diff --git a/src/lang/fr.json b/src/lang/fr.json index 346c2b455..0472d6ed1 100644 --- a/src/lang/fr.json +++ b/src/lang/fr.json @@ -305,7 +305,8 @@ "viewIn": "Visualisez dans {explorer}", "referrer": "Référent", "referral": "Référence", - "adarTxDetailsTitle": "Détails de la transaction" + "adarTxDetailsTitle": "Détails de la transaction", + "comment": "Commentaire" }, "appName": "{AppName}", "changeNetworkText": "Changer de réseau dans {Metamask}", diff --git a/src/lang/hr.json b/src/lang/hr.json index bdb6bb90f..ccaf4d0ae 100644 --- a/src/lang/hr.json +++ b/src/lang/hr.json @@ -305,7 +305,8 @@ "viewIn": "Pogledajte u {explorer}", "referrer": "Preporučitelj", "referral": "Preporuka", - "adarTxDetailsTitle": "Detalji transakcije" + "adarTxDetailsTitle": "Detalji transakcije", + "comment": "Komentar" }, "appName": "{AppName}", "changeNetworkText": "Promijenite mrežu u {Metamask}", diff --git a/src/lang/hu.json b/src/lang/hu.json index 647910098..4ba84a68a 100644 --- a/src/lang/hu.json +++ b/src/lang/hu.json @@ -305,7 +305,8 @@ "viewIn": "Megtekintés {explorer}-ben", "referrer": "Ajánló", "referral": "Ajánlás", - "adarTxDetailsTitle": "Tranzakció részlete" + "adarTxDetailsTitle": "Tranzakció részlete", + "comment": "Megjegyzés" }, "appName": "{AppName}", "changeNetworkText": "Hálózatváltás a {Metamask}", diff --git a/src/lang/hy.json b/src/lang/hy.json index 6a27ddd79..3140e5254 100644 --- a/src/lang/hy.json +++ b/src/lang/hy.json @@ -305,7 +305,8 @@ "viewIn": "Դիտել {explorer}- ում", "referrer": "Ուղղորդող", "referral": "Ուղղորդում", - "adarTxDetailsTitle": "գործարքի մանրամասներ" + "adarTxDetailsTitle": "գործարքի մանրամասներ", + "comment": "Մեկնաբանություն" }, "appName": "{AppName} (Փոլքասվափ)", "changeNetworkText": "Փոխել ցանցը {Metamask}- ում", diff --git a/src/lang/id.json b/src/lang/id.json index e2ede92de..82a8e7ca8 100644 --- a/src/lang/id.json +++ b/src/lang/id.json @@ -305,7 +305,8 @@ "viewIn": "Lihat di {explorer}", "referrer": "Perujuk", "referral": "Rujukan", - "adarTxDetailsTitle": "Rincian transaksi" + "adarTxDetailsTitle": "Rincian transaksi", + "comment": "Komentar" }, "appName": "{AppName}", "changeNetworkText": "Ubah jaringan di {Metamask}", diff --git a/src/lang/it.json b/src/lang/it.json index 21f3957e6..b653988c6 100644 --- a/src/lang/it.json +++ b/src/lang/it.json @@ -305,7 +305,8 @@ "viewIn": "Visualizza in {explorer}", "referrer": "Referente", "referral": "Referral", - "adarTxDetailsTitle": "Dettagli della transazione" + "adarTxDetailsTitle": "Dettagli della transazione", + "comment": "Commento" }, "appName": "{AppName}", "changeNetworkText": "Cambia rete in {Metamask}", diff --git a/src/lang/nl.json b/src/lang/nl.json index 6157194ff..4cfeaae21 100644 --- a/src/lang/nl.json +++ b/src/lang/nl.json @@ -305,7 +305,8 @@ "viewIn": "Bekijk in {explorer}", "referrer": "Verwijzer", "referral": "Verwijzing", - "adarTxDetailsTitle": "Transactiegegevens" + "adarTxDetailsTitle": "Transactiegegevens", + "comment": "Opmerking" }, "appName": "{AppName}", "changeNetworkText": "Netwerk wijzigen in {Metamask}", diff --git a/src/lang/no.json b/src/lang/no.json index 02490fda2..8866d678f 100644 --- a/src/lang/no.json +++ b/src/lang/no.json @@ -305,7 +305,8 @@ "viewIn": "Vis i {explorer}", "referrer": "Henviser", "referral": "Henvisning", - "adarTxDetailsTitle": "Transaksjonsdetaljer" + "adarTxDetailsTitle": "Transaksjonsdetaljer", + "comment": "Kommentar" }, "appName": "{AppName}", "changeNetworkText": "Bytt nettverk i {Metamask}", diff --git a/src/lang/pl.json b/src/lang/pl.json index 80cc739f9..95dc0e123 100644 --- a/src/lang/pl.json +++ b/src/lang/pl.json @@ -305,7 +305,8 @@ "viewIn": "Pokaż w {explorer}", "referrer": "Osoba polecająca", "referral": "Kod polecający", - "adarTxDetailsTitle": "Szczegóły transakcji" + "adarTxDetailsTitle": "Szczegóły transakcji", + "comment": "Komentarz" }, "appName": "{AppName}", "changeNetworkText": "Zmień sieć w portfelu {Metamask}", diff --git a/src/lang/ru.json b/src/lang/ru.json index a7a43c2fa..f03dd8f08 100644 --- a/src/lang/ru.json +++ b/src/lang/ru.json @@ -305,7 +305,8 @@ "viewIn": "Смотреть в {explorer}", "referrer": "Реферер", "referral": "Реферал", - "adarTxDetailsTitle": "Детали транзакции" + "adarTxDetailsTitle": "Детали транзакции", + "comment": "Комментарий" }, "appName": "{AppName}", "changeNetworkText": "Сменить сеть в {Metamask}", diff --git a/src/lang/sk.json b/src/lang/sk.json index ac8feeb50..a54d8ac3b 100644 --- a/src/lang/sk.json +++ b/src/lang/sk.json @@ -305,7 +305,8 @@ "viewIn": "Zobraziť v {explorer}", "referrer": "Sprostredkovateľ", "referral": "Doporučenie", - "adarTxDetailsTitle": "Detaily transakcie" + "adarTxDetailsTitle": "Detaily transakcie", + "comment": "Komentujte" }, "appName": "{AppName}", "changeNetworkText": "Zmeňiť sieť v {Metamask}", diff --git a/src/lang/sr.json b/src/lang/sr.json index b4283aecf..e795dff8b 100644 --- a/src/lang/sr.json +++ b/src/lang/sr.json @@ -305,7 +305,8 @@ "viewIn": "Прикажите у {explorer}", "referrer": "Предложилтељ", "referral": "Препорука", - "adarTxDetailsTitle": "Detalji transakcije" + "adarTxDetailsTitle": "Detalji transakcije", + "comment": "Коментар" }, "appName": "{AppName}", "changeNetworkText": "Промените мрежу у {Metamask}", diff --git a/src/lang/sv.json b/src/lang/sv.json index a14036cc8..fe8411c4c 100644 --- a/src/lang/sv.json +++ b/src/lang/sv.json @@ -305,7 +305,8 @@ "viewIn": "Visa i {explorer}", "referrer": "Referrer", "referral": "Hänvisning", - "adarTxDetailsTitle": "Transaktionsdetaljer" + "adarTxDetailsTitle": "Transaktionsdetaljer", + "comment": "Kommentar" }, "appName": "{AppName}", "changeNetworkText": "Ändra nätverk i {Metamask}", diff --git a/src/lang/vi.json b/src/lang/vi.json index 49bebb4d7..eb632e0f6 100644 --- a/src/lang/vi.json +++ b/src/lang/vi.json @@ -305,7 +305,8 @@ "viewIn": "Xem trong {explorer}", "referrer": "Người giới thiệu", "referral": "Giới thiệu", - "adarTxDetailsTitle": "Chi tiết giao dịch" + "adarTxDetailsTitle": "Chi tiết giao dịch", + "comment": "Bình luận" }, "appName": "{AppName}", "changeNetworkText": "Thay đổi mạng trong {Metamask}", diff --git a/src/lang/yo.json b/src/lang/yo.json index 900134860..13d378bd6 100644 --- a/src/lang/yo.json +++ b/src/lang/yo.json @@ -305,7 +305,8 @@ "viewIn": "Wo ni {explorer}", "referrer": "Atọkasi", "referral": "Ifiranṣẹ", - "adarTxDetailsTitle": "Àwọn àwọn èrò akójọ awoṣe" + "adarTxDetailsTitle": "Àwọn àwọn èrò akójọ awoṣe", + "comment": "Ọrọìwòye" }, "appName": "{AppName}", "changeNetworkText": "Yi nẹtiwọọki pada ni {Metamask}", diff --git a/src/lang/zh_CN.json b/src/lang/zh_CN.json index 07951385f..cb251fc6e 100644 --- a/src/lang/zh_CN.json +++ b/src/lang/zh_CN.json @@ -305,7 +305,8 @@ "viewIn": "在{explorer}中查看", "referrer": "推荐人", "referral": "推荐", - "adarTxDetailsTitle": "交易详情" + "adarTxDetailsTitle": "交易详情", + "comment": "评论" }, "appName": "{AppName}", "changeNetworkText": "在 {Metamask} 中更改网络", diff --git a/src/types/card.ts b/src/types/card.ts index 298bd0564..7f79a2b96 100644 --- a/src/types/card.ts +++ b/src/types/card.ts @@ -48,3 +48,17 @@ export interface AttemptCounter { freeAttemptsLeft: Nullable<string>; totalFreeAttempts: Nullable<string>; } + +export interface PhoneCode { + name: string; + // eslint-disable-next-line camelcase + dial_code: string; +} + +export type CountryInfo = { + name: string; + translatedName: string; + key: string; + flag: string; + dialCode: string; +}; diff --git a/src/utils/card.ts b/src/utils/card.ts index 5ed7b97ae..41a0a1d1b 100644 --- a/src/utils/card.ts +++ b/src/utils/card.ts @@ -4,7 +4,7 @@ import jwtDecode, { JwtPayload } from 'jwt-decode'; import store from '@/store'; import { waitForSoraNetworkFromEnv } from '@/utils'; -import { AttemptCounter, Fees, KycStatus, Status, UserInfo, VerificationStatus } from '../types/card'; +import { AttemptCounter, Fees, KycStatus, PhoneCode, Status, UserInfo, VerificationStatus } from '../types/card'; const soraCardTestBaseEndpoint = 'https://backend.dev.sora-card.tachi.soramitsu.co.jp'; const soraCardProdBaseEndpoint = 'https://backend.sora-card.odachi.soramitsu.co.jp'; @@ -16,6 +16,7 @@ const SoraProxyEndpoints = { priceOracleEndpoint: `${soraCardTestBaseEndpoint}/prices/xor_euro`, ibanEndpoint: `${soraCardTestBaseEndpoint}/ibans`, fees: `${soraCardTestBaseEndpoint}/fees`, + countries: `${soraCardTestBaseEndpoint}/country-codes`, x1TransactionStatus: `${soraCardTestBaseEndpoint}/ws/x1-payment-status`, newAccessTokenEndpoint: 'https://api-auth-test.soracard.com/RequestNewAccessToken', }, @@ -26,6 +27,7 @@ const SoraProxyEndpoints = { priceOracleEndpoint: `${soraCardProdBaseEndpoint}/prices/xor_euro`, ibanEndpoint: `${soraCardProdBaseEndpoint}/ibans`, fees: `${soraCardProdBaseEndpoint}/fees`, + countries: `${soraCardProdBaseEndpoint}/country-codes`, x1TransactionStatus: `${soraCardProdBaseEndpoint}/ws/x1-payment-status`, newAccessTokenEndpoint: 'https://api-auth.soracard.com/RequestNewAccessToken', }, @@ -219,6 +221,18 @@ export const getFees = async (): Promise<Fees> => { } }; +export const getPhoneCodes = async (): Promise<Record<string, PhoneCode>> => { + const soraNetwork = store.state.wallet.settings.soraNetwork ?? (await waitForSoraNetworkFromEnv()); + + try { + const data = await fetch(getSoraProxyEndpoints(soraNetwork).countries); + return await data.json(); + } catch (error) { + console.error(error); + return {}; + } +}; + export const getUserIbanInfo = async (): Promise<UserInfo> => { const sessionRefreshToken = localStorage.getItem('PW-refresh-token'); let sessionAccessToken = localStorage.getItem('PW-token'); diff --git a/src/views/SoraCard.vue b/src/views/SoraCard.vue index 63db736bc..926db681f 100644 --- a/src/views/SoraCard.vue +++ b/src/views/SoraCard.vue @@ -124,13 +124,8 @@ export default class SoraCard extends Mixins(mixins.LoadingMixin, SubscriptionsM if (this.currentStatus === VerificationStatus.Accepted) { await this.getUserIban(); - if (this.userInfo.iban) { - this.step = Step.Dashboard; - return; - } else { - this.step = Step.ConfirmationInfo; - return; - } + this.step = Step.Dashboard; + return; } if ([VerificationStatus.Pending, VerificationStatus.Rejected].includes(this.currentStatus)) { diff --git a/yarn.lock b/yarn.lock index 04fadbb5f..fd43e4be1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2357,10 +2357,10 @@ vue-property-decorator "^9.1.2" vuex "^3.6.2" -"@soramitsu/soraneo-wallet-web@1.23.3": - version "1.23.3" - resolved "https://nexus.iroha.tech/repository/npm-group/@soramitsu/soraneo-wallet-web/-/soraneo-wallet-web-1.23.3.tgz#5236a91badaa266ed42416ed568fc4981c94cd2a" - integrity sha512-TkfqRlbwT2XvzKASTL6RCXTl/OfV3OI0/sB76/5E+AroBM8flxHjtJsHs0aLAu5Hc8OF8l80R/1M92qOn10Geg== +"@soramitsu/soraneo-wallet-web@1.23.4": + version "1.23.4" + resolved "https://nexus.iroha.tech/repository/npm-group/@soramitsu/soraneo-wallet-web/-/soraneo-wallet-web-1.23.4.tgz#352dd2751fc685ad36eaeae691c7dc3565356f1a" + integrity sha512-7PnMBkbvL4N7hiKOUA/e5OmN5qibIqMkXXKI90ZBS2kBDNA7ZandUWr2XdOeFPBrfiw9A5S7fsU1JsON+/BY6g== dependencies: "@polkadot/vue-identicon" "2.12.1" "@sora-substrate/util" "1.23.9"