From 67ffdc2f5b7420a67697f9448252ddd95c3584d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EB=B3=B4=EA=B3=A4?= Date: Sun, 22 Mar 2026 12:44:30 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20[worker-screen]=20=EC=82=AC=EC=9D=B4?= =?UTF-8?q?=EB=93=9C=EB=B0=94=20=EB=8C=80=EA=B8=B0/=EC=99=84=EB=A3=8C=20?= =?UTF-8?q?=ED=83=AD=20=EB=B6=84=EB=A6=AC=20(=EA=B8=B0=EB=B3=B8:=20?= =?UTF-8?q?=EB=8C=80=EA=B8=B0=EB=A7=8C=20=ED=91=9C=EC=8B=9C)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../production/WorkerScreen/index.tsx | 49 ++++++++++++++++--- 1 file changed, 41 insertions(+), 8 deletions(-) diff --git a/src/components/production/WorkerScreen/index.tsx b/src/components/production/WorkerScreen/index.tsx index 6f6b746e..892bb7a1 100644 --- a/src/components/production/WorkerScreen/index.tsx +++ b/src/components/production/WorkerScreen/index.tsx @@ -1780,6 +1780,7 @@ function SidebarContent({ apiOrders, }: SidebarContentProps) { const [sidebarTab, setSidebarTab] = useState<'orders' | 'wip'>('orders'); + const [showCompleted, setShowCompleted] = useState(false); const [searchTerm, setSearchTerm] = useState(''); // 수주목록 / 재공품 분리 @@ -1790,15 +1791,23 @@ function SidebarContent({ apiOrders.filter((o) => o.subType === 'wip'), [apiOrders]); + // 완료/미완료 필터링 + const pendingRegular = useMemo(() => regularOrders.filter(o => o.status !== 'completed'), [regularOrders]); + const completedRegular = useMemo(() => regularOrders.filter(o => o.status === 'completed'), [regularOrders]); + const pendingWip = useMemo(() => wipOrders.filter(o => o.status !== 'completed'), [wipOrders]); + const completedWip = useMemo(() => wipOrders.filter(o => o.status === 'completed'), [wipOrders]); + // 검색 필터링 const displayOrders = useMemo(() => { - const source = sidebarTab === 'orders' ? regularOrders : wipOrders; - if (!searchTerm.trim()) return source; + const baseOrders = sidebarTab === 'orders' + ? (showCompleted ? completedRegular : pendingRegular) + : (showCompleted ? completedWip : pendingWip); + if (!searchTerm.trim()) return baseOrders; const q = searchTerm.toLowerCase(); - return source.filter((o) => + return baseOrders.filter((o) => o.siteName.toLowerCase().includes(q) || o.date.includes(q) ); - }, [sidebarTab, regularOrders, wipOrders, searchTerm]); + }, [sidebarTab, showCompleted, pendingRegular, completedRegular, pendingWip, completedWip, searchTerm]); const renderOrders = (orders: SidebarOrder[]) => ( <> @@ -1861,7 +1870,7 @@ function SidebarContent({
+
+ + {/* 대기/완료 토글 */} +
+ +