Files
kandev/apps/web/lib/layout/read-layout-defaults.ts
2026-06-18 18:36:48 +01:00

39 lines
1.3 KiB
TypeScript

import { readCookies } from "@/lib/server/cookies";
import type { Layout } from "react-resizable-panels";
export const readLayoutDefaults = async () => {
const cookieStore = await readCookies();
const defaults: Record<string, Layout> = {};
const cookieList =
typeof (cookieStore as { getAll?: () => { name: string; value: string }[] }).getAll ===
"function"
? (cookieStore as { getAll: () => { name: string; value: string }[] }).getAll()
: (() => {
const raw = cookieStore.toString?.() ?? "";
if (!raw) return [];
return raw
.split(";")
.map((entry) => entry.trim())
.filter(Boolean)
.map((entry) => {
const [name, ...rest] = entry.split("=");
return { name, value: rest.join("=") };
});
})();
for (const cookie of cookieList) {
if (!cookie.name.startsWith("layout:")) continue;
const id = decodeURIComponent(cookie.name.slice("layout:".length));
try {
const parsed = JSON.parse(decodeURIComponent(cookie.value));
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
defaults[id] = parsed as Layout;
}
} catch {
// Ignore malformed layout cookies.
}
}
return defaults;
};