import { api } from '../api.js'; import { BaseFileList } from './base-file-list.js'; export class RecentFiles extends BaseFileList { constructor() { super(); } async connectedCallback() { super.connectedCallback(); await this.loadRecentFiles(); } async loadRecentFiles() { try { this.files = await api.listRecentFiles(); this.folders = []; this.selectedFiles.clear(); this.selectedFolders.clear(); this.render(); } catch (error) { console.error('Failed to load recent files:', error); document.dispatchEvent(new CustomEvent('show-toast', { detail: { message: 'Failed to load recent files: ' + error.message, type: 'error' } })); } } render() { const hasSelected = this.selectedFiles.size > 0; const totalSelected = this.selectedFiles.size; const allSelected = this.files.length > 0 && this.selectedFiles.size === this.files.length; const someSelected = hasSelected && !allSelected; if (this.files.length === 0) { this.innerHTML = `

Recent Files

No recent files found.

`; return; } this.innerHTML = `

Recent Files

${this.files.length > 0 ? `
` : ''}
${hasSelected ? `
` : ''}
${this.files.map(file => this.renderRecentFile(file)).join('')}
`; this.attachListeners(); this.updateIndeterminateState(); } renderRecentFile(file) { const isSelected = this.selectedFiles.has(file.id); const icon = this.getFileIcon(file.mime_type); const size = this.formatFileSize(file.size); const lastAccessed = file.last_accessed_at ? new Date(file.last_accessed_at).toLocaleString() : 'N/A'; return `
${icon}
${file.name}
${size}
Accessed: ${lastAccessed}
`; } async handleAction(action, id) { try { if (action === 'download') { const blob = await api.downloadFile(id); const file = this.files.find(f => f.id === id); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = file.name; a.click(); URL.revokeObjectURL(url); document.dispatchEvent(new CustomEvent('show-toast', { detail: { message: 'File downloaded successfully!', type: 'success' } })); } } catch (error) { document.dispatchEvent(new CustomEvent('show-toast', { detail: { message: 'Action failed: ' + error.message, type: 'error' } })); } } } customElements.define('recent-files', RecentFiles);