auto choose the secondary category of selected primary category when create transaction in transaction list page

This commit is contained in:
MaysWind
2023-08-22 00:57:02 +08:00
parent 6e334d2efb
commit ad36dfd448
2 changed files with 42 additions and 9 deletions
+21 -1
View File
@@ -116,7 +116,7 @@ export function allVisibleTransactionCategories(allTransactionCategories) {
return ret; return ret;
} }
export function isCategoryIdAvailable(categories, categoryId) { export function isSubCategoryIdAvailable(categories, categoryId) {
if (!categories || !categories.length) { if (!categories || !categories.length) {
return false; return false;
} }
@@ -144,6 +144,26 @@ export function getFirstAvailableCategoryId(categories) {
} }
} }
export function getFirstAvaiableSubCategoryId(categories, categoryId) {
if (!categories || !categories.length) {
return '';
}
for (let i = 0; i < categories.length; i++) {
if (categories[i].id !== categoryId) {
continue;
}
if (categories[i].subCategories.length <= 0) {
return '';
}
return categories[i].subCategories[0].id;
}
return '';
}
export function hasAnyAvailableCategory(allVisibleTransactionCategories) { export function hasAnyAvailableCategory(allVisibleTransactionCategories) {
for (let type in allVisibleTransactionCategories) { for (let type in allVisibleTransactionCategories) {
if (!Object.prototype.hasOwnProperty.call(allVisibleTransactionCategories, type)) { if (!Object.prototype.hasOwnProperty.call(allVisibleTransactionCategories, type)) {
+21 -8
View File
@@ -9,8 +9,9 @@ import {
} from './datetime.js'; } from './datetime.js';
import { import {
categoryTypeToTransactionType, categoryTypeToTransactionType,
isCategoryIdAvailable, isSubCategoryIdAvailable,
getFirstAvailableCategoryId getFirstAvailableCategoryId,
getFirstAvaiableSubCategoryId
} from './category.js'; } from './category.js';
export function setTransactionModelByTransaction(transaction, transaction2, allCategories, allCategoriesMap, allVisibleAccounts, allAccountsMap, defaultAccountId, options, setContextData) { export function setTransactionModelByTransaction(transaction, transaction2, allCategories, allCategoriesMap, allVisibleAccounts, allAccountsMap, defaultAccountId, options, setContextData) {
@@ -25,8 +26,12 @@ export function setTransactionModelByTransaction(transaction, transaction2, allC
if (allCategories[categoryConstants.allCategoryTypes.Expense] && if (allCategories[categoryConstants.allCategoryTypes.Expense] &&
allCategories[categoryConstants.allCategoryTypes.Expense].length) { allCategories[categoryConstants.allCategoryTypes.Expense].length) {
if (options.categoryId && options.categoryId !== '0' && isCategoryIdAvailable(allCategories[categoryConstants.allCategoryTypes.Expense], options.categoryId)) { if (options.categoryId && options.categoryId !== '0') {
transaction.expenseCategory = options.categoryId; if (isSubCategoryIdAvailable(allCategories[categoryConstants.allCategoryTypes.Expense], options.categoryId)) {
transaction.expenseCategory = options.categoryId;
} else {
transaction.expenseCategory = getFirstAvaiableSubCategoryId(allCategories[categoryConstants.allCategoryTypes.Expense], options.categoryId);
}
} }
if (!transaction.expenseCategory) { if (!transaction.expenseCategory) {
@@ -36,8 +41,12 @@ export function setTransactionModelByTransaction(transaction, transaction2, allC
if (allCategories[categoryConstants.allCategoryTypes.Income] && if (allCategories[categoryConstants.allCategoryTypes.Income] &&
allCategories[categoryConstants.allCategoryTypes.Income].length) { allCategories[categoryConstants.allCategoryTypes.Income].length) {
if (options.categoryId && options.categoryId !== '0' && isCategoryIdAvailable(allCategories[categoryConstants.allCategoryTypes.Income], options.categoryId)) { if (options.categoryId && options.categoryId !== '0') {
transaction.incomeCategory = options.categoryId; if (isSubCategoryIdAvailable(allCategories[categoryConstants.allCategoryTypes.Income], options.categoryId)) {
transaction.incomeCategory = options.categoryId;
} else {
transaction.incomeCategory = getFirstAvaiableSubCategoryId(allCategories[categoryConstants.allCategoryTypes.Income], options.categoryId);
}
} }
if (!transaction.incomeCategory) { if (!transaction.incomeCategory) {
@@ -47,8 +56,12 @@ export function setTransactionModelByTransaction(transaction, transaction2, allC
if (allCategories[categoryConstants.allCategoryTypes.Transfer] && if (allCategories[categoryConstants.allCategoryTypes.Transfer] &&
allCategories[categoryConstants.allCategoryTypes.Transfer].length) { allCategories[categoryConstants.allCategoryTypes.Transfer].length) {
if (options.categoryId && options.categoryId !== '0' && isCategoryIdAvailable(allCategories[categoryConstants.allCategoryTypes.Transfer], options.categoryId)) { if (options.categoryId && options.categoryId !== '0') {
transaction.transferCategory = options.categoryId; if (isSubCategoryIdAvailable(allCategories[categoryConstants.allCategoryTypes.Transfer], options.categoryId)) {
transaction.transferCategory = options.categoryId;
} else {
transaction.transferCategory = getFirstAvaiableSubCategoryId(allCategories[categoryConstants.allCategoryTypes.Transfer], options.categoryId);
}
} }
if (!transaction.transferCategory) { if (!transaction.transferCategory) {