Skip to content

Commit a792ebb

Browse files
committed
fix(webapp): fallback dashboard preferences get a fresh object per caller
A shallow copy shared the inner projects container between every user without saved preferences on the process.
1 parent ccfa2fe commit a792ebb

1 file changed

Lines changed: 10 additions & 6 deletions

File tree

apps/webapp/app/utils/dashboardPreferences.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,24 +64,28 @@ const DashboardPreferences = z.object({
6464

6565
export type DashboardPreferences = z.infer<typeof DashboardPreferences>;
6666

67-
const DEFAULT_PREFERENCES: DashboardPreferences = {
68-
version: "1",
69-
projects: {},
70-
};
67+
/* A function, not a shared constant: the writers mutate through these objects,
68+
so each caller needs its own container */
69+
function defaultPreferences(): DashboardPreferences {
70+
return {
71+
version: "1",
72+
projects: {},
73+
};
74+
}
7175

7276
/** Parses the stored JSON, falling back to defaults on missing or invalid data. */
7377
export function parseDashboardPreferences(
7478
data?: any | null,
7579
onError?: (error: z.ZodError) => void
7680
): DashboardPreferences {
7781
if (!data) {
78-
return { ...DEFAULT_PREFERENCES };
82+
return defaultPreferences();
7983
}
8084

8185
const result = DashboardPreferences.safeParse(data);
8286
if (!result.success) {
8387
onError?.(result.error);
84-
return { ...DEFAULT_PREFERENCES };
88+
return defaultPreferences();
8589
}
8690

8791
return result.data;

0 commit comments

Comments
 (0)