Skip to content

Commit 68c1e8a

Browse files
committed
feat: add audit log drawer to Tool, Material, and Consumable headers
Add audit history button to dropdown menus for all item types, allowing users to view change history for tools, materials, and consumables.
1 parent 339c512 commit 68c1e8a

File tree

3 files changed

+60
-6
lines changed

3 files changed

+60
-6
lines changed

apps/erp/app/modules/items/ui/Consumables/ConsumableHeader.tsx

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,20 @@ import {
44
DropdownMenuContent,
55
DropdownMenuIcon,
66
DropdownMenuItem,
7+
DropdownMenuSeparator,
78
DropdownMenuTrigger,
89
Heading,
910
HStack,
1011
IconButton,
1112
useDisclosure,
1213
VStack
1314
} from "@carbon/react";
14-
import { LuEllipsisVertical, LuTrash } from "react-icons/lu";
15+
import { LuEllipsisVertical, LuHistory, LuTrash } from "react-icons/lu";
1516
import { Link, useParams } from "react-router";
17+
import { AuditLogDrawer } from "~/components/AuditLog";
1618
import { DetailsTopbar } from "~/components/Layout";
1719
import ConfirmDelete from "~/components/Modals/ConfirmDelete";
18-
import { usePermissions, useRouteData } from "~/hooks";
20+
import { usePermissions, useRouteData, useUser } from "~/hooks";
1921
import { path } from "~/utils/path";
2022
import type { Consumable } from "../../types";
2123
import { useConsumableNavigation } from "./useConsumableNavigation";
@@ -25,8 +27,10 @@ const ConsumableHeader = () => {
2527
const { itemId } = useParams();
2628
if (!itemId) throw new Error("itemId not found");
2729

30+
const { company } = useUser();
2831
const permissions = usePermissions();
2932
const deleteModal = useDisclosure();
33+
const auditDrawer = useDisclosure();
3034

3135
const routeData = useRouteData<{ consumableSummary: Consumable }>(
3236
path.to.consumable(itemId)
@@ -54,6 +58,11 @@ const ConsumableHeader = () => {
5458
/>
5559
</DropdownMenuTrigger>
5660
<DropdownMenuContent>
61+
<DropdownMenuItem onClick={auditDrawer.onOpen}>
62+
<DropdownMenuIcon icon={<LuHistory />} />
63+
Audit History
64+
</DropdownMenuItem>
65+
<DropdownMenuSeparator />
5766
<DropdownMenuItem
5867
disabled={
5968
!permissions.can("delete", "parts") ||
@@ -88,6 +97,15 @@ const ConsumableHeader = () => {
8897
}}
8998
/>
9099
)}
100+
{auditDrawer.isOpen && company?.id && (
101+
<AuditLogDrawer
102+
isOpen={auditDrawer.isOpen}
103+
onClose={auditDrawer.onClose}
104+
entityType="item"
105+
entityId={itemId}
106+
companyId={company.id}
107+
/>
108+
)}
91109
</div>
92110
);
93111
};

apps/erp/app/modules/items/ui/Materials/MaterialHeader.tsx

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,20 @@ import {
44
DropdownMenuContent,
55
DropdownMenuIcon,
66
DropdownMenuItem,
7+
DropdownMenuSeparator,
78
DropdownMenuTrigger,
89
Heading,
910
HStack,
1011
IconButton,
1112
useDisclosure,
1213
VStack
1314
} from "@carbon/react";
14-
import { LuEllipsisVertical, LuTrash } from "react-icons/lu";
15+
import { LuEllipsisVertical, LuHistory, LuTrash } from "react-icons/lu";
1516
import { Link, useParams } from "react-router";
17+
import { AuditLogDrawer } from "~/components/AuditLog";
1618
import { DetailsTopbar } from "~/components/Layout";
1719
import ConfirmDelete from "~/components/Modals/ConfirmDelete";
18-
import { usePermissions, useRouteData } from "~/hooks";
20+
import { usePermissions, useRouteData, useUser } from "~/hooks";
1921
import { path } from "~/utils/path";
2022
import type { Material } from "../../types";
2123
import { useMaterialNavigation } from "./useMaterialNavigation";
@@ -25,8 +27,10 @@ const MaterialHeader = () => {
2527
const { itemId } = useParams();
2628
if (!itemId) throw new Error("itemId not found");
2729

30+
const { company } = useUser();
2831
const permissions = usePermissions();
2932
const deleteModal = useDisclosure();
33+
const auditDrawer = useDisclosure();
3034

3135
const routeData = useRouteData<{ materialSummary: Material }>(
3236
path.to.material(itemId)
@@ -55,6 +59,11 @@ const MaterialHeader = () => {
5559
/>
5660
</DropdownMenuTrigger>
5761
<DropdownMenuContent>
62+
<DropdownMenuItem onClick={auditDrawer.onOpen}>
63+
<DropdownMenuIcon icon={<LuHistory />} />
64+
Audit History
65+
</DropdownMenuItem>
66+
<DropdownMenuSeparator />
5867
<DropdownMenuItem
5968
disabled={
6069
!permissions.can("delete", "parts") ||
@@ -89,6 +98,15 @@ const MaterialHeader = () => {
8998
}}
9099
/>
91100
)}
101+
{auditDrawer.isOpen && company?.id && (
102+
<AuditLogDrawer
103+
isOpen={auditDrawer.isOpen}
104+
onClose={auditDrawer.onClose}
105+
entityType="item"
106+
entityId={itemId}
107+
companyId={company.id}
108+
/>
109+
)}
92110
</div>
93111
);
94112
};

apps/erp/app/modules/items/ui/Tools/ToolHeader.tsx

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,20 @@ import {
44
DropdownMenuContent,
55
DropdownMenuIcon,
66
DropdownMenuItem,
7+
DropdownMenuSeparator,
78
DropdownMenuTrigger,
89
Heading,
910
HStack,
1011
IconButton,
1112
useDisclosure,
1213
VStack
1314
} from "@carbon/react";
14-
import { LuEllipsisVertical, LuTrash } from "react-icons/lu";
15+
import { LuEllipsisVertical, LuHistory, LuTrash } from "react-icons/lu";
1516
import { Link, useParams } from "react-router";
17+
import { AuditLogDrawer } from "~/components/AuditLog";
1618
import { DetailsTopbar } from "~/components/Layout";
1719
import ConfirmDelete from "~/components/Modals/ConfirmDelete";
18-
import { usePermissions, useRouteData } from "~/hooks";
20+
import { usePermissions, useRouteData, useUser } from "~/hooks";
1921
import { path } from "~/utils/path";
2022
import type { Tool } from "../../types";
2123
import { useToolNavigation } from "./useToolNavigation";
@@ -25,8 +27,10 @@ const ToolHeader = () => {
2527
const { itemId } = useParams();
2628
if (!itemId) throw new Error("itemId not found");
2729

30+
const { company } = useUser();
2831
const permissions = usePermissions();
2932
const deleteModal = useDisclosure();
33+
const auditDrawer = useDisclosure();
3034

3135
const routeData = useRouteData<{ toolSummary: Tool }>(path.to.tool(itemId));
3236

@@ -51,6 +55,11 @@ const ToolHeader = () => {
5155
/>
5256
</DropdownMenuTrigger>
5357
<DropdownMenuContent>
58+
<DropdownMenuItem onClick={auditDrawer.onOpen}>
59+
<DropdownMenuIcon icon={<LuHistory />} />
60+
Audit History
61+
</DropdownMenuItem>
62+
<DropdownMenuSeparator />
5463
<DropdownMenuItem
5564
disabled={
5665
!permissions.can("delete", "parts") ||
@@ -83,6 +92,15 @@ const ToolHeader = () => {
8392
}}
8493
/>
8594
)}
95+
{auditDrawer.isOpen && company?.id && (
96+
<AuditLogDrawer
97+
isOpen={auditDrawer.isOpen}
98+
onClose={auditDrawer.onClose}
99+
entityType="item"
100+
entityId={itemId}
101+
companyId={company.id}
102+
/>
103+
)}
86104
</div>
87105
);
88106
};

0 commit comments

Comments
 (0)