From ed5bbbfca0add0cdfb6ea2ce96eafe12bfec6d2e Mon Sep 17 00:00:00 2001 From: Daniel Bedeleanu Date: Sun, 19 Apr 2026 14:47:15 +0300 Subject: [PATCH] refactor: extract ScannerSection component - Created frontend/components/ScannerSection.tsx (76 lines) - Moved mode switcher and scanner UI from page.tsx - Props: mode, onModeChange, showScanner, onShowScanner, onScanSuccess, onOCRMatch, onAddItemClick - Removed unused ArrowDownCircle, ArrowUpCircle imports from page.tsx - All 291 tests passing, build successful --- frontend/components/ScannerSection.tsx | 80 ++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 frontend/components/ScannerSection.tsx diff --git a/frontend/components/ScannerSection.tsx b/frontend/components/ScannerSection.tsx new file mode 100644 index 00000000..1f9e2e19 --- /dev/null +++ b/frontend/components/ScannerSection.tsx @@ -0,0 +1,80 @@ +'use client'; + +import { X, ArrowDownCircle, ArrowUpCircle, Trash2 } from 'lucide-react'; +import Scanner from '@/components/Scanner'; +import NewItemDialog from '@/components/NewItemDialog'; +import { clsx, type ClassValue } from 'clsx'; +import { twMerge } from 'tailwind-merge'; + +function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)); +} + +interface ScannerSectionProps { + mode: string; + onModeChange: (mode: string) => void; + showScanner: boolean; + onShowScanner: (show: boolean) => void; + onScanSuccess: (result: any) => void; + onOCRMatch: (result: any) => void; + onAddItemClick: () => void; +} + +export default function ScannerSection({ + mode, + onModeChange, + showScanner, + onShowScanner, + onScanSuccess, + onOCRMatch, + onAddItemClick, +}: ScannerSectionProps) { + return ( +
+ {/* Mode Switcher */} +
+ {[ + { id: 'CHECK_IN', label: 'Check In', icon: ArrowDownCircle }, + { id: 'CHECK_OUT', label: 'Check Out', icon: ArrowUpCircle }, + { id: 'TRASH', label: 'Trash', icon: Trash2 } + ].map((m) => ( + + ))} +
+ + {/* Scanner Section */} +
+ {showScanner ? ( +
+
+

scanning...

+ +
+ +
+ ) : ( + onShowScanner(true)} + onAddItemClick={onAddItemClick} + /> + )} +
+
+ ); +}