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 = `
`;
return;
}
this.innerHTML = `
${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);