Skip to content

Commit d85e8d3

Browse files
refactor: remove debounce from useSetting, add useTableResize (#3095)
1 parent 96ceae4 commit d85e8d3

File tree

2 files changed

+24
-31
lines changed

2 files changed

+24
-31
lines changed

src/store/reducers/settings/useSetting.ts

Lines changed: 7 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
import React from 'react';
22

33
import {skipToken} from '@reduxjs/toolkit/query';
4-
import {debounce} from 'lodash';
54

6-
import type {SetSingleSettingParams} from '../../../types/api/settings';
75
import {uiFactory} from '../../../uiFactory/uiFactory';
86
import {useTypedDispatch} from '../../../utils/hooks/useTypedDispatch';
97
import {useTypedSelector} from '../../../utils/hooks/useTypedSelector';
@@ -22,15 +20,11 @@ import {
2220

2321
type SaveSettingValue<T> = (value: T | undefined) => void;
2422

25-
interface UseSettingOptions {
26-
/** Time before setting will be set */
27-
debounceTime?: number;
28-
}
29-
30-
export function useSetting<T>(
31-
name?: string,
32-
{debounceTime = 0}: UseSettingOptions = {},
33-
): {value: T | undefined; saveValue: SaveSettingValue<T>; isLoading: boolean} {
23+
export function useSetting<T>(name?: string): {
24+
value: T | undefined;
25+
saveValue: SaveSettingValue<T>;
26+
isLoading: boolean;
27+
} {
3428
const dispatch = useTypedDispatch();
3529

3630
const preventSyncWithLS = Boolean(name && SETTINGS_OPTIONS[name]?.preventSyncWithLS);
@@ -80,23 +74,10 @@ export function useSetting<T>(
8074
}
8175
}, [shouldUseMetaSettings, shouldUseOnlyExternalSettings, metaSetting, name, dispatch]);
8276

83-
const debouncedSetMetaSetting = React.useMemo(
84-
() =>
85-
debounce((params: SetSingleSettingParams) => {
86-
setMetaSetting(params);
87-
}, debounceTime),
88-
[debounceTime, setMetaSetting],
89-
);
90-
91-
// Call debounced func on component unmount
92-
React.useEffect(() => {
93-
return () => debouncedSetMetaSetting.flush();
94-
}, [debouncedSetMetaSetting]);
95-
9677
const saveValue = React.useCallback<SaveSettingValue<T>>(
9778
(value) => {
9879
if (shouldUseMetaSettings) {
99-
debouncedSetMetaSetting({
80+
setMetaSetting({
10081
user,
10182
name: name,
10283
value: stringifySettingValue(value),
@@ -107,7 +88,7 @@ export function useSetting<T>(
10788
setSettingValueToLS(name, value);
10889
}
10990
},
110-
[shouldUseMetaSettings, shouldUseOnlyExternalSettings, user, name, debouncedSetMetaSetting],
91+
[shouldUseMetaSettings, shouldUseOnlyExternalSettings, user, name, setMetaSetting],
11192
);
11293

11394
return {value: settingValue, saveValue, isLoading} as const;

src/utils/hooks/useTableResize.ts

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import React from 'react';
22

33
import type {ColumnWidthByName, HandleResize} from '@gravity-ui/react-data-table';
4+
import {debounce} from 'lodash';
45

56
import {useSetting} from '../../store/reducers/settings/useSetting';
67

@@ -11,9 +12,20 @@ export const useTableResize = (
1112
value: sizes,
1213
saveValue: saveSizes,
1314
isLoading,
14-
} = useSetting<ColumnWidthByName>(localStorageKey, {
15-
debounceTime: 300,
16-
});
15+
} = useSetting<ColumnWidthByName>(localStorageKey);
16+
17+
const debouncedSaveSizes = React.useMemo(
18+
() =>
19+
debounce((newSizes: ColumnWidthByName) => {
20+
saveSizes(newSizes);
21+
}, 300),
22+
[saveSizes],
23+
);
24+
25+
// Call debounced func on component unmount
26+
React.useEffect(() => {
27+
return () => debouncedSaveSizes.flush();
28+
}, [debouncedSaveSizes]);
1729

1830
const [actualSizes, setActualSizes] = React.useState(() => {
1931
return sizes ?? ({} as ColumnWidthByName);
@@ -30,11 +42,11 @@ export const useTableResize = (
3042
...previousSetup,
3143
[columnId]: columnWidth,
3244
};
33-
saveSizes(setup);
45+
debouncedSaveSizes(setup);
3446
return setup;
3547
});
3648
},
37-
[saveSizes],
49+
[debouncedSaveSizes],
3850
);
3951

4052
return [actualSizes, handleSetupChange, isLoading];

0 commit comments

Comments
 (0)