hydrate.ts 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. import { useHydrateAtoms } from 'jotai/utils';
  2. import {
  3. isSearchScopeChildrenAsDefaultAtom,
  4. isSearchServiceConfiguredAtom,
  5. isSearchServiceReachableAtom,
  6. } from '~/states/server-configurations';
  7. import { useHydrateSidebarAtoms } from '~/states/ui/sidebar/hydrate';
  8. import { createAtomTuple } from '~/utils/jotai-utils';
  9. import type {
  10. SearchConfigurationProps,
  11. SidebarConfigurationProps,
  12. UserUISettingsProps,
  13. } from './types';
  14. /**
  15. * Hook for hydrating server configuration atoms with server-side data
  16. * This should be called early in the app component to ensure atoms are properly initialized before rendering
  17. */
  18. export const useHydrateBasicLayoutConfigurationAtoms = (
  19. searchConfig: SearchConfigurationProps['searchConfig'] | undefined,
  20. sidebarConfig: SidebarConfigurationProps['sidebarConfig'] | undefined,
  21. userUISettings: UserUISettingsProps['userUISettings'] | undefined,
  22. ): void => {
  23. const tuples =
  24. searchConfig == null
  25. ? []
  26. : [
  27. createAtomTuple(
  28. isSearchServiceConfiguredAtom,
  29. searchConfig.isSearchServiceConfigured,
  30. ),
  31. createAtomTuple(
  32. isSearchServiceReachableAtom,
  33. searchConfig.isSearchServiceReachable,
  34. ),
  35. createAtomTuple(
  36. isSearchScopeChildrenAsDefaultAtom,
  37. searchConfig.isSearchScopeChildrenAsDefault,
  38. ),
  39. ];
  40. useHydrateAtoms(tuples);
  41. useHydrateSidebarAtoms(sidebarConfig, userUISettings);
  42. };