/** * Admin Import JavaScript * Handles CSV file import functionality */ class ImportManager { constructor() { this.supportedTables = []; this.batchFileCount = 0; this.currentImportId = null; this.pollInterval = null; this.bulkFiles = []; this.init(); } async init() { await this.loadSupportedTables(); await this.loadImportStatus(); this.setupEventListeners(); } async loadSupportedTables() { try { console.log('Loading supported tables...'); const response = await window.http.wrappedFetch('/api/admin/import/tables'); if (response.ok) { const data = await response.json(); this.supportedTables = data.tables || []; console.log('Supported tables loaded:', this.supportedTables); } else { console.error('Failed to load supported tables, status:', response.status); } } catch (error) { console.error('Failed to load supported tables:', error); window.alerts.error('Failed to load supported tables'); } } setupEventListeners() { // Single import form document.getElementById('importForm').addEventListener('submit', (e) => { e.preventDefault(); this.handleSingleImport(); }); // Validate button document.getElementById('validateBtn').addEventListener('click', () => { this.validateHeaders(); }); // Table selection change document.getElementById('tableSelect').addEventListener('change', (e) => { this.onTableChange(e.target.value); }); // Bulk file upload document.getElementById('bulkFiles').addEventListener('change', (e) => { this.handleBulkFileSelection(e); }); document.getElementById('autoMapBtn').addEventListener('click', () => { this.autoMapTables(); }); document.getElementById('clearAllBtn').addEventListener('click', () => { this.clearAllFiles(); }); document.getElementById('bulkUploadBtn').addEventListener('click', () => { this.handleBulkUpload(); }); // Status refresh button document.getElementById('refreshStatusBtn').addEventListener('click', () => { this.loadImportStatus(); }); } async onTableChange(tableName) { const schemaInfo = document.getElementById('schemaInfo'); const schemaDetails = document.getElementById('schemaDetails'); if (!tableName) { schemaInfo.classList.add('hidden'); return; } try { console.log('Loading schema for table:', tableName); const response = await window.http.wrappedFetch(`/api/admin/import/tables/${tableName}/schema`); if (response.ok) { const data = await response.json(); const schema = data.schema; console.log('Schema loaded for', tableName, ':', schema); let html = '
${field}${field}`;
});
html += '${sizeKB} KB