From e068a8c7994132e176690b49a2172a5727f85b55 Mon Sep 17 00:00:00 2001 From: Harry Groves Date: Tue, 13 Oct 2026 18:05:42 +0800 Subject: [PATCH] Purchase Order, Pick Order, Stock Take Management, Put Away Scan moved to top-level sidebar --- .../NavigationContent/NavigationContent.tsx | 152 +++++++++--------- 1 file changed, 72 insertions(+), 80 deletions(-) diff --git a/src/components/NavigationContent/NavigationContent.tsx b/src/components/NavigationContent/NavigationContent.tsx index 28de4f55..da9c13ca 100644 --- a/src/components/NavigationContent/NavigationContent.tsx +++ b/src/components/NavigationContent/NavigationContent.tsx @@ -83,27 +83,41 @@ const NavigationContent: React.FC = () => { labelKey: "nav.dashboard", path: "/dashboard", }, + { + id: "nav.store.purchaseOrder", + icon: , + labelKey: "nav.store.purchaseOrder", + requiredAbility: [AUTH.PURCHASE, AUTH.ADMIN], + path: "/po", + }, + { + id: "nav.store.pickOrder", + icon: , + labelKey: "nav.store.pickOrder", + requiredAbility: [AUTH.STOCK, AUTH.ADMIN], + path: "/pickOrder", + }, + { + id: "nav.store.stockTake", + icon: , + labelKey: "nav.store.stockTake", + requiredAbility: [AUTH.STOCK, AUTH.STOCK_TAKE, AUTH.ADMIN], + path: "/stocktakemanagement", + }, + { + id: "nav.store.putAwayScan", + icon: , + labelKey: "nav.store.putAwayScan", + requiredAbility: [AUTH.STOCK, AUTH.STOCK_TAKE, AUTH.STOCK_IN_BIND, AUTH.ADMIN], + path: "/putAway", + }, { id: "nav.storeManagement", icon: , labelKey: "nav.storeManagement", path: "", - requiredAbility: [AUTH.PURCHASE, AUTH.STOCK, AUTH.STOCK_TAKE, AUTH.STOCK_FG, AUTH.STOCK_IN_BIND, AUTH.ITEM_TRACING, AUTH.ADMIN], + requiredAbility: [AUTH.STOCK, AUTH.STOCK_TAKE, AUTH.STOCK_FG, AUTH.STOCK_IN_BIND, AUTH.ITEM_TRACING, AUTH.ADMIN], children: [ - { - id: "nav.store.purchaseOrder", - icon: , - labelKey: "nav.store.purchaseOrder", - requiredAbility: [AUTH.PURCHASE, AUTH.ADMIN], - path: "/po", - }, - { - id: "nav.store.pickOrder", - icon: , - labelKey: "nav.store.pickOrder", - requiredAbility: [AUTH.STOCK, AUTH.ADMIN], - path: "/pickOrder", - }, { id: "nav.store.inventoryLedger", icon: , @@ -118,13 +132,6 @@ const NavigationContent: React.FC = () => { requiredAbility: [AUTH.ITEM_TRACING], path: "/itemTracing", }, - { - id: "nav.store.stockTake", - icon: , - labelKey: "nav.store.stockTake", - requiredAbility: [AUTH.STOCK, AUTH.STOCK_TAKE, AUTH.ADMIN], - path: "/stocktakemanagement", - }, { id: "nav.store.stockIssue", icon: , @@ -132,13 +139,6 @@ const NavigationContent: React.FC = () => { requiredAbility: [AUTH.STOCK, AUTH.STOCK_TAKE, AUTH.ADMIN], path: "/stockIssue", }, - { - id: "nav.store.putAwayScan", - icon: , - labelKey: "nav.store.putAwayScan", - requiredAbility: [AUTH.STOCK, AUTH.STOCK_TAKE, AUTH.STOCK_IN_BIND, AUTH.ADMIN], - path: "/putAway", - }, { id: "nav.store.finishedGoodManagement", icon: , @@ -444,15 +444,12 @@ const NavigationContent: React.FC = () => { const canSeeMasterDataIssueBadge = abilitySet.has(AUTH.ADMIN); const [openItems, setOpenItems] = React.useState([]); - /** Keep parent sections expanded on deep links (e.g. /po/edit from nav red spot) so alerts stay visible. */ + /** Keep parent sections expanded on deep links so nested alerts stay visible. */ React.useEffect(() => { const ensureOpen: string[] = []; if (pathname.startsWith("/chart")) { ensureOpen.push("nav.chartReports"); } - if (pathname === "/po" || pathname.startsWith("/po/")) { - ensureOpen.push("nav.storeManagement"); - } if (pathname === "/productionProcess" || pathname.startsWith("/productionProcess/")) { ensureOpen.push("nav.jobOrderManagement"); } @@ -555,7 +552,47 @@ const NavigationContent: React.FC = () => { return ( - {isLeaf ? ( + {isLeaf && item.path === "/po" ? ( + + + + {item.icon} + + + + + + ) : isLeaf ? ( {content} @@ -566,52 +603,7 @@ const NavigationContent: React.FC = () => { {item.children.map( (child) => !child.isHidden && hasAbility(child.requiredAbility) && ( - child.path === "/po" ? ( - - - - {child.icon} - - - - - - ) : child.path === "/settings/masterDataIssues" ? ( + child.path === "/settings/masterDataIssues" ? (