Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 2 additions & 19 deletions src/hooks/useCardSettings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,36 +10,19 @@ import {
import type { CardLayout, CardBlockId } from "@/lib/types";

export function useCardSettings(mounted: boolean) {
const [isHydrated, setIsHydrated] = useState(false);
const [layout, setLayout] = useState<CardLayout>(() => loadCardSettings().layout);
const [displayOptions, setDisplayOptions] = useState<CardDisplayOptions>(
() => loadCardSettings().options,
);

// Initialize state from storage on mount
useEffect(() => {
if (!mounted || isHydrated) {
return;
}

const { layout: storedLayout, options: storedOptions } = loadCardSettings();

// eslint-disable-next-line react-hooks/set-state-in-effect
setLayout((prev) => JSON.stringify(prev) !== JSON.stringify(storedLayout) ? storedLayout : prev);
// eslint-disable-next-line react-hooks/set-state-in-effect
setDisplayOptions((prev) => JSON.stringify(prev) !== JSON.stringify(storedOptions) ? storedOptions : prev);

setIsHydrated(true);
}, [mounted, isHydrated]);

// Persist changes to storage
useEffect(() => {
if (!mounted || !isHydrated) {
if (!mounted) {
return;
}

saveCardSettings(layout, displayOptions);
}, [layout, displayOptions, mounted, isHydrated]);
}, [layout, displayOptions, mounted]);
Comment on lines 19 to +25

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 SSR初期値が保存設定を上書き

保存済み設定がある状態で CardGeneratorModal がサーバーレンダリングされると、loadCardSettings()window がないためデフォルト値を state に保持します。クライアントで mounted が true になった際、この effect は localStorage を再読込せずデフォルト値を保存するため、ユーザーのレイアウトと表示オプションが失われます。

Knowledge Base Used: Dashboard flow

Prompt To Fix With AI
This is a comment left during a code review.
Path: src/hooks/useCardSettings.ts
Line: 19-25

Comment:
**SSR初期値が保存設定を上書き**

保存済み設定がある状態で `CardGeneratorModal` がサーバーレンダリングされると、`loadCardSettings()``window` がないためデフォルト値を state に保持します。クライアントで `mounted` が true になった際、この effect は `localStorage` を再読込せずデフォルト値を保存するため、ユーザーのレイアウトと表示オプションが失われます。

**Knowledge Base Used:** [Dashboard flow](https://app.greptile.com/hiroki-org/-/custom-context/knowledge-base/hiroki-org/github-user-summary/-/docs/dashboard.md)

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.


const toggleMainBlockVisibility = useCallback((blockId: CardBlockId) => {
setLayout((prev) => toggleBlockVisibility(prev, blockId));
Expand Down
Loading