37679e83e6
- Next.js 16 + Appwrite multi-tenant emlak CRM - Database: kovakemlak-db (properties, customers, customer_searches, property_matches, presentations, investors, activities, tenant_settings) - Same stack as isletmem-kovakcrm (shadcn/ui template base) - Modules: portföy, müşteri takibi, arama kriterleri, otomatik eşleştirme, sunum linki, yatırımcı portalı
55 lines
1.6 KiB
TypeScript
55 lines
1.6 KiB
TypeScript
import type { Metadata } from "next";
|
||
import { redirect } from "next/navigation";
|
||
|
||
import { listCalendarEvents } from "@/lib/appwrite/calendar-queries";
|
||
import { listCustomers } from "@/lib/appwrite/customer-queries";
|
||
import { requireTenant } from "@/lib/appwrite/tenant-guard";
|
||
import { CalendarClient } from "./components/calendar-client";
|
||
|
||
export const metadata: Metadata = {
|
||
title: "İşletmem — Takvim",
|
||
};
|
||
|
||
export default async function CalendarPage() {
|
||
let ctx;
|
||
try {
|
||
ctx = await requireTenant();
|
||
} catch {
|
||
redirect("/onboarding");
|
||
}
|
||
|
||
const [events, customers] = await Promise.all([
|
||
listCalendarEvents(ctx.tenantId),
|
||
listCustomers(ctx.tenantId),
|
||
]);
|
||
|
||
const customerMap = new Map(customers.map((c) => [c.$id, c.name]));
|
||
|
||
return (
|
||
<div className="flex-1 space-y-6 px-6 pt-0">
|
||
<div className="flex flex-col gap-1">
|
||
<p className="text-muted-foreground text-sm">{ctx.settings?.companyName ?? "Çalışma alanı"}</p>
|
||
<h1 className="text-2xl font-bold tracking-tight">Takvim</h1>
|
||
<p className="text-muted-foreground text-sm">
|
||
Toplantılar, randevular ve önemli tarihler.
|
||
</p>
|
||
</div>
|
||
|
||
<CalendarClient
|
||
events={events.map((e) => ({
|
||
id: e.$id,
|
||
title: e.title,
|
||
description: e.description ?? "",
|
||
start: e.start,
|
||
end: e.end,
|
||
allDay: Boolean(e.allDay),
|
||
customerId: e.customerId ?? "",
|
||
customerName: e.customerId ? customerMap.get(e.customerId) ?? "" : "",
|
||
color: e.color ?? "",
|
||
}))}
|
||
customers={customers.map((c) => ({ id: c.$id, name: c.name }))}
|
||
/>
|
||
</div>
|
||
);
|
||
}
|