user-ui-settings.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. // eslint-disable-next-line no-restricted-imports
  2. import { AxiosResponse } from 'axios';
  3. import { debounce } from 'throttle-debounce';
  4. import { apiv3Put } from '~/client/util/apiv3-client';
  5. import { IUserUISettings } from '~/interfaces/user-ui-settings';
  6. let settingsForBulk: Partial<IUserUISettings> = {};
  7. const _putUserUISettingsInBulk = (): Promise<AxiosResponse<IUserUISettings>> => {
  8. const result = apiv3Put<IUserUISettings>('/user-ui-settings', { settings: settingsForBulk });
  9. // clear partial
  10. settingsForBulk = {};
  11. return result;
  12. };
  13. const _putUserUISettingsInBulkDebounced = debounce(1500, _putUserUISettingsInBulk);
  14. type ScheduleToPutFunction = (settings: Partial<IUserUISettings>) => Promise<AxiosResponse<IUserUISettings>>;
  15. const scheduleToPut: ScheduleToPutFunction = (settings: Partial<IUserUISettings>): Promise<AxiosResponse<IUserUISettings>> => {
  16. settingsForBulk = {
  17. ...settingsForBulk,
  18. ...settings,
  19. };
  20. return _putUserUISettingsInBulkDebounced();
  21. };
  22. type UserUISettingsUtil = {
  23. scheduleToPut: ScheduleToPutFunction | (() => void),
  24. }
  25. export const useUserUISettings = (): UserUISettingsUtil => {
  26. return {
  27. scheduleToPut,
  28. };
  29. };