/
grigoriygrisha
/
excel-loader
Обзор
Документация
Войти
/
grigoriygrisha
/
excel-loader
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
src/react/useExcelLoader.ts
69 строк
2 KB
grigoriy-grisha
first_commit
26 июл 2026, 21:46
26 июл 2026, 21:46
6cc93a5
Код
Авторство
О чём код?
import { useCallback, useEffect, useRef, useState } from 'react' import { createExcelLoader, type ExcelLoader, } from '../core/ExcelLoader.js' import type { ColumnMeta, FileFormat, LoadResult, } from '../core/types.js' export interface UseExcelLoaderState { loading: boolean result: LoadResult | null error: Error | null } export function useExcelLoader(): { state: UseExcelLoaderState loader: ExcelLoader loadFile: (file: File, formatHint?: FileFormat) => Promise<LoadResult | null> clear: () => Promise<void> } { const loaderRef = useRef<ExcelLoader | null>(null) if (loaderRef.current === null) { loaderRef.current = createExcelLoader() } const loader = loaderRef.current const [state, setState] = useState<UseExcelLoaderState>({ loading: false, result: null, error: null, }) const loadFile = useCallback( async (file: File, formatHint?: FileFormat): Promise<LoadResult | null> => { setState({ loading: true, result: null, error: null }) try { const result = await loader.loadFile(file, formatHint) setState({ loading: false, result, error: null }) return result } catch (error) { setState({ loading: false, result: null, error: error instanceof Error ? error : new Error(String(error)), }) return null } }, [loader], ) const clear = useCallback(async () => { await loader.clear() setState({ loading: false, result: null, error: null }) }, [loader]) useEffect(() => { return () => { loader.dispose() } }, [loader]) return { state, loader, loadFile, clear } } export type { ColumnMeta }