import { api } from '../api.js'; export class FileUpload extends HTMLElement { constructor() { super(); this.folderId = null; this.handleEscape = this.handleEscape.bind(this); this.render(); this.attachListeners(); } setFolder(folderId) { this.folderId = folderId; } render() { this.innerHTML = `
`; } attachListeners() { const modal = this.querySelector('#upload-modal'); const dropZone = this.querySelector('#drop-zone'); const fileInput = this.querySelector('#file-input'); const selectBtn = this.querySelector('#select-files-btn'); const closeBtn = this.querySelector('#close-upload'); selectBtn.addEventListener('click', () => fileInput.click()); fileInput.addEventListener('change', (e) => this.handleFiles(e.target.files)); closeBtn.addEventListener('click', () => this.hide()); dropZone.addEventListener('dragover', (e) => { e.preventDefault(); dropZone.classList.add('drag-over'); }); dropZone.addEventListener('dragleave', () => { dropZone.classList.remove('drag-over'); }); dropZone.addEventListener('drop', (e) => { e.preventDefault(); dropZone.classList.remove('drag-over'); this.handleFiles(e.dataTransfer.files); }); } handleEscape(e) { if (e.key === 'Escape') { const modal = this.querySelector('#upload-modal'); if (modal.style.display === 'flex') { this.hide(); } } } show() { this.querySelector('#upload-modal').style.display = 'flex'; document.addEventListener('keydown', this.handleEscape); } hide() { this.querySelector('#upload-modal').style.display = 'none'; this.querySelector('#upload-list').innerHTML = ''; document.removeEventListener('keydown', this.handleEscape); } async handleFiles(files) { const uploadList = this.querySelector('#upload-list'); for (const file of files) { const itemId = `upload-${Date.now()}-${Math.random()}`; const item = document.createElement('div'); item.className = 'upload-item'; item.id = itemId; item.innerHTML = `