diff --git a/src/components/quotes/QuoteRegistrationV2.tsx b/src/components/quotes/QuoteRegistrationV2.tsx index 975912ce..b79a6591 100644 --- a/src/components/quotes/QuoteRegistrationV2.tsx +++ b/src/components/quotes/QuoteRegistrationV2.tsx @@ -9,7 +9,7 @@ "use client"; -import { useState, useEffect, useMemo, useCallback } from "react"; +import { useState, useEffect, useMemo, useCallback, useRef } from "react"; import { FileText, Calculator, Download, Save, Check } from "lucide-react"; import { toast } from "sonner"; @@ -167,6 +167,7 @@ export function QuoteRegistrationV2({ const [isSaving, setIsSaving] = useState(false); const [isCalculating, setIsCalculating] = useState(false); const [previewModalOpen, setPreviewModalOpen] = useState(false); + const [pendingAutoCalculate, setPendingAutoCalculate] = useState(false); // API 데이터 const [clients, setClients] = useState([]); @@ -175,6 +176,9 @@ export function QuoteRegistrationV2({ const [isLoadingClients, setIsLoadingClients] = useState(false); const [isLoadingProducts, setIsLoadingProducts] = useState(false); + // handleCalculate 참조 (DevFill에서 사용) + const calculateRef = useRef<(() => Promise) | null>(null); + // --------------------------------------------------------------------------- // DevFill (개발/테스트용 자동 채우기) // --------------------------------------------------------------------------- @@ -246,6 +250,9 @@ export function QuoteRegistrationV2({ setFormData(testData); setSelectedLocationId(testLocations[0].id); toast.success(`[DevFill] 테스트 데이터가 채워졌습니다. (${locationCount}개 개소)`); + + // 자동 견적 산출 트리거 + setPendingAutoCalculate(true); }, [clients, finishedGoods])); // --------------------------------------------------------------------------- @@ -480,6 +487,23 @@ export function QuoteRegistrationV2({ } }, [formData.locations]); + // handleCalculate 참조 업데이트 + useEffect(() => { + calculateRef.current = handleCalculate; + }, [handleCalculate]); + + // DevFill 후 자동 견적 산출 + useEffect(() => { + if (pendingAutoCalculate && formData.locations.length > 0 && calculateRef.current) { + setPendingAutoCalculate(false); + // 약간의 딜레이 후 산출 실행 (상태 업데이트 완료 대기) + const timer = setTimeout(() => { + calculateRef.current?.(); + }, 100); + return () => clearTimeout(timer); + } + }, [pendingAutoCalculate, formData.locations.length]); + // 저장 (임시/최종) const handleSave = useCallback(async (saveType: "temporary" | "final") => { if (!onSave) return;