From 250c203bfb74e62389501f687f3f06ecb1e76880 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 18:26:43 +0900 Subject: [PATCH] =?UTF-8?q?fix:=20[=EC=9E=91=EC=97=85=EC=9E=90=ED=99=94?= =?UTF-8?q?=EB=A9=B4]=20=EC=83=9D=EC=82=B0=EC=9D=BC=EC=9E=90/=EB=B6=80?= =?UTF-8?q?=EC=84=9C/=EB=8B=B4=EB=8B=B9=EC=9E=90=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EC=8B=9C=20=EC=9D=B4=EC=A0=84=20=EA=B0=92=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=B5=EC=9B=90=EB=90=98=EB=8A=94=20=EB=B2=84=EA=B7=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - useEffect 의존성에서 filteredWorkOrders 제거 - prevSidebarOrderIdRef로 작업지시 변경 시에만 세팅 (사용자 수정값 보존) - 같은 작업지시 선택 상태에서 onChange 값이 덮어쓰이지 않음 --- src/components/production/WorkerScreen/index.tsx | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/components/production/WorkerScreen/index.tsx b/src/components/production/WorkerScreen/index.tsx index 10ffea83..5c772479 100644 --- a/src/components/production/WorkerScreen/index.tsx +++ b/src/components/production/WorkerScreen/index.tsx @@ -20,7 +20,7 @@ function extractLengthFromName(name?: string | null): number { return m ? parseInt(m[1], 10) : 0; } -import { useState, useMemo, useCallback, useEffect } from 'react'; +import { useState, useMemo, useCallback, useEffect, useRef } from 'react'; import dynamic from 'next/dynamic'; import { useSearchParams, useRouter, usePathname } from 'next/navigation'; import { useSidebarCollapsed } from '@/stores/menuStore'; @@ -863,8 +863,13 @@ export default function WorkerScreen() { }, [selectedSidebarOrderId, workItems.length]); - // ===== 작업지시 변경 시 작업 정보 자동 세팅 ===== + // ===== 작업지시 변경 시 작업 정보 자동 세팅 (선택 변경 시에만) ===== + const prevSidebarOrderIdRef = useRef(null); useEffect(() => { + // 같은 작업지시를 다시 선택한 경우 덮어쓰지 않음 (사용자 수정값 보존) + if (prevSidebarOrderIdRef.current === selectedSidebarOrderId) return; + prevSidebarOrderIdRef.current = selectedSidebarOrderId; + const apiOrder = filteredWorkOrders.find((wo) => wo.id === selectedSidebarOrderId); if (apiOrder) { // 부서 세팅: 1순위 work_orders.team_id → 2순위 process.department(부서명 매칭) @@ -885,8 +890,8 @@ export default function WorkerScreen() { setProductionManagerId(''); setProductionDate(''); } - - }, [selectedSidebarOrderId, filteredWorkOrders, departmentList]); + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [selectedSidebarOrderId]); // ===== 수주 정보 (사이드바 선택 항목 기반) ===== const orderInfo = useMemo(() => {