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(() => {