/
aaronair
/
Test_task_rt_solution
Обзор
Документация
Войти
/
aaronair
/
Test_task_rt_solution
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/components/ExportButton.tsx
52 строки
1 KB
Ilikedrinkpivo
first_commit
28 май 2026, 14:51
28 май 2026, 14:51
b4498fc
Код
Авторство
О чём код?
import { useState } from "react"; import { listAllInitiatives } from "@/features/initiatives/api"; import { sortInitiatives, type InitiativeFilters, type SortDirection, type SortKey, } from "@/features/initiatives/selectors"; import { exportInitiativesToXlsx } from "@/lib/excel"; interface Props { filters: InitiativeFilters; sortKey: SortKey; sortDirection: SortDirection; disabled?: boolean; } export function ExportButton({ filters, sortKey, sortDirection, disabled, }: Props) { const [exporting, setExporting] = useState(false); const handleExport = async () => { setExporting(true); try { const items = await listAllInitiatives(filters); const sorted = sortInitiatives(items, sortKey, sortDirection); exportInitiativesToXlsx( sorted, `ai-initiatives-${new Date().toISOString().slice(0, 10)}.xlsx`, ); } catch (e) { window.alert(e instanceof Error ? e.message : "Ошибка экспорта"); } finally { setExporting(false); } }; return ( <button type="button" className="btn-secondary" disabled={disabled || exporting} onClick={() => void handleExport()} > {exporting ? "Экспорт…" : "Экспорт .xlsx"} </button> ); }