/
githubmirror
/
ydb-embedded-ui
Обзор
Документация
Войти
/
githubmirror
/
ydb-embedded-ui
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
main
src/utils/hooks/useTableResize.ts
53 строки
1 KB
Артём Муфазалов
refactor: remove debounce from useSetting, add useTableResize (#3095)
18 ноя 2025, 11:37
Не верифицирован
18 ноя 2025, 11:37
d85e8d3
Код
Авторство
О чём код?
import React from 'react'; import type {ColumnWidthByName, HandleResize} from '@gravity-ui/react-data-table'; import {debounce} from 'lodash'; import {useSetting} from '../../store/reducers/settings/useSetting'; export const useTableResize = ( localStorageKey?: string, ): [ColumnWidthByName, HandleResize, boolean] => { const { value: sizes, saveValue: saveSizes, isLoading, } = useSetting<ColumnWidthByName>(localStorageKey); const debouncedSaveSizes = React.useMemo( () => debounce((newSizes: ColumnWidthByName) => { saveSizes(newSizes); }, 300), [saveSizes], ); // Call debounced func on component unmount React.useEffect(() => { return () => debouncedSaveSizes.flush(); }, [debouncedSaveSizes]); const [actualSizes, setActualSizes] = React.useState(() => { return sizes ?? ({} as ColumnWidthByName); }); React.useEffect(() => { setActualSizes(sizes ?? {}); }, [sizes]); const handleSetupChange: HandleResize = React.useCallback( (columnId, columnWidth) => { setActualSizes((previousSetup) => { const setup = { ...previousSetup, [columnId]: columnWidth, }; debouncedSaveSizes(setup); return setup; }); }, [debouncedSaveSizes], ); return [actualSizes, handleSetupChange, isLoading]; };