From 00f62fd608e13247f95b9ea024f90dd4838478a5 Mon Sep 17 00:00:00 2001 From: MaysWind Date: Wed, 5 Feb 2025 00:19:01 +0800 Subject: [PATCH] code refactor --- src/stores/transactionCategory.ts | 34 ++++++++++++++- .../transactions/TransactionEditPageBase.ts | 42 ++++--------------- .../list/dialogs/BatchReplaceDialog.vue | 32 ++------------ .../transactions/list/dialogs/EditDialog.vue | 6 +-- .../list/dialogs/ImportDialog.vue | 32 ++------------ src/views/mobile/transactions/EditPage.vue | 6 +-- 6 files changed, 54 insertions(+), 98 deletions(-) diff --git a/src/stores/transactionCategory.ts b/src/stores/transactionCategory.ts index 21984b44..373d3056 100644 --- a/src/stores/transactionCategory.ts +++ b/src/stores/transactionCategory.ts @@ -1,4 +1,4 @@ -import { ref } from 'vue'; +import { ref, computed } from 'vue'; import { defineStore } from 'pinia'; import type { BeforeResolveFunction } from '@/core/base.ts'; @@ -13,6 +13,7 @@ import { } from '@/models/transaction_category.ts'; import { isEquals } from '@/lib/common.ts'; +import { getFirstAvailableCategoryId } from '@/lib/category.ts'; import services, { type ApiResponsePromise } from '@/lib/services.ts'; import logger from '@/lib/logger.ts'; @@ -21,6 +22,33 @@ export const useTransactionCategoriesStore = defineStore('transactionCategories' const allTransactionCategoriesMap = ref>({}); const transactionCategoryListStateInvalid = ref(true); + const hasAvailableExpenseCategories = computed(() => { + if (!allTransactionCategories.value || !allTransactionCategories.value[CategoryType.Expense] || !allTransactionCategories.value[CategoryType.Expense].length) { + return false; + } + + const firstAvailableCategoryId = getFirstAvailableCategoryId(allTransactionCategories.value[CategoryType.Expense]); + return firstAvailableCategoryId !== ''; + }); + + const hasAvailableIncomeCategories = computed(() => { + if (!allTransactionCategories.value || !allTransactionCategories.value[CategoryType.Income] || !allTransactionCategories.value[CategoryType.Income].length) { + return false; + } + + const firstAvailableCategoryId = getFirstAvailableCategoryId(allTransactionCategories.value[CategoryType.Income]); + return firstAvailableCategoryId !== ''; + }); + + const hasAvailableTransferCategories = computed(() => { + if (!allTransactionCategories.value || !allTransactionCategories.value[CategoryType.Transfer] || !allTransactionCategories.value[CategoryType.Transfer].length) { + return false; + } + + const firstAvailableCategoryId = getFirstAvailableCategoryId(allTransactionCategories.value[CategoryType.Transfer]); + return firstAvailableCategoryId !== ''; + }); + function loadTransactionCategoryList(allCategories: Record): void { allTransactionCategories.value = allCategories; allTransactionCategoriesMap.value = {}; @@ -496,6 +524,10 @@ export const useTransactionCategoriesStore = defineStore('transactionCategories' allTransactionCategories, allTransactionCategoriesMap, transactionCategoryListStateInvalid, + // computed states + hasAvailableExpenseCategories, + hasAvailableIncomeCategories, + hasAvailableTransferCategories, // functions updateTransactionCategoryListInvalidState, resetTransactionCategories, diff --git a/src/views/base/transactions/TransactionEditPageBase.ts b/src/views/base/transactions/TransactionEditPageBase.ts index d7047983..70c1b931 100644 --- a/src/views/base/transactions/TransactionEditPageBase.ts +++ b/src/views/base/transactions/TransactionEditPageBase.ts @@ -11,7 +11,6 @@ import { useTransactionsStore } from '@/stores/transaction.ts'; import { useExchangeRatesStore } from '@/stores/exchangeRates.ts'; import type { LocalizedTimezoneInfo } from '@/core/timezone.ts'; -import { CategoryType } from '@/core/category.ts'; import { TransactionType } from '@/core/transaction.ts'; import { TemplateType } from '@/core/template.ts'; import { TRANSACTION_MAX_PICTURE_COUNT } from '@/consts/transaction.ts'; @@ -33,10 +32,6 @@ import { getCurrentUnixTime } from '@/lib/datetime.ts'; -import { - getFirstAvailableCategoryId -} from '@/lib/category.ts'; - export enum TransactionEditPageType { Transaction = 'transaction', Template = 'template' @@ -103,6 +98,10 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo const allTags = computed(() => transactionTagsStore.allTransactionTags); const allTagsMap = computed>(() => transactionTagsStore.allTransactionTagsMap); + const hasAvailableExpenseCategories = computed(() => transactionCategoriesStore.hasAvailableExpenseCategories); + const hasAvailableIncomeCategories = computed(() => transactionCategoriesStore.hasAvailableIncomeCategories); + const hasAvailableTransferCategories = computed(() => transactionCategoriesStore.hasAvailableTransferCategories); + const canAddTransactionPicture = computed(() => { if (type !== TransactionEditPageType.Transaction || (mode.value !== TransactionEditPageMode.Add && mode.value !== TransactionEditPageMode.Edit)) { return false; @@ -194,33 +193,6 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo return tt('Transfer In Amount') + ` (${amountRate})`; }); - const hasAvailableExpenseCategories = computed(() => { - if (!allCategories.value || !allCategories.value[CategoryType.Expense] || !allCategories.value[CategoryType.Expense].length) { - return false; - } - - const firstAvailableCategoryId = getFirstAvailableCategoryId(allCategories.value[CategoryType.Expense]); - return firstAvailableCategoryId !== ''; - }); - - const hasAvailableIncomeCategories = computed(() => { - if (!allCategories.value || !allCategories.value[CategoryType.Income] || !allCategories.value[CategoryType.Income].length) { - return false; - } - - const firstAvailableCategoryId = getFirstAvailableCategoryId(allCategories.value[CategoryType.Income]); - return firstAvailableCategoryId !== ''; - }); - - const hasAvailableTransferCategories = computed(() => { - if (!allCategories.value || !allCategories.value[CategoryType.Transfer] || !allCategories.value[CategoryType.Transfer].length) { - return false; - } - - const firstAvailableCategoryId = getFirstAvailableCategoryId(allCategories.value[CategoryType.Transfer]); - return firstAvailableCategoryId !== ''; - }); - const sourceAccountName = computed(() => { if (transaction.value.sourceAccountId) { return Account.findAccountNameById(allAccounts.value, transaction.value.sourceAccountId) || ''; @@ -422,6 +394,9 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo allCategoriesMap, allTags, allTagsMap, + hasAvailableExpenseCategories, + hasAvailableIncomeCategories, + hasAvailableTransferCategories, canAddTransactionPicture, title, saveButtonTitle, @@ -429,9 +404,6 @@ export function useTransactionEditPageBase(type: TransactionEditPageType, initMo sourceAmountName, sourceAccountTitle, transferInAmountTitle, - hasAvailableExpenseCategories, - hasAvailableIncomeCategories, - hasAvailableTransferCategories, sourceAccountName, destinationAccountName, sourceAccountCurrency, diff --git a/src/views/desktop/transactions/list/dialogs/BatchReplaceDialog.vue b/src/views/desktop/transactions/list/dialogs/BatchReplaceDialog.vue index 55a8d4c2..789e48ac 100644 --- a/src/views/desktop/transactions/list/dialogs/BatchReplaceDialog.vue +++ b/src/views/desktop/transactions/list/dialogs/BatchReplaceDialog.vue @@ -188,8 +188,7 @@ import type { TransactionTag } from '@/models/transaction_tag.ts'; import { getTransactionPrimaryCategoryName, - getTransactionSecondaryCategoryName, - getFirstAvailableCategoryId + getTransactionSecondaryCategoryName } from '@/lib/category.ts'; import { @@ -233,32 +232,9 @@ const allVisibleCategorizedAccounts = computed>(() => transactionCategoriesStore.allTransactionCategories); const allTags = computed(() => transactionTagsStore.allTransactionTags); -const hasAvailableExpenseCategories = computed(() => { - if (!allCategories.value || !allCategories.value[CategoryType.Expense] || !allCategories.value[CategoryType.Expense].length) { - return false; - } - - const firstAvailableCategoryId = getFirstAvailableCategoryId(allCategories.value[CategoryType.Expense]); - return firstAvailableCategoryId !== ''; -}); - -const hasAvailableIncomeCategories = computed(() => { - if (!allCategories.value || !allCategories.value[CategoryType.Income] || !allCategories.value[CategoryType.Income].length) { - return false; - } - - const firstAvailableCategoryId = getFirstAvailableCategoryId(allCategories.value[CategoryType.Income]); - return firstAvailableCategoryId !== ''; -}); - -const hasAvailableTransferCategories = computed(() => { - if (!allCategories.value || !allCategories.value[CategoryType.Transfer] || !allCategories.value[CategoryType.Transfer].length) { - return false; - } - - const firstAvailableCategoryId = getFirstAvailableCategoryId(allCategories.value[CategoryType.Transfer]); - return firstAvailableCategoryId !== ''; -}); +const hasAvailableExpenseCategories = computed(() => transactionCategoriesStore.hasAvailableExpenseCategories); +const hasAvailableIncomeCategories = computed(() => transactionCategoriesStore.hasAvailableIncomeCategories); +const hasAvailableTransferCategories = computed(() => transactionCategoriesStore.hasAvailableTransferCategories); function getAccountDisplayName(accountId?: string): string { if (accountId) { diff --git a/src/views/desktop/transactions/list/dialogs/EditDialog.vue b/src/views/desktop/transactions/list/dialogs/EditDialog.vue index e0adb59d..5f1f6cd9 100644 --- a/src/views/desktop/transactions/list/dialogs/EditDialog.vue +++ b/src/views/desktop/transactions/list/dialogs/EditDialog.vue @@ -497,6 +497,9 @@ const { allCategoriesMap, allTags, allTagsMap, + hasAvailableExpenseCategories, + hasAvailableIncomeCategories, + hasAvailableTransferCategories, canAddTransactionPicture, title, saveButtonTitle, @@ -504,9 +507,6 @@ const { sourceAmountName, sourceAccountTitle, transferInAmountTitle, - hasAvailableExpenseCategories, - hasAvailableIncomeCategories, - hasAvailableTransferCategories, sourceAccountName, destinationAccountName, sourceAccountCurrency, diff --git a/src/views/desktop/transactions/list/dialogs/ImportDialog.vue b/src/views/desktop/transactions/list/dialogs/ImportDialog.vue index a44bdab1..b68b1dab 100644 --- a/src/views/desktop/transactions/list/dialogs/ImportDialog.vue +++ b/src/views/desktop/transactions/list/dialogs/ImportDialog.vue @@ -646,8 +646,7 @@ import { } from '@/lib/datetime.ts'; import { getTransactionPrimaryCategoryName, - getTransactionSecondaryCategoryName, - getFirstAvailableCategoryId + getTransactionSecondaryCategoryName } from '@/lib/category.ts'; import { @@ -805,32 +804,9 @@ const allCategoriesMap = computed>(() => tra const allTags = computed(() => transactionTagsStore.allTransactionTags); const allTagsMap = computed>(() => transactionTagsStore.allTransactionTagsMap); -const hasAvailableExpenseCategories = computed(() => { - if (!allCategories.value || !allCategories.value[CategoryType.Expense] || !allCategories.value[CategoryType.Expense].length) { - return false; - } - - const firstAvailableCategoryId = getFirstAvailableCategoryId(allCategories.value[CategoryType.Expense]); - return firstAvailableCategoryId !== ''; -}); - -const hasAvailableIncomeCategories = computed(() => { - if (!allCategories.value || !allCategories.value[CategoryType.Income] || !allCategories.value[CategoryType.Income].length) { - return false; - } - - const firstAvailableCategoryId = getFirstAvailableCategoryId(allCategories.value[CategoryType.Income]); - return firstAvailableCategoryId !== ''; -}); - -const hasAvailableTransferCategories = computed(() => { - if (!allCategories.value || !allCategories.value[CategoryType.Transfer] || !allCategories.value[CategoryType.Transfer].length) { - return false; - } - - const firstAvailableCategoryId = getFirstAvailableCategoryId(allCategories.value[CategoryType.Transfer]); - return firstAvailableCategoryId !== ''; -}); +const hasAvailableExpenseCategories = computed(() => transactionCategoriesStore.hasAvailableExpenseCategories); +const hasAvailableIncomeCategories = computed(() => transactionCategoriesStore.hasAvailableIncomeCategories); +const hasAvailableTransferCategories = computed(() => transactionCategoriesStore.hasAvailableTransferCategories); const supportedImportFileExtensions = computed(() => { if (allFileSubTypes.value && allFileSubTypes.value.length) { diff --git a/src/views/mobile/transactions/EditPage.vue b/src/views/mobile/transactions/EditPage.vue index 0168e424..e24dde9a 100644 --- a/src/views/mobile/transactions/EditPage.vue +++ b/src/views/mobile/transactions/EditPage.vue @@ -514,15 +514,15 @@ const { allCategoriesMap, allTags, allTagsMap, + hasAvailableExpenseCategories, + hasAvailableIncomeCategories, + hasAvailableTransferCategories, canAddTransactionPicture, title, saveButtonTitle, sourceAmountName, sourceAccountTitle, transferInAmountTitle, - hasAvailableExpenseCategories, - hasAvailableIncomeCategories, - hasAvailableTransferCategories, sourceAccountName, destinationAccountName, sourceAccountCurrency,