fix: 견적 선택 다이얼로그 개선

- actions.ts: for_order=true 파라미터 추가 (수주 전환된 견적 제외)
- QuotationSelectDialog: 두 번 호출되는 문제 수정
  - 두 개의 useEffect를 하나로 통합
  - 초기 로드는 즉시, 검색은 디바운스 적용
This commit is contained in:
2026-01-15 16:13:30 +09:00
parent 0f8f40fc7b
commit f6c8610104
2 changed files with 8 additions and 10 deletions

View File

@@ -74,21 +74,17 @@ export function QuotationSelectDialog({
} }
}, []); }, []);
// 다이얼로그 열릴 때 데이터 로드 // 다이얼로그 열릴 때 데이터 로드 + 검색어 변경 시 디바운스 적용
useEffect(() => {
if (open) {
setSearchTerm("");
fetchQuotations();
}
}, [open, fetchQuotations]);
// 검색어 변경 시 디바운스 적용하여 API 호출
useEffect(() => { useEffect(() => {
if (!open) return; if (!open) return;
// 검색어가 빈 문자열이면 즉시 호출 (다이얼로그 열림 시)
// 검색어가 있으면 디바운스 적용
const delay = searchTerm === "" ? 0 : 300;
const timer = setTimeout(() => { const timer = setTimeout(() => {
fetchQuotations(searchTerm || undefined); fetchQuotations(searchTerm || undefined);
}, 300); }, delay);
return () => clearTimeout(timer); return () => clearTimeout(timer);
}, [searchTerm, open, fetchQuotations]); }, [searchTerm, open, fetchQuotations]);

View File

@@ -1043,6 +1043,8 @@ export async function getQuotesForSelect(params?: {
searchParams.set('status', 'finalized'); searchParams.set('status', 'finalized');
// 품목 포함 (수주 전환용) // 품목 포함 (수주 전환용)
searchParams.set('with_items', 'true'); searchParams.set('with_items', 'true');
// 수주 전환용: 이미 수주가 생성된 견적 제외 (이중 체크)
searchParams.set('for_order', 'true');
if (params?.q) searchParams.set('q', params.q); if (params?.q) searchParams.set('q', params.q);
if (params?.page) searchParams.set('page', String(params.page)); if (params?.page) searchParams.set('page', String(params.page));
if (params?.size) searchParams.set('size', String(params.size || 50)); if (params?.size) searchParams.set('size', String(params.size || 50));