only show categories with specified type in category filter dialog / page

This commit is contained in:
MaysWind
2024-07-07 11:47:48 +08:00
parent e5a04596e1
commit 7b70b2db29
6 changed files with 52 additions and 7 deletions
@@ -127,7 +127,7 @@ import { useTransactionsStore } from '@/stores/transaction.js';
import { useStatisticsStore } from '@/stores/statistics.js';
import categoryConstants from '@/consts/category.js';
import { copyObjectTo } from '@/lib/common.js';
import { copyObjectTo, arrayItemToObjectField } from '@/lib/common.js';
import {
allVisibleTransactionCategories,
hasAnyAvailableCategory,
@@ -151,6 +151,7 @@ import {
export default {
props: [
'dialogMode',
'categoryTypes',
'type',
'autoSave'
],
@@ -190,8 +191,11 @@ export default {
return 'Apply';
}
},
allowCategoryTypes() {
return this.categoryTypes ? arrayItemToObjectField(this.categoryTypes.split(','), true) : null;
},
allVisibleTransactionCategories() {
return allVisibleTransactionCategories(this.transactionCategoriesStore.allTransactionCategories);
return allVisibleTransactionCategories(this.transactionCategoriesStore.allTransactionCategories, this.allowCategoryTypes);
},
hasAnyAvailableCategory() {
return hasAnyAvailableCategory(this.allVisibleTransactionCategories);
@@ -217,6 +221,10 @@ export default {
const category = self.transactionCategoriesStore.allTransactionCategoriesMap[categoryId];
if (self.allowCategoryTypes && !self.allowCategoryTypes[category.type]) {
continue;
}
if (this.type === 'transactionListCurrent' && self.transactionsStore.allFilterCategoryIdsCount > 0) {
allCategoryIds[category.id] = true;
} else {
+8 -1
View File
@@ -413,7 +413,7 @@
</v-dialog>
<v-dialog width="800" v-model="showFilterCategoryDialog">
<category-filter-settings-card type="transactionListCurrent" :dialog-mode="true"
<category-filter-settings-card type="transactionListCurrent" :dialog-mode="true" :category-types="allowCategoryTypes"
@settings:change="changeMultipleCategoriesFilter" />
</v-dialog>
@@ -653,6 +653,13 @@ export default {
queryMonthlyData() {
return isDateRangeMatchOneMonth(this.query.minTime, this.query.maxTime);
},
allowCategoryTypes() {
if (this.allTransactionTypes.Income <= this.query.type && this.query.type <= this.allTransactionTypes.Transfer) {
return transactionTypeToCategoryType(this.query.type).toString();
}
return '';
},
countPerPage: {
get: function () {
if (this.temporaryCountPerPage) {