From 46d85e92cd8fcd028b16816cff8b32039b16a7d4 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Sat, 10 Jun 2023 23:13:31 +0800 Subject: [PATCH] use pinia to replace vuex, code refactor --- package-lock.json | 65 +- package.json | 4 +- src/MobileApp.vue | 15 +- .../mobile/DateRangeSelectionSheet.vue | 74 +- .../mobile/DateTimeSelectionSheet.vue | 31 +- src/components/mobile/InformationSheet.vue | 6 +- src/components/mobile/ItemIcon.vue | 26 +- src/components/mobile/NumberPadSheet.vue | 35 +- src/components/mobile/PieChart.vue | 18 +- .../mobile/TransactionTagSelectionSheet.vue | 11 +- .../mobile/TreeViewSelectionSheet.vue | 4 +- .../TwoColumnListItemSelectionSheet.vue | 6 +- src/consts/account.js | 10 + src/directives/mobile/textareaAutoSize.js | 2 +- src/lib/{utilities => }/account.js | 2 +- src/lib/{utilities => }/category.js | 4 +- src/lib/{utilities => }/common.js | 14 +- src/lib/{utilities => }/currency.js | 2 +- src/lib/{utilities => }/datetime.js | 4 +- src/lib/i18n.js | 51 +- src/lib/{utilities => }/misc.js | 0 src/lib/services.js | 6 +- src/lib/settings.js | 4 +- src/lib/{mobile/ui.js => ui.mobile.js} | 4 +- src/lib/userstate.js | 6 +- src/lib/utilities/index.js | 179 --- src/lib/webauthn.js | 30 +- src/mobile-main.js | 155 +-- src/router/mobile.js | 52 +- src/store/account.js | 363 ------ src/store/exchangeRates.js | 107 -- src/store/index.js | 1033 ----------------- src/store/mutations.js | 48 - src/store/overview.js | 104 -- src/store/setting.js | 10 - src/store/statistics.js | 268 ----- src/store/token.js | 111 -- src/store/transaction.js | 374 ------ src/store/transactionCategory.js | 355 ------ src/store/transactionTag.js | 247 ---- src/store/twoFactorAuth.js | 140 --- src/store/user.js | 438 ------- src/stores/account.js | 797 +++++++++++++ src/stores/exchangeRates.js | 132 +++ src/stores/index.js | 350 ++++++ src/stores/overview.js | 119 ++ src/stores/setting.js | 24 + src/stores/statistics.js | 423 +++++++ src/stores/token.js | 115 ++ src/stores/transaction.js | 618 ++++++++++ src/stores/transactionCategory.js | 483 ++++++++ src/stores/transactionTag.js | 311 +++++ src/stores/twoFactorAuth.js | 142 +++ src/stores/user.js | 140 +++ src/views/mobile/AboutPage.vue | 12 +- src/views/mobile/ApplicationLockPage.vue | 19 +- src/views/mobile/ExchangeRatesPage.vue | 60 +- src/views/mobile/HomePage.vue | 79 +- src/views/mobile/LoginPage.vue | 17 +- src/views/mobile/SettingsPage.vue | 27 +- src/views/mobile/SignupPage.vue | 46 +- src/views/mobile/UnlockPage.vue | 40 +- src/views/mobile/accounts/EditPage.vue | 116 +- src/views/mobile/accounts/ListPage.vue | 317 +---- src/views/mobile/categories/AllPage.vue | 10 +- src/views/mobile/categories/EditPage.vue | 26 +- src/views/mobile/categories/ListPage.vue | 43 +- src/views/mobile/categories/PresetPage.vue | 37 +- .../statistics/AccountFilterSettingsPage.vue | 60 +- .../statistics/CategoryFilterSettingsPage.vue | 48 +- src/views/mobile/statistics/SettingsPage.vue | 22 +- .../mobile/statistics/TransactionPage.vue | 137 ++- src/views/mobile/tags/ListPage.vue | 25 +- src/views/mobile/transactions/EditPage.vue | 285 +++-- src/views/mobile/transactions/ListPage.vue | 191 +-- src/views/mobile/users/DataManagementPage.vue | 39 +- src/views/mobile/users/SessionListPage.vue | 38 +- src/views/mobile/users/TwoFactorAuthPage.vue | 16 +- src/views/mobile/users/UserProfilePage.vue | 41 +- third-patry-dependencies.json | 8 +- 80 files changed, 4972 insertions(+), 4859 deletions(-) rename src/lib/{utilities => }/account.js (98%) rename src/lib/{utilities => }/category.js (96%) rename src/lib/{utilities => }/common.js (93%) rename src/lib/{utilities => }/currency.js (96%) rename src/lib/{utilities => }/datetime.js (99%) rename src/lib/{utilities => }/misc.js (100%) rename src/lib/{mobile/ui.js => ui.mobile.js} (98%) delete mode 100644 src/lib/utilities/index.js delete mode 100644 src/store/account.js delete mode 100644 src/store/exchangeRates.js delete mode 100644 src/store/index.js delete mode 100644 src/store/mutations.js delete mode 100644 src/store/overview.js delete mode 100644 src/store/setting.js delete mode 100644 src/store/statistics.js delete mode 100644 src/store/token.js delete mode 100644 src/store/transaction.js delete mode 100644 src/store/transactionCategory.js delete mode 100644 src/store/transactionTag.js delete mode 100644 src/store/twoFactorAuth.js delete mode 100644 src/store/user.js create mode 100644 src/stores/account.js create mode 100644 src/stores/exchangeRates.js create mode 100644 src/stores/index.js create mode 100644 src/stores/overview.js create mode 100644 src/stores/setting.js create mode 100644 src/stores/statistics.js create mode 100644 src/stores/token.js create mode 100644 src/stores/transaction.js create mode 100644 src/stores/transactionCategory.js create mode 100644 src/stores/transactionTag.js create mode 100644 src/stores/twoFactorAuth.js create mode 100644 src/stores/user.js diff --git a/package-lock.json b/package-lock.json index f06817d5..d4c65896 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,13 +23,13 @@ "line-awesome": "^1.3.0", "moment": "^2.29.4", "moment-timezone": "^0.5.43", + "pinia": "^2.1.3", "register-service-worker": "^1.7.2", "skeleton-elements": "^4.0.1", "swiper": "^9.3.2", "ua-parser-js": "^1.0.35", "vue": "^3.3.4", - "vue-i18n": "^9.2.2", - "vuex": "^4.1.0" + "vue-i18n": "^9.2.2" }, "devDependencies": { "@vitejs/plugin-vue": "^4.2.0", @@ -5634,6 +5634,56 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pinia": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/pinia/-/pinia-2.1.3.tgz", + "integrity": "sha512-XNA/z/ye4P5rU1pieVmh0g/hSuDO98/a5UC8oSP0DNdvt6YtetJNHTrXwpwsQuflkGT34qKxAEcp7lSxXNjf/A==", + "dependencies": { + "@vue/devtools-api": "^6.5.0", + "vue-demi": ">=0.14.5" + }, + "funding": { + "url": "https://github.com/sponsors/posva" + }, + "peerDependencies": { + "@vue/composition-api": "^1.4.0", + "typescript": ">=4.4.4", + "vue": "^2.6.14 || ^3.3.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/pinia/node_modules/vue-demi": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/vue-demi/-/vue-demi-0.14.5.tgz", + "integrity": "sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==", + "hasInstallScript": true, + "bin": { + "vue-demi-fix": "bin/vue-demi-fix.js", + "vue-demi-switch": "bin/vue-demi-switch.js" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + }, + "peerDependencies": { + "@vue/composition-api": "^1.0.0-rc.1", + "vue": "^3.0.0-0 || ^2.6.0" + }, + "peerDependenciesMeta": { + "@vue/composition-api": { + "optional": true + } + } + }, "node_modules/postcss": { "version": "8.4.23", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.23.tgz", @@ -7238,17 +7288,6 @@ "vue": "^3.0.0" } }, - "node_modules/vuex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/vuex/-/vuex-4.1.0.tgz", - "integrity": "sha512-hmV6UerDrPcgbSy9ORAtNXDr9M4wlNP4pEFKye4ujJF8oqgFFuxDCdOLS3eNoRTtq5O3hoBDh9Doj1bQMYHRbQ==", - "dependencies": { - "@vue/devtools-api": "^6.0.0-beta.11" - }, - "peerDependencies": { - "vue": "^3.2.0" - } - }, "node_modules/webidl-conversions": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", diff --git a/package.json b/package.json index 7359e116..89123f38 100644 --- a/package.json +++ b/package.json @@ -32,13 +32,13 @@ "line-awesome": "^1.3.0", "moment": "^2.29.4", "moment-timezone": "^0.5.43", + "pinia": "^2.1.3", "register-service-worker": "^1.7.2", "skeleton-elements": "^4.0.1", "swiper": "^9.3.2", "ua-parser-js": "^1.0.35", "vue": "^3.3.4", - "vue-i18n": "^9.2.2", - "vuex": "^4.1.0" + "vue-i18n": "^9.2.2" }, "devDependencies": { "@vitejs/plugin-vue": "^4.2.0", diff --git a/src/MobileApp.vue b/src/MobileApp.vue index 2dbf7008..33446dd3 100644 --- a/src/MobileApp.vue +++ b/src/MobileApp.vue @@ -9,6 +9,12 @@ import { f7ready } from 'framework7-vue'; import routes from './router/mobile.js'; +import { mapStores } from 'pinia'; +import { useTokensStore } from '@/stores/token.js'; +import { useExchangeRatesStore } from '@/stores/exchangeRates.js'; + +import { isModalShowing } from '@/lib/ui.mobile.js'; + export default { data() { const self = this; @@ -81,13 +87,16 @@ export default { hasBackdrop: undefined } }, + computed: { + ...mapStores(useTokensStore, useExchangeRatesStore), + }, created() { const self = this; if (self.$user.isUserLogined()) { if (!self.$settings.isEnableApplicationLock()) { // refresh token if user is logined - self.$store.dispatch('refreshTokenAndRevokeOldToken').then(response => { + self.tokensStore.refreshTokenAndRevokeOldToken().then(response => { if (response.user && response.user.language) { self.$locale.setLanguage(response.user.language); } @@ -95,7 +104,7 @@ export default { // auto refresh exchange rates data if (self.$settings.isAutoUpdateExchangeRatesData()) { - self.$store.dispatch('getLatestExchangeRates', { silent: true, force: false }); + self.exchangeRatesStore.getLatestExchangeRates({ silent: true, force: false }); } } } @@ -117,7 +126,7 @@ export default { f7.on('sheetClose', (event) => this.onBackdropChanged(event)); f7.on('pageBeforeOut', () => { - if (this.$ui.isModalShowing()) { + if (isModalShowing()) { f7.actions.close('.actions-modal.modal-in', false); f7.dialog.close('.dialog.modal-in', false); f7.popover.close('.popover.modal-in', false); diff --git a/src/components/mobile/DateRangeSelectionSheet.vue b/src/components/mobile/DateRangeSelectionSheet.vue index e8b087a5..1b0d87d1 100644 --- a/src/components/mobile/DateRangeSelectionSheet.vue +++ b/src/components/mobile/DateRangeSelectionSheet.vue @@ -48,6 +48,25 @@