From b43b1d92ef3d7e57b5df5cd72f75dc3a1c3f1c7a Mon Sep 17 00:00:00 2001 From: joonhoekim <26rote@gmail.com> Date: Thu, 27 Nov 2025 13:48:44 +0900 Subject: (김준회) swp 파일 개수 컬럼 삭제 (API에서 주지 않는 데이터), dolce rebuild 에서 상태값 수정, bulk upload MatchBatchFileDwg API 사용해 Edit 으로 보내도록 수정 (Category, status 하드코딩 값 넣어주도록 처리), 상세도면, 파일 추가시 확인 다이얼로그 추가 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dialogs/upload-files-to-detail-dialog.tsx | 252 +++++++++++++-------- 1 file changed, 159 insertions(+), 93 deletions(-) (limited to 'lib/dolce/dialogs/upload-files-to-detail-dialog.tsx') diff --git a/lib/dolce/dialogs/upload-files-to-detail-dialog.tsx b/lib/dolce/dialogs/upload-files-to-detail-dialog.tsx index e8d82129..f21ccc70 100644 --- a/lib/dolce/dialogs/upload-files-to-detail-dialog.tsx +++ b/lib/dolce/dialogs/upload-files-to-detail-dialog.tsx @@ -55,20 +55,29 @@ export function UploadFilesToDetailDialog({ isDragActive, } = useFileUploadWithProgress(); + const [showConfirmation, setShowConfirmation] = useState(false); + // 다이얼로그 닫을 때 초기화 React.useEffect(() => { if (!open) { clearFiles(); + setShowConfirmation(false); } }, [open, clearFiles]); - // 업로드 처리 + // 업로드 처리 (확인 단계 포함) const handleUpload = async () => { if (selectedFiles.length === 0) { toast.error(t("uploadFilesDialog.selectFilesError")); return; } + // 확인 단계가 아니면 확인 단계로 이동 + if (!showConfirmation) { + setShowConfirmation(true); + return; + } + setIsUploading(true); try { @@ -112,117 +121,169 @@ export function UploadFilesToDetailDialog({ } }; + const handleCancel = () => { + if (showConfirmation) { + setShowConfirmation(false); + } else { + onOpenChange(false); + } + }; + return ( - + - {t("uploadFilesDialog.title")} + + {showConfirmation + ? t("uploadFilesDialog.confirmTitle", "파일 업로드 확인") + : t("uploadFilesDialog.title") + } + {t("uploadFilesDialog.description", { drawingNo, revNo })} -
- {/* 안내 메시지 */} - - - - {t("uploadFilesDialog.alertMessage")} - - - - {/* 파일 선택 영역 */} -
- -
- -

- {isDragActive - ? t("uploadFilesDialog.dropHereText") - : t("uploadFilesDialog.dragDropText")} -

-

- {t("uploadFilesDialog.fileInfo")} -

-
-
+ {showConfirmation ? ( +
+ + + + {t("uploadFilesDialog.confirmMessage", "선택한 파일을 업로드하시겠습니까?")} + + - {/* 선택된 파일 목록 */} - {selectedFiles.length > 0 && (
- {isUploading ? ( - // 업로드 중: 진행도 표시 - - ) : ( - // 대기 중: 삭제 버튼 표시 - <> -
-

- {t("uploadFilesDialog.selectedFiles", { count: selectedFiles.length })} -

- -
-
- {selectedFiles.map((file, index) => ( -
-
- -
-

{file.name}

-

- {(file.size / 1024 / 1024).toFixed(2)} MB -

-
+
+ +
+

{file.name}

+

+ {(file.size / 1024 / 1024).toFixed(2)} MB +

-
- ))} -
- - )} +
+ )) + )} +
+
+
+ ) : ( +
+ {/* 안내 메시지 */} + + + + {t("uploadFilesDialog.alertMessage")} + + + + {/* 파일 선택 영역 */} +
+ +
+ +

+ {isDragActive + ? t("uploadFilesDialog.dropHereText") + : t("uploadFilesDialog.dragDropText")} +

+

+ {t("uploadFilesDialog.fileInfo")} +

+
- )} -
+ + {/* 선택된 파일 목록 */} + {selectedFiles.length > 0 && ( +
+ {isUploading ? ( + // 업로드 중: 진행도 표시 + + ) : ( + // 대기 중: 삭제 버튼 표시 + <> +
+

+ {t("uploadFilesDialog.selectedFiles", { count: selectedFiles.length })} +

+ +
+
+ {selectedFiles.map((file, index) => ( +
+
+ +
+

{file.name}

+

+ {(file.size / 1024 / 1024).toFixed(2)} MB +

+
+
+ +
+ ))} +
+ + )} +
+ )} +
+ )} -- cgit v1.2.3