Просмотр исходного кода

fix type errors by useHydrateAtoms

Yuki Takei 2 месяцев назад
Родитель
Сommit
5d22e16478

+ 11 - 7
apps/app/src/pages/_search/use-hydrate-server-configurations.ts

@@ -6,6 +6,7 @@ import {
   rendererConfigAtom,
   showPageLimitationLAtom,
 } from '~/states/server-configurations';
+import { createAtomTuple } from '~/utils/jotai-utils';
 
 import type { ServerConfigurationProps } from './types';
 
@@ -17,14 +18,17 @@ export const useHydrateServerConfigurationAtoms = (
   serverConfig: ServerConfigurationProps['serverConfig'] | undefined,
   rendererConfigs: RendererConfig | undefined,
 ): void => {
-  // Hydrate server configuration atoms with server-side data
-  useHydrateAtoms(
+  const tuples =
     serverConfig == null || rendererConfigs == null
       ? []
       : [
-          [isContainerFluidAtom, serverConfig.isContainerFluid],
-          [showPageLimitationLAtom, serverConfig.showPageLimitationL],
-          [rendererConfigAtom, rendererConfigs],
-        ],
-  );
+          createAtomTuple(isContainerFluidAtom, serverConfig.isContainerFluid),
+          createAtomTuple(
+            showPageLimitationLAtom,
+            serverConfig.showPageLimitationL,
+          ),
+          createAtomTuple(rendererConfigAtom, rendererConfigs),
+        ];
+
+  useHydrateAtoms(tuples);
 };

+ 13 - 9
apps/app/src/pages/basic-layout-page/hydrate.ts

@@ -6,6 +6,7 @@ import {
   isSearchServiceReachableAtom,
 } from '~/states/server-configurations';
 import { useHydrateSidebarAtoms } from '~/states/ui/sidebar/hydrate';
+import { createAtomTuple } from '~/utils/jotai-utils';
 
 import type {
   SearchConfigurationProps,
@@ -22,22 +23,25 @@ export const useHydrateBasicLayoutConfigurationAtoms = (
   sidebarConfig: SidebarConfigurationProps['sidebarConfig'] | undefined,
   userUISettings: UserUISettingsProps['userUISettings'] | undefined,
 ): void => {
-  // Hydrate server configuration atoms with server-side data
-  useHydrateAtoms(
+  const tuples =
     searchConfig == null
       ? []
       : [
-          [
+          createAtomTuple(
             isSearchServiceConfiguredAtom,
             searchConfig.isSearchServiceConfigured,
-          ],
-          [isSearchServiceReachableAtom, searchConfig.isSearchServiceReachable],
-          [
+          ),
+          createAtomTuple(
+            isSearchServiceReachableAtom,
+            searchConfig.isSearchServiceReachable,
+          ),
+          createAtomTuple(
             isSearchScopeChildrenAsDefaultAtom,
             searchConfig.isSearchScopeChildrenAsDefault,
-          ],
-        ],
-  );
+          ),
+        ];
+
+  useHydrateAtoms(tuples);
 
   useHydrateSidebarAtoms(sidebarConfig, userUISettings);
 };

+ 5 - 4
apps/app/src/pages/forgot-password/use-hydrate-server-configurations.ts

@@ -1,6 +1,7 @@
 import { useHydrateAtoms } from 'jotai/utils';
 
 import { isMailerSetupAtom } from '~/states/server-configurations';
+import { createAtomTuple } from '~/utils/jotai-utils';
 
 import type { ServerConfigurationProps } from './types';
 
@@ -11,10 +12,10 @@ import type { ServerConfigurationProps } from './types';
 export const useHydrateServerConfigurationAtoms = (
   serverConfig: ServerConfigurationProps['serverConfig'] | undefined,
 ): void => {
-  // Hydrate server configuration atoms with server-side data
-  useHydrateAtoms(
+  const tuples =
     serverConfig == null
       ? []
-      : [[isMailerSetupAtom, serverConfig.isMailerSetup]],
-  );
+      : [createAtomTuple(isMailerSetupAtom, serverConfig.isMailerSetup)];
+
+  useHydrateAtoms(tuples);
 };

+ 58 - 33
apps/app/src/pages/general-page/hydrate.ts

@@ -25,6 +25,7 @@ import {
   rendererConfigAtom,
   showPageSideAuthorsAtom,
 } from '~/states/server-configurations';
+import { createAtomTuple } from '~/utils/jotai-utils';
 
 import type { ServerConfigurationProps } from './types';
 
@@ -36,54 +37,78 @@ export const useHydrateGeneralPageConfigurationAtoms = (
   serverConfig: ServerConfigurationProps['serverConfig'] | undefined,
   rendererConfigs: RendererConfig | undefined,
 ): void => {
-  // Hydrate server configuration atoms with server-side data
-  useHydrateAtoms(
+  const tuples =
     serverConfig == null || rendererConfigs == null
       ? []
       : [
-          [aiEnabledAtom, serverConfig.aiEnabled],
-          [
+          createAtomTuple(aiEnabledAtom, serverConfig.aiEnabled),
+          createAtomTuple(
             limitLearnablePageCountPerAssistantAtom,
             serverConfig.limitLearnablePageCountPerAssistant,
-          ],
-          [
+          ),
+          createAtomTuple(
             isUsersHomepageDeletionEnabledAtom,
             serverConfig.isUsersHomepageDeletionEnabled,
-          ],
-          [defaultIndentSizeAtom, serverConfig.adminPreferredIndentSize],
-          [
+          ),
+          createAtomTuple(
+            defaultIndentSizeAtom,
+            serverConfig.adminPreferredIndentSize,
+          ),
+          createAtomTuple(
             elasticsearchMaxBodyLengthToIndexAtom,
             serverConfig.elasticsearchMaxBodyLengthToIndex,
-          ],
-          [
+          ),
+          createAtomTuple(
             isRomUserAllowedToCommentAtom,
             serverConfig.isRomUserAllowedToComment,
-          ],
-          [drawioUriAtom, serverConfig.drawioUri],
-          [isAllReplyShownAtom, serverConfig.isAllReplyShown],
-          [showPageSideAuthorsAtom, serverConfig.showPageSideAuthors],
-          [isContainerFluidAtom, serverConfig.isContainerFluid],
-          [
+          ),
+          createAtomTuple(drawioUriAtom, serverConfig.drawioUri),
+          createAtomTuple(isAllReplyShownAtom, serverConfig.isAllReplyShown),
+          createAtomTuple(
+            showPageSideAuthorsAtom,
+            serverConfig.showPageSideAuthors,
+          ),
+          createAtomTuple(isContainerFluidAtom, serverConfig.isContainerFluid),
+          createAtomTuple(
             isEnabledStaleNotificationAtom,
             serverConfig.isEnabledStaleNotification,
-          ],
-          [disableLinkSharingAtom, serverConfig.disableLinkSharing],
-          [isIndentSizeForcedAtom, serverConfig.isIndentSizeForced],
-          [
+          ),
+          createAtomTuple(
+            disableLinkSharingAtom,
+            serverConfig.disableLinkSharing,
+          ),
+          createAtomTuple(
+            isIndentSizeForcedAtom,
+            serverConfig.isIndentSizeForced,
+          ),
+          createAtomTuple(
             isEnabledAttachTitleHeaderAtom,
             serverConfig.isEnabledAttachTitleHeader,
-          ],
-          [isSlackConfiguredAtom, serverConfig.isSlackConfigured],
-          [isAclEnabledAtom, serverConfig.isAclEnabled],
-          [isUploadAllFileAllowedAtom, serverConfig.isUploadAllFileAllowed],
-          [isUploadEnabledAtom, serverConfig.isUploadEnabled],
-          [isBulkExportPagesEnabledAtom, serverConfig.isBulkExportPagesEnabled],
-          [isPdfBulkExportEnabledAtom, serverConfig.isPdfBulkExportEnabled],
-          [
+          ),
+          createAtomTuple(
+            isSlackConfiguredAtom,
+            serverConfig.isSlackConfigured,
+          ),
+          createAtomTuple(isAclEnabledAtom, serverConfig.isAclEnabled),
+          createAtomTuple(
+            isUploadAllFileAllowedAtom,
+            serverConfig.isUploadAllFileAllowed,
+          ),
+          createAtomTuple(isUploadEnabledAtom, serverConfig.isUploadEnabled),
+          createAtomTuple(
+            isBulkExportPagesEnabledAtom,
+            serverConfig.isBulkExportPagesEnabled,
+          ),
+          createAtomTuple(
+            isPdfBulkExportEnabledAtom,
+            serverConfig.isPdfBulkExportEnabled,
+          ),
+          createAtomTuple(
             isLocalAccountRegistrationEnabledAtom,
             serverConfig.isLocalAccountRegistrationEnabled,
-          ],
-          [rendererConfigAtom, rendererConfigs],
-        ],
-  );
+          ),
+          createAtomTuple(rendererConfigAtom, rendererConfigs),
+        ];
+
+  useHydrateAtoms(tuples);
 };

+ 13 - 6
apps/app/src/pages/me/use-hydrate-server-configurations.ts

@@ -4,6 +4,7 @@ import {
   registrationWhitelistAtom,
   showPageLimitationXLAtom,
 } from '~/states/server-configurations';
+import { createAtomTuple } from '~/utils/jotai-utils';
 
 import type { ServerConfigurationProps } from './types';
 
@@ -14,13 +15,19 @@ import type { ServerConfigurationProps } from './types';
 export const useHydrateServerConfigurationAtoms = (
   serverConfig: ServerConfigurationProps['serverConfig'] | undefined,
 ): void => {
-  // Hydrate server configuration atoms with server-side data
-  useHydrateAtoms(
+  const tuples =
     serverConfig == null
       ? []
       : [
-          [showPageLimitationXLAtom, serverConfig.showPageLimitationXL],
-          [registrationWhitelistAtom, serverConfig.registrationWhitelist],
-        ],
-  );
+          createAtomTuple(
+            showPageLimitationXLAtom,
+            serverConfig.showPageLimitationXL,
+          ),
+          createAtomTuple(
+            registrationWhitelistAtom,
+            serverConfig.registrationWhitelist,
+          ),
+        ];
+
+  useHydrateAtoms(tuples);
 };

+ 10 - 4
apps/app/src/pages/trash/use-hydrate-server-configurations.ts

@@ -1,6 +1,7 @@
 import { useHydrateAtoms } from 'jotai/utils';
 
 import { showPageLimitationXLAtom } from '~/states/server-configurations';
+import { createAtomTuple } from '~/utils/jotai-utils';
 
 import type { ServerConfigurationProps } from './types';
 
@@ -11,10 +12,15 @@ import type { ServerConfigurationProps } from './types';
 export const useHydrateServerConfigurationAtoms = (
   serverConfig: ServerConfigurationProps['serverConfig'] | undefined,
 ): void => {
-  // Hydrate server configuration atoms with server-side data
-  useHydrateAtoms(
+  const tuples =
     serverConfig == null
       ? []
-      : [[showPageLimitationXLAtom, serverConfig.showPageLimitationXL]],
-  );
+      : [
+          createAtomTuple(
+            showPageLimitationXLAtom,
+            serverConfig.showPageLimitationXL,
+          ),
+        ];
+
+  useHydrateAtoms(tuples);
 };

+ 30 - 25
apps/app/src/states/global/hydrate.ts

@@ -1,6 +1,7 @@
 import { useHydrateAtoms } from 'jotai/utils';
 
 import type { CommonEachProps, CommonInitialProps } from '~/pages/common-props';
+import { createAtomTuple } from '~/utils/jotai-utils';
 
 import { _atomsForHydration } from './global';
 
@@ -29,29 +30,35 @@ const {
 export const useHydrateGlobalInitialAtoms = (
   commonInitialProps: CommonInitialProps | undefined,
 ): void => {
-  // Hydrate global atoms with server-side data
-  useHydrateAtoms(
+  const tuples =
     commonInitialProps == null
       ? []
       : [
-          [appTitleAtom, commonInitialProps.appTitle],
-          [siteUrlAtom, commonInitialProps.siteUrl],
-          [
+          createAtomTuple(appTitleAtom, commonInitialProps.appTitle),
+          createAtomTuple(siteUrlAtom, commonInitialProps.siteUrl),
+          createAtomTuple(
             siteUrlWithEmptyValueWarnAtom,
             commonInitialProps.siteUrlWithEmptyValueWarn,
-          ],
-          [confidentialAtom, commonInitialProps.confidential],
-          [growiVersionAtom, commonInitialProps.growiVersion],
-          [isDefaultLogoAtom, commonInitialProps.isDefaultLogo],
-          [customTitleTemplateAtom, commonInitialProps.customTitleTemplate],
-          [growiCloudUriAtom, commonInitialProps.growiCloudUri],
-          [
+          ),
+          createAtomTuple(confidentialAtom, commonInitialProps.confidential),
+          createAtomTuple(growiVersionAtom, commonInitialProps.growiVersion),
+          createAtomTuple(isDefaultLogoAtom, commonInitialProps.isDefaultLogo),
+          createAtomTuple(
+            customTitleTemplateAtom,
+            commonInitialProps.customTitleTemplate,
+          ),
+          createAtomTuple(growiCloudUriAtom, commonInitialProps.growiCloudUri),
+          createAtomTuple(
             growiAppIdForGrowiCloudAtom,
             commonInitialProps.growiAppIdForGrowiCloud,
-          ],
-          [forcedColorSchemeAtom, commonInitialProps.forcedColorScheme],
-        ],
-  );
+          ),
+          createAtomTuple(
+            forcedColorSchemeAtom,
+            commonInitialProps.forcedColorScheme,
+          ),
+        ];
+
+  useHydrateAtoms(tuples);
 };
 
 /**
@@ -62,13 +69,11 @@ export const useHydrateGlobalInitialAtoms = (
 export const useHydrateGlobalEachAtoms = (
   commonEachProps: CommonEachProps,
 ): void => {
-  // Hydrate global atoms with server-side data
-  useHydrateAtoms(
-    [
-      [currentPathnameAtom, commonEachProps.currentPathname],
-      [currentUserAtom, commonEachProps.currentUser],
-      [isMaintenanceModeAtom, commonEachProps.isMaintenanceMode],
-    ],
-    { dangerouslyForceHydrate: true },
-  );
+  const tuples = [
+    createAtomTuple(currentPathnameAtom, commonEachProps.currentPathname),
+    createAtomTuple(currentUserAtom, commonEachProps.currentUser),
+    createAtomTuple(isMaintenanceModeAtom, commonEachProps.isMaintenanceMode),
+  ];
+
+  useHydrateAtoms(tuples, { dangerouslyForceHydrate: true });
 };

+ 6 - 0
apps/app/src/utils/jotai-utils.ts

@@ -0,0 +1,6 @@
+import type { PrimitiveAtom } from 'jotai';
+
+export const createAtomTuple = <T>(
+  atom: PrimitiveAtom<T>,
+  value: T,
+): [PrimitiveAtom<T>, T] => [atom, value];