user-ui-settings.ts 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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. import { useIsGuestUser } from '~/stores/context';
  7. let settingsForBulk: Partial<IUserUISettings> = {};
  8. const _putUserUISettingsInBulk = (): Promise<AxiosResponse<IUserUISettings>> => {
  9. const result = apiv3Put<IUserUISettings>('/user-ui-settings', { settings: settingsForBulk });
  10. // clear partial
  11. settingsForBulk = {};
  12. return result;
  13. };
  14. const _putUserUISettingsInBulkDebounced = debounce(1500, false, _putUserUISettingsInBulk);
  15. type ScheduleToPutFunction = (settings: Partial<IUserUISettings>) => Promise<AxiosResponse<IUserUISettings>>;
  16. const scheduleToPut: ScheduleToPutFunction = (settings: Partial<IUserUISettings>): Promise<AxiosResponse<IUserUISettings>> => {
  17. settingsForBulk = {
  18. ...settingsForBulk,
  19. ...settings,
  20. };
  21. return _putUserUISettingsInBulkDebounced();
  22. };
  23. type UserUISettingsUtil = {
  24. scheduleToPut: ScheduleToPutFunction | (() => void),
  25. }
  26. export const useUserUISettings = (): UserUISettingsUtil => {
  27. const { data: isGuestUser } = useIsGuestUser();
  28. return {
  29. scheduleToPut: isGuestUser
  30. ? () => {}
  31. : scheduleToPut,
  32. };
  33. };