/** * Утилиты для экспорта данных в CSV/TXT * Устраняют дублирование кода экспорта */ /** * Экспорт массива объектов в CSV * @param {Array} items - Массив данных * @param {Array} headers - Массив заголовков ['field1', 'field2'] * @param {string} filename - Имя файла */ export function exportToCSV(items, headers, filename) { const csvContent = [ headers, ...items.map(item => headers.map(h => item[h] || '')) ] .map(row => row.map(cell => `"${String(cell || '').replace(/"/g, '""')}"`).join(',')) .join('\n'); downloadFile(csvContent, filename, 'text/csv;charset=utf-8;'); } /** * Экспорт данных в текстовый файл * @param {string} content - Текстовое содержимое * @param {string} filename - Имя файла */ export function exportToText(content, filename) { downloadFile(content, filename, 'text/plain;charset=utf-8;'); } /** * Скачивание файла * @param {string} content - Содержимое * @param {string} filename - Имя файла * @param {string} mimeType - MIME тип */ function downloadFile(content, filename, mimeType) { const blob = new Blob([content], { type: mimeType }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = filename; a.click(); URL.revokeObjectURL(url); } /** * Генерация имени файла с датой * @param {string} prefix - Префикс имени файла * @param {string} extension - Расширение файла * @returns {string} Имя файла с датой */ export function generateFilename(prefix, extension = 'csv') { const date = new Date().toISOString().split('T')[0]; return `${prefix}_${date}.${extension}`; }