From 304c54530cd9d29588a3df850b76fa4b0ad25b76 Mon Sep 17 00:00:00 2001 From: Oliver Date: Tue, 30 Jun 2026 19:28:37 +1000 Subject: [PATCH] Allow stock adjustment from "category" detail view (#12256) --- .../src/pages/part/CategoryDetail.tsx | 28 ++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/src/frontend/src/pages/part/CategoryDetail.tsx b/src/frontend/src/pages/part/CategoryDetail.tsx index 9d0077e9c8..77c2a8bf13 100644 --- a/src/frontend/src/pages/part/CategoryDetail.tsx +++ b/src/frontend/src/pages/part/CategoryDetail.tsx @@ -16,6 +16,7 @@ import { ApiEndpoints } from '@lib/enums/ApiEndpoints'; import { ModelType } from '@lib/enums/ModelType'; import { UserRoles } from '@lib/enums/Roles'; import { getDetailUrl } from '@lib/functions/Navigation'; +import type { StockOperationProps } from '@lib/types/Forms'; import type { PanelType } from '@lib/types/Panel'; import { useLocalStorage } from '@mantine/hooks'; import AdminButton from '../../components/buttons/AdminButton'; @@ -43,6 +44,7 @@ import { useEditApiFormModal } from '../../hooks/UseForm'; import { useInstance } from '../../hooks/UseInstance'; +import { useStockAdjustActions } from '../../hooks/UseStockAdjustActions'; import { useUserSettingsState } from '../../states/SettingsStates'; import { useUserState } from '../../states/UserState'; import ParametricPartTable from '../../tables/part/ParametricPartTable'; @@ -82,6 +84,28 @@ export default function CategoryDetail() { } }); + const stockOperationProps: StockOperationProps = useMemo(() => { + return { + refresh: refreshInstance, + filters: { + category: category.pk, + in_stock: true + } + }; + }, [category]); + + const stockAdjustActions = useStockAdjustActions({ + formProps: stockOperationProps, + enabled: true, + add: false, + remove: false, + changeStatus: false, + changeBatch: false, + delete: false, + merge: false, + assign: false + }); + const detailsPanel = useMemo(() => { if (id && instanceQuery.isFetching) { return ; @@ -241,6 +265,7 @@ export default function CategoryDetail() { refreshInstance(); }} />, + stockAdjustActions.dropdown, ]; - }, [id, user, category.pk, category.starred]); + }, [id, user, category.pk, category.starred, stockAdjustActions.dropdown]); const [partsView, setPartsView] = useLocalStorage({ key: 'category-parts-view', @@ -367,6 +392,7 @@ export default function CategoryDetail() { <> {editCategory.modal} {deleteCategory.modal} + {stockAdjustActions.modals.map((modal) => modal.modal)}