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({ > <Divider /> <Box> - <ScanInputHandler navigate={navigate} onClose={onClose} /> + <ScanInputHandler + navigate={navigate} + onClose={onClose} + callback={callback} + /> </Box> </Modal> ); @@ -145,3 +149,31 @@ export function ScanInputHandler({ return <BarcodeInput onScan={onScan} error={error} processing={processing} />; } + +export function useBarcodeScanDialog({ + title, + callback +}: Readonly<{ + title: string; + callback: BarcodeScanCallback; +}>) { + const [opened, setOpened] = useState(false); + + const open = useCallback((callback?: BarcodeScanCallback) => { + setOpened(true); + }, []); + + const dialog = ( + <BarcodeScanDialog + title={title} + opened={opened} + callback={callback} + onClose={() => 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( () => [ <AdminButton model={ModelType.stocklocation} id={location.pk} />, @@ -287,7 +299,7 @@ export default function Stock() { name: 'Scan in stock items', icon: <InvenTreeIcon icon='stock' />, 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} <InstanceDetail status={requestStatus} loading={id ? instanceQuery.isFetching : false}