hydrate.ts 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. import { useHydrateAtoms } from 'jotai/utils';
  2. import type { RendererConfig } from '~/interfaces/services/renderer';
  3. import {
  4. aiEnabledAtom,
  5. limitLearnablePageCountPerAssistantAtom,
  6. isUsersHomepageDeletionEnabledAtom,
  7. defaultIndentSizeAtom,
  8. isSearchScopeChildrenAsDefaultAtom,
  9. elasticsearchMaxBodyLengthToIndexAtom,
  10. isRomUserAllowedToCommentAtom,
  11. drawioUriAtom,
  12. isAllReplyShownAtom,
  13. showPageSideAuthorsAtom,
  14. isContainerFluidAtom,
  15. isEnabledStaleNotificationAtom,
  16. disableLinkSharingAtom,
  17. isIndentSizeForcedAtom,
  18. isEnabledAttachTitleHeaderAtom,
  19. isSearchServiceConfiguredAtom,
  20. isSearchServiceReachableAtom,
  21. isSlackConfiguredAtom,
  22. isAclEnabledAtom,
  23. isUploadAllFileAllowedAtom,
  24. isUploadEnabledAtom,
  25. isBulkExportPagesEnabledAtom,
  26. isPdfBulkExportEnabledAtom,
  27. isLocalAccountRegistrationEnabledAtom,
  28. rendererConfigAtom,
  29. } from './server-configurations';
  30. /**
  31. * Type for server configuration initial props
  32. */
  33. export type ServerConfigurationInitialProps = {
  34. aiEnabled: boolean;
  35. limitLearnablePageCountPerAssistant: number;
  36. isUsersHomepageDeletionEnabled: boolean;
  37. adminPreferredIndentSize: number;
  38. isSearchScopeChildrenAsDefault: boolean;
  39. elasticsearchMaxBodyLengthToIndex: number;
  40. isRomUserAllowedToComment: boolean;
  41. drawioUri: string | null;
  42. isAllReplyShown: boolean;
  43. showPageSideAuthors: boolean;
  44. isContainerFluid: boolean;
  45. isEnabledStaleNotification: boolean;
  46. disableLinkSharing: boolean;
  47. isIndentSizeForced: boolean;
  48. isEnabledAttachTitleHeader: boolean;
  49. isSearchServiceConfigured: boolean;
  50. isSearchServiceReachable: boolean;
  51. isSlackConfigured: boolean;
  52. isAclEnabled: boolean;
  53. isUploadAllFileAllowed: boolean;
  54. isUploadEnabled: boolean;
  55. isBulkExportPagesEnabled: boolean;
  56. isPdfBulkExportEnabled: boolean;
  57. isLocalAccountRegistrationEnabled: boolean;
  58. rendererConfig: RendererConfig;
  59. };
  60. /**
  61. * Hook for hydrating server configuration atoms with server-side data
  62. * This should be called early in the app component to ensure atoms are properly initialized before rendering
  63. *
  64. * @param serverConfigProps - Server-side server configuration properties
  65. */
  66. export const useHydrateServerConfigurationAtoms = (serverConfigProps: ServerConfigurationInitialProps | undefined): void => {
  67. // Hydrate server configuration atoms with server-side data
  68. useHydrateAtoms(serverConfigProps == null ? [] : [
  69. [aiEnabledAtom, serverConfigProps.aiEnabled],
  70. [limitLearnablePageCountPerAssistantAtom, serverConfigProps.limitLearnablePageCountPerAssistant],
  71. [isUsersHomepageDeletionEnabledAtom, serverConfigProps.isUsersHomepageDeletionEnabled],
  72. [defaultIndentSizeAtom, serverConfigProps.adminPreferredIndentSize],
  73. [isSearchScopeChildrenAsDefaultAtom, serverConfigProps.isSearchScopeChildrenAsDefault],
  74. [elasticsearchMaxBodyLengthToIndexAtom, serverConfigProps.elasticsearchMaxBodyLengthToIndex],
  75. [isRomUserAllowedToCommentAtom, serverConfigProps.isRomUserAllowedToComment],
  76. [drawioUriAtom, serverConfigProps.drawioUri],
  77. [isAllReplyShownAtom, serverConfigProps.isAllReplyShown],
  78. [showPageSideAuthorsAtom, serverConfigProps.showPageSideAuthors],
  79. [isContainerFluidAtom, serverConfigProps.isContainerFluid],
  80. [isEnabledStaleNotificationAtom, serverConfigProps.isEnabledStaleNotification],
  81. [disableLinkSharingAtom, serverConfigProps.disableLinkSharing],
  82. [isIndentSizeForcedAtom, serverConfigProps.isIndentSizeForced],
  83. [isEnabledAttachTitleHeaderAtom, serverConfigProps.isEnabledAttachTitleHeader],
  84. [isSearchServiceConfiguredAtom, serverConfigProps.isSearchServiceConfigured],
  85. [isSearchServiceReachableAtom, serverConfigProps.isSearchServiceReachable],
  86. [isSlackConfiguredAtom, serverConfigProps.isSlackConfigured],
  87. [isAclEnabledAtom, serverConfigProps.isAclEnabled],
  88. [isUploadAllFileAllowedAtom, serverConfigProps.isUploadAllFileAllowed],
  89. [isUploadEnabledAtom, serverConfigProps.isUploadEnabled],
  90. [isBulkExportPagesEnabledAtom, serverConfigProps.isBulkExportPagesEnabled],
  91. [isPdfBulkExportEnabledAtom, serverConfigProps.isPdfBulkExportEnabled],
  92. [isLocalAccountRegistrationEnabledAtom, serverConfigProps.isLocalAccountRegistrationEnabled],
  93. [rendererConfigAtom, serverConfigProps.rendererConfig],
  94. ]);
  95. };