/** * Trash view loading and rendering logic */ import { escapeHtml, formatDateTime } from '../core/formatters.js'; import { i18n } from '../core/i18n.js'; import { fileOps } from '../features/files/fileOperations.js'; import { multiSelect } from '../features/files/multiSelect.js'; import * as pathTooltip from '../features/pathTooltip.js'; import { appElements } from './state.js'; import { ui } from './ui.js'; /** Categories whose items have a server-side thumbnail. */ const THUMBNAILABLE = new Set(['image', 'video', 'pdf']); /** * * @import {TrashItem} from '../core/types.js' */ async function loadTrashItems() { const elements = appElements; try { if (multiSelect) multiSelect.clear(); pathTooltip.destroy(elements.filesList); ui.resetFilesList(); // ensure also list visible & error hidden elements.filesList.innerHTML = `
${i18n.t('files.name')}
${i18n.t('files.type')}
${i18n.t('trash.original_location')}
${i18n.t('trash.deleted_date')}
${i18n.t('trash.actions')}
`; ui.updateBreadcrumb(); const trashItems = await fileOps.getTrashItems(); if (trashItems.length === 0) { ui.showError(`

${i18n.t('trash.empty_state')}

`); return; } trashItems.forEach((item) => { addTrashItemToView(item); }); pathTooltip.init(elements.filesList); } catch (error) { console.error('Error loading trash items:', error); ui.showNotification('Error', 'Error loading trash items'); } } /** * * @param {TrashItem} item */ function addTrashItemToView(item) { const elements = appElements; const isFile = item.item_type === 'file'; const formattedDate = formatDateTime(item.trashed_at); let iconClass; let typeLabel; let iconSpecialClass = ''; if (!isFile) { iconClass = item.icon_class || 'fas fa-folder'; typeLabel = i18n.t('files.file_types.folder'); } else { iconClass = item.icon_class || (ui?.getIconClass ? ui.getIconClass(item.name) : 'fas fa-file'); iconSpecialClass = ui?.getIconSpecialClass ? ui.getIconSpecialClass(item.name) : ''; const cat = item.category || ''; typeLabel = cat ? i18n.t(`files.file_types.${cat.toLowerCase()}`) || cat : i18n.t('files.file_types.document'); } const isFolder = !isFile; const iconWrapClass = isFolder ? 'file-icon folder-icon' : `file-icon ${iconSpecialClass}`.trim(); const canThumbnail = isFile && THUMBNAILABLE.has((item.category || '').toLowerCase()); const listElement = document.createElement('div'); listElement.className = 'file-item trash-item'; listElement.dataset.trashId = item.id; listElement.dataset.originalId = item.original_id; listElement.dataset.itemType = item.item_type; if (item.original_path) listElement.dataset.path = item.original_path; listElement.innerHTML = `
${canThumbnail ? `` : ''}
${escapeHtml(item.name)}
${escapeHtml(typeLabel)}
${escapeHtml(item.original_path || '--')}
${escapeHtml(formattedDate)}
`; listElement.querySelector('.btn-restore').addEventListener('click', async (e) => { e.stopPropagation(); if (await fileOps.restoreFromTrash(item.id)) { loadTrashItems(); } }); listElement.querySelector('.btn-delete').addEventListener('click', async (e) => { e.stopPropagation(); if (await fileOps.deletePermanently(item.id)) { loadTrashItems(); } }); elements.filesList.appendChild(listElement); } export { loadTrashItems };