Skip to content

Commit 7348ec8

Browse files
committed
wip
1 parent 77aa7fc commit 7348ec8

File tree

3 files changed

+37
-23
lines changed

3 files changed

+37
-23
lines changed

packages/fern-docs/components/src/sidebar/nodes/SidebarRootNodeImpl.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ export function SidebarRootNodeImpl({
2626
const forceClientRender = renderOptions?.forceClientRender ?? false;
2727
const wrapSectionNode = renderOptions?.wrapSectionNode;
2828
const wrapPageNode = renderOptions?.wrapPageNode;
29+
const currentVariantId = renderOptions?.currentVariantId;
2930

3031
const node = withPrunedNavigation(root, {
3132
visibleNodeIds: visibleNodeIds,
@@ -81,7 +82,7 @@ export function SidebarRootNodeImpl({
8182
<li key={child.id}>
8283
<SidebarRootChild
8384
node={child}
84-
renderOptions={{ forceClientRender, wrapSectionNode, wrapPageNode }}
85+
renderOptions={{ forceClientRender, wrapSectionNode, wrapPageNode, currentVariantId }}
8586
/>
8687
</li>
8788
))}

packages/fern-docs/components/src/sidebar/nodes/SidebarVariantedNode.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,7 @@ export function SidebarVariantedNode({ node, depth, renderOptions }: SidebarVari
2525
const forceClientRender = renderOptions.forceClientRender ?? false;
2626
const clientVariantId = useCurrentVariantId();
2727

28-
// Use server-side variant ID if available (from renderOptions), otherwise fall back to client state
29-
// This prevents hydration mismatches where the default variant flashes before the correct one loads
28+
// Use server-side variant ID from renderOptions for SSR, fall back to client state after hydration
3029
const currentVariantId = renderOptions.currentVariantId ?? clientVariantId;
3130

3231
// Find the current variant or default to the one marked as default

packages/fern-docs/components/src/state/navigation.tsx

Lines changed: 34 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import type { FernNavigation } from "@fern-api/fdr-sdk";
44
import { useIsomorphicLayoutEffect, useLazyRef } from "@fern-ui/react-commons";
5-
import { atom, useAtomValue } from "jotai";
5+
import { atom, useAtomValue, useSetAtom } from "jotai";
66
import { useHydrateAtoms } from "jotai/utils";
77
import React from "react";
88
import { create, type StoreApi, type UseBoundStore } from "zustand";
@@ -137,25 +137,39 @@ export function SetCurrentNavigationNode({
137137
}) {
138138
const useStore = React.useContext(RootNodeStoreContext);
139139
const dispatch = useStore((s) => s.dispatch);
140-
141-
// Hydrate atoms with initial values during SSR to prevent hydration mismatches
142-
useHydrateAtoms(
143-
[
144-
[currentSidebarRootNodeIdAtom, sidebarRootNodeId],
145-
[currentNodeIdAtom, nodeId],
146-
[currentTabIdAtom, tabId],
147-
[currentProductIdAtom, productId],
148-
[currentProductSlugAtom, productSlug],
149-
[currentVersionIdAtom, versionId],
150-
[currentVersionSlugAtom, versionSlug],
151-
[currentVariantIdAtom, variantId],
152-
[currentVersionIsDefaultAtom, versionIsDefault ?? false],
153-
[currentProductIsDefaultAtom, productIsDefault ?? false]
154-
],
155-
{
156-
dangerouslyForceHydrate: true
157-
}
158-
);
140+
const setCurrentSidebarRootNodeId = useSetAtom(currentSidebarRootNodeIdAtom);
141+
const setCurrentNodeId = useSetAtom(currentNodeIdAtom);
142+
const setCurrentTabId = useSetAtom(currentTabIdAtom);
143+
const setCurrentProductId = useSetAtom(currentProductIdAtom);
144+
const setCurrentProductSlug = useSetAtom(currentProductSlugAtom);
145+
const setCurrentVersionId = useSetAtom(currentVersionIdAtom);
146+
const setCurrentVersionSlug = useSetAtom(currentVersionSlugAtom);
147+
const setCurrentVariantId = useSetAtom(currentVariantIdAtom);
148+
const setCurrentVersionIsDefault = useSetAtom(currentVersionIsDefaultAtom);
149+
const setCurrentProductIsDefault = useSetAtom(currentProductIsDefaultAtom);
150+
useIsomorphicLayoutEffect(() => {
151+
setCurrentSidebarRootNodeId(sidebarRootNodeId);
152+
setCurrentNodeId(nodeId);
153+
setCurrentProductId(productId);
154+
setCurrentProductSlug(productSlug);
155+
setCurrentTabId(tabId);
156+
setCurrentVersionId(versionId);
157+
setCurrentVersionSlug(versionSlug);
158+
setCurrentVariantId(variantId);
159+
setCurrentVersionIsDefault(versionIsDefault ?? false);
160+
setCurrentProductIsDefault(productIsDefault ?? false);
161+
}, [
162+
nodeId,
163+
tabId,
164+
sidebarRootNodeId,
165+
productId,
166+
productSlug,
167+
versionId,
168+
versionSlug,
169+
variantId,
170+
versionIsDefault,
171+
productIsDefault
172+
]);
159173

160174
useIsomorphicLayoutEffect(() => {
161175
if (nodeId && sidebarRootNodeId) {

0 commit comments

Comments
 (0)