/
Moss
/
Diplom
Обзор
Документация
Войти
/
Moss
/
Diplom
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
client/src/hooks/useLoading.ts
54 строки
1 KB
Kursovaya
lol
08 июн 2025, 18:06
08 июн 2025, 18:06
c28cde0
Код
Авторство
О чём код?
import { useState, useCallback } from 'react'; interface LoadingState { [key: string]: boolean; } interface UseLoadingResult { isLoading: (key?: string) => boolean; startLoading: (key?: string) => void; stopLoading: (key?: string) => void; withLoading: <T>(key: string, fn: () => Promise<T>) => Promise<T>; } export const useLoading = (defaultKey: string = 'default'): UseLoadingResult => { const [loadingState, setLoadingState] = useState<LoadingState>({}); const isLoading = useCallback( (key: string = defaultKey) => !!loadingState[key], [loadingState, defaultKey] ); const startLoading = useCallback( (key: string = defaultKey) => { setLoadingState((prev) => ({ ...prev, [key]: true })); }, [defaultKey] ); const stopLoading = useCallback( (key: string = defaultKey) => { setLoadingState((prev) => ({ ...prev, [key]: false })); }, [defaultKey] ); const withLoading = useCallback( async <T,>(key: string, fn: () => Promise<T>): Promise<T> => { try { startLoading(key); return await fn(); } finally { stopLoading(key); } }, [startLoading, stopLoading] ); return { isLoading, startLoading, stopLoading, withLoading, }; };