From 08ed2814c9a5d0bd62154de30d7b316cb3332b2b Mon Sep 17 00:00:00 2001 From: NguyenAnhQuan Date: Fri, 31 Oct 2025 01:22:35 +0700 Subject: [PATCH] refactor: 3311025/recoding_create_wallet_flow --- .gitignore | 2 + electron/ipcHandlers.ts | 24 ++ electron/main.ts | 7 +- electron/preload.ts | 8 + package-lock.json | 107 ++++++ package.json | 1 + src/api/config/index.ts | 14 - src/api/neptuneApi.ts | 16 - src/composables/useNeptuneWallet.ts | 59 ---- src/interface/neptune.ts | 1 + src/router/route.ts | 15 +- src/stores/authStore.ts | 54 +-- src/stores/neptuneStore.ts | 11 + src/utils/helpers/seedPhrase.ts | 2 +- src/views/Auth/AuthView.vue | 42 +-- src/views/Auth/components/CreateTab.vue | 14 +- .../Auth/components/CreateWalletComponent.vue | 176 ---------- .../Auth/components/ImportWalletComponent.vue | 135 ------- .../components/KeystoreDownloadComponent.vue | 241 ------------- src/views/Auth/components/KeystoreTab.vue | 69 ---- src/views/Auth/components/LoginTab.vue | 13 +- ...oardingComponent.vue => OnboardingTab.vue} | 12 +- .../components/PasswordKeystoreComponent.vue | 328 ------------------ src/views/Auth/components/RecoverSeedTab.vue | 25 ++ src/views/Auth/components/RecoveryTab.vue | 28 -- ...ent.vue => SeedPhraseDisplayComponent.vue} | 0 .../{ => create}/ConfirmSeedComponent.vue | 52 +-- .../{steps => create}/CreatePasswordStep.vue | 5 + .../create/CreateWalletComponent.vue | 103 ++++++ .../{steps => create}/WalletCreatedStep.vue | 10 +- src/views/Auth/components/create/index.ts | 4 + src/views/Auth/components/index.ts | 17 +- .../RecoverSeedComponent.vue} | 46 +-- .../recover/RecoverWalletComponent.vue | 76 ++++ src/views/Auth/components/recover/index.ts | 2 + .../steps/ChooseBackupMethodStep.vue | 46 --- src/views/Auth/components/steps/index.ts | 3 - .../PasswordKeystore/PasswordKeystoreView.vue | 49 --- src/views/index.ts | 1 - 39 files changed, 470 insertions(+), 1348 deletions(-) create mode 100644 electron/ipcHandlers.ts delete mode 100644 src/views/Auth/components/CreateWalletComponent.vue delete mode 100644 src/views/Auth/components/ImportWalletComponent.vue delete mode 100644 src/views/Auth/components/KeystoreDownloadComponent.vue delete mode 100644 src/views/Auth/components/KeystoreTab.vue rename src/views/Auth/components/{OnboardingComponent.vue => OnboardingTab.vue} (89%) delete mode 100644 src/views/Auth/components/PasswordKeystoreComponent.vue create mode 100644 src/views/Auth/components/RecoverSeedTab.vue delete mode 100644 src/views/Auth/components/RecoveryTab.vue rename src/views/Auth/components/{RecoverySeedComponent.vue => SeedPhraseDisplayComponent.vue} (100%) rename src/views/Auth/components/{ => create}/ConfirmSeedComponent.vue (92%) rename src/views/Auth/components/{steps => create}/CreatePasswordStep.vue (98%) create mode 100644 src/views/Auth/components/create/CreateWalletComponent.vue rename src/views/Auth/components/{steps => create}/WalletCreatedStep.vue (87%) create mode 100644 src/views/Auth/components/create/index.ts rename src/views/Auth/components/{SeedPhraseTab.vue => recover/RecoverSeedComponent.vue} (85%) create mode 100644 src/views/Auth/components/recover/RecoverWalletComponent.vue create mode 100644 src/views/Auth/components/recover/index.ts delete mode 100644 src/views/Auth/components/steps/ChooseBackupMethodStep.vue delete mode 100644 src/views/Auth/components/steps/index.ts delete mode 100644 src/views/PasswordKeystore/PasswordKeystoreView.vue diff --git a/.gitignore b/.gitignore index 2acc823..8620aeb 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,8 @@ dist dist-ssr coverage *.local +.vite/build/* +wallets/* /cypress/videos/ /cypress/screenshots/ diff --git a/electron/ipcHandlers.ts b/electron/ipcHandlers.ts new file mode 100644 index 0000000..700c06d --- /dev/null +++ b/electron/ipcHandlers.ts @@ -0,0 +1,24 @@ +import { ipcMain } from 'electron'; +import type { HDNodeWallet } from 'ethers'; +import { Wallet } from 'ethers'; +import fs from 'fs'; +import path from 'path'; + +ipcMain.handle('wallet:createKeystore', async (_event, seed, password) => { + const wallet = Wallet.fromPhrase(seed); + const keystore = await wallet.encrypt(password); + + const savePath = path.join(process.cwd(), 'wallets'); + fs.mkdirSync(savePath, { recursive: true }); + + const filePath = path.join(savePath, `${wallet.address}.json`); + fs.writeFileSync(filePath, keystore); + + return { address: wallet.address, filePath }; +}); + +ipcMain.handle('wallet:decryptKeystore', async (_event, filePath, password) => { + const json = fs.readFileSync(filePath, 'utf-8'); + const wallet = await Wallet.fromEncryptedJson(json, password) as HDNodeWallet; + return { address: wallet.address, phrase: wallet.mnemonic }; +}); diff --git a/electron/main.ts b/electron/main.ts index 53c0d4c..e2a70fc 100644 --- a/electron/main.ts +++ b/electron/main.ts @@ -1,6 +1,7 @@ import { app, BrowserWindow } from 'electron' import path from 'node:path' import started from 'electron-squirrel-startup' +import './ipcHandlers' if (started) { app.quit() @@ -8,10 +9,12 @@ if (started) { const createWindow = () => { const mainWindow = new BrowserWindow({ - width: 800, - height: 600, + width: 1000, + height: 800, webPreferences: { preload: path.join(__dirname, 'preload.js'), + contextIsolation: true, + nodeIntegration: false, }, }) if (MAIN_WINDOW_VITE_DEV_SERVER_URL) { diff --git a/electron/preload.ts b/electron/preload.ts index 5e9d369..7c35ce6 100644 --- a/electron/preload.ts +++ b/electron/preload.ts @@ -1,2 +1,10 @@ // See the Electron documentation for details on how to use preload scripts: // https://www.electronjs.org/docs/latest/tutorial/process-model#preload-scripts +import { contextBridge, ipcRenderer } from 'electron' + +contextBridge.exposeInMainWorld('walletApi', { + createKeystore: (seed: string, password: string) => + ipcRenderer.invoke('wallet:createKeystore', seed, password), + decryptKeystore: (filePath: string, password: string) => + ipcRenderer.invoke('wallet:decryptKeystore', filePath, password), +}) diff --git a/package-lock.json b/package-lock.json index 90d89b8..3a5492c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16,6 +16,7 @@ "axios": "^1.6.8", "dayjs": "^1.11.10", "electron-squirrel-startup": "^1.0.1", + "ethers": "^6.15.0", "pinia": "^2.1.7", "vue": "^3.4.21", "vue-router": "^4.3.0", @@ -52,6 +53,12 @@ "vue-tsc": "^2.0.11" } }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "license": "MIT" + }, "node_modules/@ant-design/colors": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-6.0.0.tgz", @@ -2526,6 +2533,30 @@ "resolved": "packages/neptune-wasm", "link": true }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -4307,6 +4338,12 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "license": "MIT" + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -6697,6 +6734,49 @@ "node": ">=0.10.0" } }, + "node_modules/ethers": { + "version": "6.15.0", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.15.0.tgz", + "integrity": "sha512-Kf/3ZW54L4UT0pZtsY/rf+EkBU7Qi5nnhonjUb8yTXcxH3cdcWrV2cRyk0Xk/4jK6OoHhxxZHriyhje20If2hQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "22.7.5", + "aes-js": "4.0.0-beta.5", + "tslib": "2.7.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "22.7.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.7.5.tgz", + "integrity": "sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/ethers/node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, "node_modules/eventemitter3": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", @@ -11271,6 +11351,12 @@ "typescript": ">=4.2.0" } }, + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -12095,6 +12181,27 @@ "dev": true, "license": "ISC" }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, "node_modules/wsl-utils": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/wsl-utils/-/wsl-utils-0.1.0.tgz", diff --git a/package.json b/package.json index 82a52e0..7d3b17a 100644 --- a/package.json +++ b/package.json @@ -26,6 +26,7 @@ "axios": "^1.6.8", "dayjs": "^1.11.10", "electron-squirrel-startup": "^1.0.1", + "ethers": "^6.15.0", "pinia": "^2.1.7", "vue": "^3.4.21", "vue-router": "^4.3.0", diff --git a/src/api/config/index.ts b/src/api/config/index.ts index e160c41..7cf0169 100644 --- a/src/api/config/index.ts +++ b/src/api/config/index.ts @@ -8,22 +8,8 @@ const instance = axios.create({ headers: { 'Content-Type': 'application/json', }, - method: 'POST', }) -instance.interceptors.response.use( - function (response) { - // if (response?.status !== STATUS_CODE_SUCCESS) return Promise.reject(response?.data) - return response - }, - function (error) { - if (error?.response?.data) { - return Promise.reject(error?.response?.data) - } - return Promise.reject(error) - } -) - export const setLocaleApi = (locale: string) => { instance.defaults.headers.common['lang'] = locale } diff --git a/src/api/neptuneApi.ts b/src/api/neptuneApi.ts index 09fed87..40a751d 100644 --- a/src/api/neptuneApi.ts +++ b/src/api/neptuneApi.ts @@ -43,19 +43,3 @@ export const sendTransaction = async ( export const broadcastSignedTransaction = async (signedTxData: any): Promise => { return await callJsonRpc('wallet_broadcastSignedTransaction', signedTxData) } - -export const getTransaction = async (txHash: string): Promise => { - return await callJsonRpc('chain_transaction', [txHash]) -} - -export const getMempoolInfo = async (): Promise => { - return await callJsonRpc('chain_mempool', []) -} - -export const importKeystore = async (keystore: string, password: string): Promise => { - const params = { - keystore, - password, - } - return await callJsonRpc('wallet_importKeystore', params) -} diff --git a/src/composables/useNeptuneWallet.ts b/src/composables/useNeptuneWallet.ts index c409361..3ecd638 100644 --- a/src/composables/useNeptuneWallet.ts +++ b/src/composables/useNeptuneWallet.ts @@ -144,63 +144,6 @@ export function useNeptuneWallet() { return JSON.parse(resultJson) } - const importFromViewKey = async (viewKeyHex: string): Promise<{ receiver_identifier: string }> => { - try { - store.setLoading(true) - store.setError(null) - - const result = await decodeViewKey(viewKeyHex) - - store.setViewKey(viewKeyHex) - store.setReceiverId(result.receiver_identifier) - // Note: When importing from viewkey, we don't have the seed phrase - // and address needs to be derived from viewkey - - return result - } catch (err) { - const errorMsg = err instanceof Error ? err.message : 'Failed to import from view key' - store.setError(errorMsg) - throw err - } finally { - store.setLoading(false) - } - } - - const importFromKeystore = async (keystore: string, password: string): Promise => { - try { - store.setLoading(true) - store.setError(null) - - const response = await API.importKeystore(keystore, password) - const result = response.data?.result || response.data - - // Set wallet data from keystore import result - if (result.seed_phrase) { - store.setSeedPhrase(result.seed_phrase) - } - if (result.view_key) { - store.setViewKey(result.view_key) - } - if (result.address) { - store.setAddress(result.address) - } - if (result.receiver_identifier) { - store.setReceiverId(result.receiver_identifier) - } - if (result.network) { - store.setNetwork(result.network) - } - - return result - } catch (err) { - const errorMsg = err instanceof Error ? err.message : 'Failed to import from keystore' - store.setError(errorMsg) - throw err - } finally { - store.setLoading(false) - } - } - // ===== API METHODS ===== const getUtxos = async ( @@ -333,8 +276,6 @@ export function useNeptuneWallet() { initWasm: ensureWasmInitialized, generateWallet, importWallet, - importFromViewKey, - importFromKeystore, getViewKeyFromSeed, getAddressFromSeed, validateSeedPhrase, diff --git a/src/interface/neptune.ts b/src/interface/neptune.ts index 49268f8..9e9bfe9 100644 --- a/src/interface/neptune.ts +++ b/src/interface/neptune.ts @@ -1,5 +1,6 @@ export interface WalletState { seedPhrase: string[] | null + password: string | null receiverId: string | null viewKey: string | null address: string | null diff --git a/src/router/route.ts b/src/router/route.ts index ab68e34..f628f20 100644 --- a/src/router/route.ts +++ b/src/router/route.ts @@ -1,13 +1,17 @@ import * as Page from '@/views' import { useNeptuneStore } from '@/stores/neptuneStore' +import { useAuthStore } from '@/stores/authStore' export const ifAuthenticated = (to: any, from: any, next: any) => { const neptuneStore = useNeptuneStore() + const authStore = useAuthStore() + if (neptuneStore.getReceiverId) { next() return } - next('/login') + authStore.setState('login') + next('/auth') } export const routes: any = [ @@ -18,15 +22,10 @@ export const routes: any = [ beforeEnter: ifAuthenticated, }, { - path: '/login', - name: 'login', + path: '/auth', + name: 'auth', component: Page.Auth, }, - { - path: '/password', - name: 'password', - component: Page.PasswordKeystore, - }, { path: '/:pathMatch(.*)*', component: Page.NotFound, diff --git a/src/stores/authStore.ts b/src/stores/authStore.ts index d5d5ca5..fffe64f 100644 --- a/src/stores/authStore.ts +++ b/src/stores/authStore.ts @@ -13,52 +13,6 @@ export const useAuthStore = () => { currentState.value = state } - const nextStep = () => { - switch (currentState.value) { - case 'onboarding': - setState('login') - break - case 'login': - // Stay in login, user chooses create or open - break - case 'create': - setState('recovery') - break - case 'recovery': - setState('confirm') - break - case 'confirm': - setState('complete') - break - case 'complete': - // Flow complete - break - } - } - - const previousStep = () => { - switch (currentState.value) { - case 'onboarding': - // Can't go back from onboarding - break - case 'login': - setState('onboarding') - break - case 'create': - setState('login') - break - case 'recovery': - setState('create') - break - case 'confirm': - setState('recovery') - break - case 'complete': - setState('confirm') - break - } - } - const goToCreate = () => { setState('create') } @@ -67,19 +21,21 @@ export const useAuthStore = () => { setState('login') } + const goToRecover = () => { + setState('recovery') + } + const resetFlow = () => { setState('onboarding') - localStorage.removeItem('onboarding-completed') } return { currentState: currentState.value, getCurrentState, setState, - nextStep, - previousStep, goToCreate, goToLogin, + goToRecover, resetFlow, } } diff --git a/src/stores/neptuneStore.ts b/src/stores/neptuneStore.ts index ef8550c..6389f66 100644 --- a/src/stores/neptuneStore.ts +++ b/src/stores/neptuneStore.ts @@ -6,6 +6,7 @@ export const useNeptuneStore = defineStore('neptune', () => { // ===== STATE ===== const wallet = ref({ seedPhrase: null, + password: null, receiverId: null, viewKey: null, address: null, @@ -23,6 +24,10 @@ export const useNeptuneStore = defineStore('neptune', () => { wallet.value.seedPhrase = seedPhrase } + const setPassword = (password: string | null) => { + wallet.value.password = password + } + const setReceiverId = (receiverId: string | null) => { wallet.value.receiverId = receiverId } @@ -62,6 +67,7 @@ export const useNeptuneStore = defineStore('neptune', () => { const clearWallet = () => { wallet.value = { seedPhrase: null, + password: null, receiverId: null, viewKey: null, address: null, @@ -75,6 +81,8 @@ export const useNeptuneStore = defineStore('neptune', () => { // ===== GETTERS ===== const getWallet = computed(() => wallet.value) const getSeedPhrase = computed(() => wallet.value.seedPhrase) + const getSeedPhraseString = computed(() => wallet.value.seedPhrase?.join(' ') || '') + const getPassword = computed(() => wallet.value.password) const getReceiverId = computed(() => wallet.value.receiverId) const getViewKey = computed(() => wallet.value.viewKey) const getAddress = computed(() => wallet.value.address) @@ -88,6 +96,8 @@ export const useNeptuneStore = defineStore('neptune', () => { return { getWallet, getSeedPhrase, + getSeedPhraseString, + getPassword, getReceiverId, getViewKey, getAddress, @@ -99,6 +109,7 @@ export const useNeptuneStore = defineStore('neptune', () => { getError, setSeedPhrase, + setPassword, setReceiverId, setViewKey, setAddress, diff --git a/src/utils/helpers/seedPhrase.ts b/src/utils/helpers/seedPhrase.ts index 113ab8b..bb37119 100644 --- a/src/utils/helpers/seedPhrase.ts +++ b/src/utils/helpers/seedPhrase.ts @@ -1 +1 @@ -export const validateSeedPhrase18 = (words: string[]): boolean => words.length !== 18 +export const validateSeedPhrase18 = (words: string[]): boolean => words.length === 18 diff --git a/src/views/Auth/AuthView.vue b/src/views/Auth/AuthView.vue index ae517b1..8202384 100644 --- a/src/views/Auth/AuthView.vue +++ b/src/views/Auth/AuthView.vue @@ -1,8 +1,8 @@ diff --git a/src/views/Auth/components/CreateTab.vue b/src/views/Auth/components/CreateTab.vue index ffb3161..5f951b4 100644 --- a/src/views/Auth/components/CreateTab.vue +++ b/src/views/Auth/components/CreateTab.vue @@ -2,24 +2,18 @@ import { CreateWalletComponent } from '.' const emit = defineEmits<{ - goToLogin: [] - next: [] + goToRecover: [] }>() -const handleNavigateToOpenWallet = () => { - emit('goToLogin') -} - -const handleNavigateToRecoverySeed = () => { - emit('next') +const handleNavigateToRecoverWallet = () => { + emit('goToRecover') } diff --git a/src/views/Auth/components/CreateWalletComponent.vue b/src/views/Auth/components/CreateWalletComponent.vue deleted file mode 100644 index 31e1d03..0000000 --- a/src/views/Auth/components/CreateWalletComponent.vue +++ /dev/null @@ -1,176 +0,0 @@ - - - - diff --git a/src/views/Auth/components/ImportWalletComponent.vue b/src/views/Auth/components/ImportWalletComponent.vue deleted file mode 100644 index 6822b05..0000000 --- a/src/views/Auth/components/ImportWalletComponent.vue +++ /dev/null @@ -1,135 +0,0 @@ - - - diff --git a/src/views/Auth/components/KeystoreDownloadComponent.vue b/src/views/Auth/components/KeystoreDownloadComponent.vue deleted file mode 100644 index 51b85f2..0000000 --- a/src/views/Auth/components/KeystoreDownloadComponent.vue +++ /dev/null @@ -1,241 +0,0 @@ - - - diff --git a/src/views/Auth/components/KeystoreTab.vue b/src/views/Auth/components/KeystoreTab.vue deleted file mode 100644 index ba33029..0000000 --- a/src/views/Auth/components/KeystoreTab.vue +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - diff --git a/src/views/Auth/components/LoginTab.vue b/src/views/Auth/components/LoginTab.vue index c616595..2ca953a 100644 --- a/src/views/Auth/components/LoginTab.vue +++ b/src/views/Auth/components/LoginTab.vue @@ -1,19 +1,8 @@ diff --git a/src/views/Auth/components/RecoverSeedTab.vue b/src/views/Auth/components/RecoverSeedTab.vue new file mode 100644 index 0000000..a152d77 --- /dev/null +++ b/src/views/Auth/components/RecoverSeedTab.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/src/views/Auth/components/RecoveryTab.vue b/src/views/Auth/components/RecoveryTab.vue deleted file mode 100644 index c72b28b..0000000 --- a/src/views/Auth/components/RecoveryTab.vue +++ /dev/null @@ -1,28 +0,0 @@ - - - - - diff --git a/src/views/Auth/components/RecoverySeedComponent.vue b/src/views/Auth/components/SeedPhraseDisplayComponent.vue similarity index 100% rename from src/views/Auth/components/RecoverySeedComponent.vue rename to src/views/Auth/components/SeedPhraseDisplayComponent.vue diff --git a/src/views/Auth/components/ConfirmSeedComponent.vue b/src/views/Auth/components/create/ConfirmSeedComponent.vue similarity index 92% rename from src/views/Auth/components/ConfirmSeedComponent.vue rename to src/views/Auth/components/create/ConfirmSeedComponent.vue index a6af869..3119114 100644 --- a/src/views/Auth/components/ConfirmSeedComponent.vue +++ b/src/views/Auth/components/create/ConfirmSeedComponent.vue @@ -82,28 +82,29 @@ const handleAnswerSelect = (answer: string) => { } const handleNext = () => { - if (isCorrect.value) { - correctCount.value++ - askedPositions.value.add(quizData.value!.position) + emit('next') + // if (isCorrect.value) { + // correctCount.value++ + // askedPositions.value.add(quizData.value!.position) - if (correctCount.value >= totalQuestions) { - emit('next') - } else { - showResult.value = false - selectedAnswer.value = '' - const newQuiz = generateQuiz() - if (newQuiz) { - quizData.value = newQuiz - } - } - } else { - showResult.value = false - selectedAnswer.value = '' - const newQuiz = generateQuiz() - if (newQuiz) { - quizData.value = newQuiz - } - } + // if (correctCount.value >= totalQuestions) { + // emit('next') + // } else { + // showResult.value = false + // selectedAnswer.value = '' + // const newQuiz = generateQuiz() + // if (newQuiz) { + // quizData.value = newQuiz + // } + // } + // } else { + // showResult.value = false + // selectedAnswer.value = '' + // const newQuiz = generateQuiz() + // if (newQuiz) { + // quizData.value = newQuiz + // } + // } } const handleBack = () => { @@ -207,13 +208,20 @@ onMounted(() => { > NEXT QUESTION - CONTINUE + --> + + CONTINUE diff --git a/src/views/Auth/components/steps/CreatePasswordStep.vue b/src/views/Auth/components/create/CreatePasswordStep.vue similarity index 98% rename from src/views/Auth/components/steps/CreatePasswordStep.vue rename to src/views/Auth/components/create/CreatePasswordStep.vue index df77900..c7c633b 100644 --- a/src/views/Auth/components/steps/CreatePasswordStep.vue +++ b/src/views/Auth/components/create/CreatePasswordStep.vue @@ -1,12 +1,15 @@ + + + diff --git a/src/views/Auth/components/steps/WalletCreatedStep.vue b/src/views/Auth/components/create/WalletCreatedStep.vue similarity index 87% rename from src/views/Auth/components/steps/WalletCreatedStep.vue rename to src/views/Auth/components/create/WalletCreatedStep.vue index c91d935..7aa86b1 100644 --- a/src/views/Auth/components/steps/WalletCreatedStep.vue +++ b/src/views/Auth/components/create/WalletCreatedStep.vue @@ -1,12 +1,20 @@