import { state } from './state.js'; import { setStatus, showToast } from './ui.js'; import { renderGrid, showEmptyGrid } from './grid.js'; import * as history from './history.js'; const deleteModal = document.getElementById('delete-modal'); const deleteFileList = document.getElementById('delete-file-list'); const deleteCancelBtn = document.getElementById('delete-cancel'); const deleteConfirmBtn = document.getElementById('delete-confirm'); const btnRename = document.getElementById('btn-rename'); let _pendingFiles = null; deleteCancelBtn.addEventListener('click', () => { deleteModal.style.display = 'none'; _pendingFiles = null; }); deleteConfirmBtn.addEventListener('click', async () => { if (!_pendingFiles) return; const files = _pendingFiles; _pendingFiles = null; deleteModal.style.display = 'none'; await _doDelete(files); }); export function deleteSelected() { if (!state.selectedIdxs.size) return; const filesToDelete = [...state.selectedIdxs].sort((a, b) => a - b) .map(i => state.files[i]).filter(Boolean); if (!filesToDelete.length) return; deleteFileList.replaceChildren(...filesToDelete.map(f => { const li = document.createElement('li'); li.textContent = f.name; return li; })); _pendingFiles = filesToDelete; deleteModal.style.display = 'flex'; } export function init(gridEl) { gridEl.addEventListener('click', (e) => { const btn = e.target.closest('.card-delete'); if (!btn) return; const card = btn.closest('.card'); if (!card) return; const idx = parseInt(card.dataset.idx); let filesToDelete; if (state.selectedIdxs.size > 0 && state.selectedIdxs.has(idx)) { filesToDelete = [...state.selectedIdxs].sort((a, b) => a - b) .map(i => state.files[i]).filter(Boolean); } else { filesToDelete = [state.files[idx]].filter(Boolean); } if (!filesToDelete.length) return; deleteFileList.replaceChildren(...filesToDelete.map(f => { const li = document.createElement('li'); li.textContent = f.name; return li; })); _pendingFiles = filesToDelete; deleteModal.style.display = 'flex'; }); } async function _doDelete(files) { const result = await window.api.stageDeleteFiles(files.map(f => f.path)); if (result.errors.length) { alert('일부 오류:\n' + result.errors.join('\n')); } const stagedSet = new Set(result.staged.map(s => s.originalPath)); for (let i = state.files.length - 1; i >= 0; i--) { if (stagedSet.has(state.files[i].path)) state.files.splice(i, 1); } state.selectedIdxs.clear(); history.pushDelete([...state.files], result.staged); const n = result.staged.length; if (!state.files.length) { showEmptyGrid(); btnRename.disabled = true; setStatus('이미지 파일 없음', false); } else { renderGrid(); setStatus(`${n}개 파일 삭제됨`, true); } if (n > 0) showToast(`${n}개 파일 삭제됨`, '#8b1a1a', '#ffd0d0'); }