Files
kovakemlak-crm/src/app/(dashboard)/layout.tsx
T

58 lines
1.8 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { redirect } from "next/navigation";
import { Query } from "node-appwrite";
import { getActiveContext } from "@/lib/appwrite/active-context";
import { getLogoUrl } from "@/lib/appwrite/storage";
import { createAdminClient, createSessionClient } from "@/lib/appwrite/server";
import { DATABASE_ID, TABLES } from "@/lib/appwrite/schema";
import type { ThemePrefs } from "@/lib/appwrite/theme-prefs-actions";
import { DashboardShell } from "./dashboard-shell";
export default async function DashboardLayout({
children,
}: {
children: React.ReactNode;
}) {
const ctx = await getActiveContext();
if (!ctx) redirect("/onboarding");
let pendingMatchCount = 0;
try {
const { tablesDB } = createAdminClient();
const res = await tablesDB.listRows({
databaseId: DATABASE_ID,
tableId: TABLES.propertyMatches,
queries: [Query.equal("tenantId", ctx.tenantId), Query.equal("notified", false), Query.limit(1)],
});
pendingMatchCount = res.total;
} catch { /* non-critical */ }
let themePrefs: ThemePrefs = {};
try {
const { account } = await createSessionClient();
const raw = await account.getPrefs<ThemePrefs>();
// getPrefs returns an Appwrite prototype object — serialize to plain object
// so Next.js can pass it from Server → Client Component
themePrefs = JSON.parse(JSON.stringify(raw)) as ThemePrefs;
} catch {
// use defaults if prefs unavailable
}
const company = {
id: ctx.tenantId,
name: ctx.settings?.officeName ?? "Çalışma alanı",
logoUrl: getLogoUrl(ctx.settings?.logo) ?? null,
};
const user = {
id: ctx.user.id,
name: ctx.user.name || ctx.user.email,
email: ctx.user.email,
};
return (
<DashboardShell user={user} company={company} initialPrefs={themePrefs} pendingMatchCount={pendingMatchCount}>
{children}
</DashboardShell>
);
}