Yuki Takei 7 месяцев назад
Родитель
Сommit
4890a4b671

+ 5 - 2
apps/app/src/pages/[[...path]].page.tsx

@@ -31,6 +31,7 @@ import {
   useDisableLinkSharing,
   useRendererConfig,
 } from '~/states/server-configurations';
+import { useHydrateServerConfigurationAtoms } from '~/states/server-configurations/hydrate';
 import {
   useIsSharedUser,
   useIsSearchPage,
@@ -231,9 +232,11 @@ type LayoutProps = Props & {
 
 const Layout = ({ children, ...props }: LayoutProps): JSX.Element => {
   // Hydrate sidebar atoms with server-side data - must be called unconditionally
-  const sidebarConfig = isInitialProps(props) ? props.sidebarConfig : undefined;
-  const userUISettings = isInitialProps(props) ? props.userUISettings : undefined;
+  const initialProps = isInitialProps(props) ? props : undefined;
+  const sidebarConfig = initialProps?.sidebarConfig;
+  const userUISettings = initialProps?.userUISettings;
   useHydrateSidebarAtoms(sidebarConfig, userUISettings);
+  useHydrateServerConfigurationAtoms(initialProps);
 
   return <BasicLayoutWithEditor>{children}</BasicLayoutWithEditor>;
 };

+ 10 - 8
apps/app/src/states/hydrate/sidebar.ts

@@ -17,14 +17,16 @@ import {
  * @param userUISettings - User's UI settings from database (optional)
  */
 export const useHydrateSidebarAtoms = (sidebarConfig?: ISidebarConfig, userUISettings?: IUserUISettings): void => {
-  useHydrateAtoms([
-    // Use user preference from DB if available, otherwise use system default
-    [preferCollapsedModeAtom, userUISettings?.preferCollapsedModeByUser ?? sidebarConfig?.isSidebarCollapsedMode ?? false],
+  useHydrateAtoms(sidebarConfig == null || userUISettings == null
+    ? []
+    : [
+      // Use user preference from DB if available, otherwise use system default
+      [preferCollapsedModeAtom, userUISettings?.preferCollapsedModeByUser ?? sidebarConfig?.isSidebarCollapsedMode ?? false],
 
-    // Sidebar contents type (with default fallback)
-    [currentSidebarContentsAtom, userUISettings?.currentSidebarContents ?? SidebarContentsType.TREE],
+      // Sidebar contents type (with default fallback)
+      [currentSidebarContentsAtom, userUISettings?.currentSidebarContents ?? SidebarContentsType.TREE],
 
-    // Product navigation width (with default fallback)
-    [currentProductNavWidthAtom, userUISettings?.currentProductNavWidth ?? 320],
-  ]);
+      // Product navigation width (with default fallback)
+      [currentProductNavWidthAtom, userUISettings?.currentProductNavWidth ?? 320],
+    ]);
 };

+ 2 - 2
apps/app/src/states/server-configurations/hydrate.ts

@@ -67,9 +67,9 @@ export type ServerConfigurationInitialProps = {
  *
  * @param serverConfigProps - Server-side server configuration properties
  */
-export const useHydrateServerConfigurationAtoms = (serverConfigProps: ServerConfigurationInitialProps): void => {
+export const useHydrateServerConfigurationAtoms = (serverConfigProps: ServerConfigurationInitialProps | undefined): void => {
   // Hydrate server configuration atoms with server-side data
-  useHydrateAtoms([
+  useHydrateAtoms(serverConfigProps == null ? [] : [
     [aiEnabledAtom, serverConfigProps.aiEnabled],
     [limitLearnablePageCountPerAssistantAtom, serverConfigProps.limitLearnablePageCountPerAssistant],
     [isUsersHomepageDeletionEnabledAtom, serverConfigProps.isUsersHomepageDeletionEnabled],