From 2a72525d8edcd3767b05c801ce76903bc913563b Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Sat, 19 Apr 2025 05:38:20 +0000 Subject: [PATCH] Adds hook for barcode scan dialog --- .../components/barcodes/BarcodeScanDialog.tsx | 34 ++++++++++++++++++- .../src/pages/stock/LocationDetail.tsx | 15 +++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/src/frontend/src/components/barcodes/BarcodeScanDialog.tsx b/src/frontend/src/components/barcodes/BarcodeScanDialog.tsx index 8ce74cccbc..26f6be28fb 100644 --- a/src/frontend/src/components/barcodes/BarcodeScanDialog.tsx +++ b/src/frontend/src/components/barcodes/BarcodeScanDialog.tsx @@ -47,7 +47,11 @@ export default function BarcodeScanDialog({ > - + ); @@ -145,3 +149,31 @@ export function ScanInputHandler({ return ; } + +export function useBarcodeScanDialog({ + title, + callback +}: Readonly<{ + title: string; + callback: BarcodeScanCallback; +}>) { + const [opened, setOpened] = useState(false); + + const open = useCallback((callback?: BarcodeScanCallback) => { + setOpened(true); + }, []); + + const dialog = ( + setOpened(false)} + /> + ); + + return { + open, + dialog + }; +} diff --git a/src/frontend/src/pages/stock/LocationDetail.tsx b/src/frontend/src/pages/stock/LocationDetail.tsx index 45e063f280..f7ece9c4c0 100644 --- a/src/frontend/src/pages/stock/LocationDetail.tsx +++ b/src/frontend/src/pages/stock/LocationDetail.tsx @@ -7,6 +7,7 @@ import { Group, Skeleton, Stack, Text } from '@mantine/core'; import { IconInfoCircle, IconPackages, IconSitemap } from '@tabler/icons-react'; import { useMemo, useState } from 'react'; import { useNavigate, useParams } from 'react-router-dom'; +import { useBarcodeScanDialog } from '../../components/barcodes/BarcodeScanDialog'; import AdminButton from '../../components/buttons/AdminButton'; import { PrintingActions } from '../../components/buttons/PrintingActions'; import { @@ -272,6 +273,17 @@ export default function Stock() { const transferStockItems = useTransferStockItem(stockItemActionProps); const countStockItems = useCountStockItem(stockItemActionProps); + const scanInStockItems = useBarcodeScanDialog({ + title: t`Scan Stock Item`, + callback: async (barcode, response) => { + console.log('response:', response); + return { + success: true, + error: '' + }; + } + }); + const locationActions = useMemo( () => [ , @@ -287,7 +299,7 @@ export default function Stock() { name: 'Scan in stock items', icon: , tooltip: 'Scan items', - onClick: notYetImplemented + onClick: scanInStockItems.open }, { name: 'Scan in container', @@ -362,6 +374,7 @@ export default function Stock() { <> {editLocation.modal} {deleteLocation.modal} + {scanInStockItems.dialog}