diff --git a/packages/api/methods.test.ts b/packages/api/methods.test.ts index 3453975fe0f320f52d5f55ad0847a9ac4d0fd4fb..cca376242fcba9968144ce8607bbe498dda2c471 100644 --- a/packages/api/methods.test.ts +++ b/packages/api/methods.test.ts @@ -119,6 +119,11 @@ describe('API CRUD operations', () => { name: 'test-budget', group_id: mainGroupId, }); + const categoryIdHidden = await api.createCategory({ + name: 'test-budget-hidden', + group_id: mainGroupId, + hidden: true, + }); let categories = await api.getCategories(); expect(categories).toEqual( @@ -126,6 +131,13 @@ describe('API CRUD operations', () => { expect.objectContaining({ id: categoryId, name: 'test-budget', + hidden: false, + group_id: mainGroupId, + }), + expect.objectContaining({ + id: categoryIdHidden, + name: 'test-budget-hidden', + hidden: true, group_id: mainGroupId, }), ]), @@ -137,12 +149,25 @@ describe('API CRUD operations', () => { group_id: secondaryGroupId, }); + await api.updateCategory(categoryIdHidden, { + name: 'updated-budget-hidden', + group_id: secondaryGroupId, + hidden: false, + }); + categories = await api.getCategories(); expect(categories).toEqual( expect.arrayContaining([ expect.objectContaining({ id: categoryId, name: 'updated-budget', + hidden: false, + group_id: secondaryGroupId, + }), + expect.objectContaining({ + id: categoryIdHidden, + name: 'updated-budget-hidden', + hidden: false, group_id: secondaryGroupId, }), ]), diff --git a/packages/desktop-client/src/components/budget/index.tsx b/packages/desktop-client/src/components/budget/index.tsx index db90edc081706b31a876dbec7059798050d5be41..f32d592150cbca5d7f84d9dc556b2e0963087f1f 100644 --- a/packages/desktop-client/src/components/budget/index.tsx +++ b/packages/desktop-client/src/components/budget/index.tsx @@ -274,6 +274,7 @@ function Budget(props: BudgetProps) { category.name, category.cat_group, category.is_income, + category.hidden, ); setNewCategoryForGroup(null); diff --git a/packages/loot-core/src/client/actions/queries.ts b/packages/loot-core/src/client/actions/queries.ts index 0482d17dafc19068368f526b34c17dfa2d8e41bc..6c64b08c09aed9e8dce222f3c9a5db6b2cc14c50 100644 --- a/packages/loot-core/src/client/actions/queries.ts +++ b/packages/loot-core/src/client/actions/queries.ts @@ -134,12 +134,14 @@ export function createCategory( name: string, groupId: string, isIncome: boolean, + hidden: boolean, ) { return async (dispatch: Dispatch) => { const id = await send('category-create', { name, groupId, isIncome, + hidden, }); dispatch(getCategories()); return id; diff --git a/packages/loot-core/src/server/api-models.ts b/packages/loot-core/src/server/api-models.ts index 04bdc76f417c24c20cac74d51f7a511a5bc892c7..e1741d68aaf145ecc0c8faf51c9c1ec31162cf1b 100644 --- a/packages/loot-core/src/server/api-models.ts +++ b/packages/loot-core/src/server/api-models.ts @@ -32,6 +32,7 @@ export const categoryModel = { id: category.id, name: category.name, is_income: category.is_income ? true : false, + hidden: category.hidden ? true : false, group_id: category.cat_group, }; }, @@ -41,6 +42,9 @@ export const categoryModel = { if ('is_income' in category) { result.is_income = category.is_income ? 1 : 0; } + if ('hidden' in category) { + result.hidden = category.hidden ? 1 : 0; + } if ('group_id' in category) { result.cat_group = category.group_id; } @@ -56,6 +60,7 @@ export const categoryGroupModel = { id: group.id, name: group.name, is_income: group.is_income ? true : false, + hidden: group.hidden ? true : false, categories: group.categories.map(categoryModel.toExternal), }; }, @@ -65,6 +70,9 @@ export const categoryGroupModel = { if ('is_income' in group) { result.is_income = group.is_income ? 1 : 0; } + if ('hidden' in group) { + result.hidden = group.hidden ? 1 : 0; + } if ('categories' in group) { result.categories = group.categories.map(categoryModel.fromExternal); } diff --git a/packages/loot-core/src/server/api.ts b/packages/loot-core/src/server/api.ts index 29288bdc8d678b006e97627d335bf8aa3e2b0ba9..34a9730575b4eeddc338effb9e553bac94ab44d7 100644 --- a/packages/loot-core/src/server/api.ts +++ b/packages/loot-core/src/server/api.ts @@ -556,6 +556,7 @@ handlers['api/category-create'] = withMutation(async function ({ category }) { name: category.name, groupId: category.group_id, isIncome: category.is_income, + hidden: category.hidden, }); }); diff --git a/packages/loot-core/src/server/main.ts b/packages/loot-core/src/server/main.ts index 384500214a2f988dbf3a6a7888d2e27651d162c6..431023d76b43f633cc1aef63871703418223c9b2 100644 --- a/packages/loot-core/src/server/main.ts +++ b/packages/loot-core/src/server/main.ts @@ -278,6 +278,7 @@ handlers['category-create'] = mutator(async function ({ name, groupId, isIncome, + hidden, }) { return withUndo(async () => { if (!groupId) { @@ -288,6 +289,7 @@ handlers['category-create'] = mutator(async function ({ name, cat_group: groupId, is_income: isIncome ? 1 : 0, + hidden: hidden ? 1 : 0, }); }); }); diff --git a/packages/loot-core/src/types/server-handlers.d.ts b/packages/loot-core/src/types/server-handlers.d.ts index c62104a18ff417a11d56b3b4dad2f0bd77605b2f..1e85f00458db4c9d82472285cc284b3f9b67bcb2 100644 --- a/packages/loot-core/src/types/server-handlers.d.ts +++ b/packages/loot-core/src/types/server-handlers.d.ts @@ -74,7 +74,12 @@ export interface ServerHandlers { 'budget-set-type': (arg: { type }) => Promise<unknown>; - 'category-create': (arg: { name; groupId; isIncome }) => Promise<unknown>; + 'category-create': (arg: { + name; + groupId; + isIncome; + hidden: boolean; + }) => Promise<unknown>; 'category-update': (category) => Promise<unknown>; diff --git a/upcoming-release-notes/2062.md b/upcoming-release-notes/2062.md new file mode 100644 index 0000000000000000000000000000000000000000..c8cb99f60396b82e67238800409d07b92ebbaa0f --- /dev/null +++ b/upcoming-release-notes/2062.md @@ -0,0 +1,6 @@ +--- +category: Enhancements +authors: [iOSLife] +--- + +Adds a property to the returned items in the API for category and categoryGroup to inform if it is hidden. \ No newline at end of file