diff --git a/frontend/src/pages/Admin.jsx b/frontend/src/pages/Admin.jsx index d55424f..2d9d11b 100644 --- a/frontend/src/pages/Admin.jsx +++ b/frontend/src/pages/Admin.jsx @@ -366,6 +366,8 @@ export default function Admin({ isMobile = false }) { if (filesToUpload.length === 0) return; setIconUploading(true); + let successCount = 0; + let failCount = 0; for (const fileObj of filesToUpload) { // 상태를 'processing'으로 변경 @@ -394,29 +396,32 @@ export default function Admin({ isMobile = false }) { result: `${result.uploaded}개 업로드, ${result.updated}개 DB 업데이트` } : f) ); + successCount++; } else { const errorMsg = data.errors?.[0]?.error || data.error || '업로드 실패'; setPendingIconFiles(prev => prev.map(f => f.name === fileObj.name ? { ...f, status: 'error', error: errorMsg } : f) ); + failCount++; } } catch (error) { setPendingIconFiles(prev => prev.map(f => f.name === fileObj.name ? { ...f, status: 'error', error: error.message } : f) ); + failCount++; } } setIconUploading(false); fetchIconMods(); - - // 완료 토스트 표시 - const successCount = pendingIconFiles.filter(f => f.status === 'success').length; - const errorCount = pendingIconFiles.filter(f => f.status === 'error').length; - if (successCount > 0) { - setToast(`아이콘 업로드 완료: ${successCount}개 성공${errorCount > 0 ? `, ${errorCount}개 실패` : ''}`); - } else if (errorCount > 0) { - setToast(`아이콘 업로드 실패: ${errorCount}개`, true); + + // 결과 토스트 (모드 번역과 동일한 방식) + if (successCount > 0 && failCount === 0) { + setToast(`${successCount}개 아이콘 ZIP 업로드 완료!`); + } else if (successCount > 0 && failCount > 0) { + setToast(`완료: ${successCount}개 성공, ${failCount}개 실패`, true); + } else if (failCount > 0) { + setToast(`${failCount}개 아이콘 업로드 실패`, true); } };