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}