states.ts 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { createContextState } from "foxact/create-context-state";
  2. import { useLocalStorage } from "foxact/use-local-storage";
  3. const [ThemeModeProvider, useThemeMode, useSetThemeMode] = createContextState<
  4. "light" | "dark"
  5. >("light");
  6. const [LogDataProvider, useLogData, useSetLogData] = createContextState<
  7. ILogItem[]
  8. >([]);
  9. export const useEnableLog = () => useLocalStorage("enable-log", true);
  10. interface IConnectionSetting {
  11. layout: "table" | "list";
  12. }
  13. export const defaultConnectionSetting: IConnectionSetting = { layout: "table" };
  14. export const useConnectionSetting = () =>
  15. useLocalStorage<IConnectionSetting>(
  16. "connections-setting",
  17. defaultConnectionSetting,
  18. {
  19. serializer: JSON.stringify,
  20. deserializer: JSON.parse,
  21. }
  22. );
  23. // save the state of each profile item loading
  24. const [LoadingCacheProvider, useLoadingCache, useSetLoadingCache] =
  25. createContextState<Record<string, boolean>>({});
  26. // save update state
  27. const [UpdateStateProvider, useUpdateState, useSetUpdateState] =
  28. createContextState<boolean>(false);
  29. export {
  30. ThemeModeProvider,
  31. useThemeMode,
  32. useSetThemeMode,
  33. LogDataProvider,
  34. useLogData,
  35. useSetLogData,
  36. LoadingCacheProvider,
  37. useLoadingCache,
  38. useSetLoadingCache,
  39. UpdateStateProvider,
  40. useUpdateState,
  41. useSetUpdateState,
  42. };