"use client"; import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import { DotsThree, Plus, PencilSimple, Trash, CheckCircle, List, CalendarDots, Users } from '@/lib/icons'; import { toast } from "sonner"; import { Button } from "@/components/ui/button"; import { Badge } from "@/components/ui/badge"; import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu"; import { completeActivityAction, deleteActivityAction, } from "@/lib/appwrite/activity-actions"; import { ActivityFormSheet } from "./activity-form-sheet"; import { ActivityCalendar } from "./activity-calendar"; import { ActivityTeamView } from "./activity-team-view"; import { SendSummaryDialog } from "./send-summary-dialog"; import { DeleteConfirmDialog } from "@/components/ui/delete-confirm-dialog"; import type { Activity, Customer, Property } from "@/lib/appwrite/schema"; import { ACTIVITY_TYPE_LABELS } from "@/lib/appwrite/schema"; import type { TenantRole } from "@/lib/appwrite/tenant-guard"; import type { TeamMember } from "./activity-form-sheet"; type ViewMode = "list" | "calendar" | "team"; interface ActivitiesClientProps { initialActivities: Activity[]; customers: Customer[]; properties: Property[]; role: TenantRole; members: TeamMember[]; currentUserId: string; } export function ActivitiesClient({ initialActivities, customers, properties, role, members, currentUserId, }: ActivitiesClientProps) { const router = useRouter(); const [activities, setActivities] = useState(initialActivities); const [sheetOpen, setSheetOpen] = useState(false); const [editing, setEditing] = useState(null); const [deleteTarget, setDeleteTarget] = useState(null); const [viewMode, setViewMode] = useState("list"); function customerName(id?: string | null) { if (!id) return "—"; return customers.find((c) => c.$id === id)?.name ?? "—"; } function propertyTitle(id?: string | null) { if (!id) return "—"; return properties.find((p) => p.$id === id)?.title ?? "—"; } useEffect(() => { const open = () => { setEditing(null); setSheetOpen(true); }; const close = () => setSheetOpen(false); window.addEventListener("kovak:open-form-activities", open); window.addEventListener("kovak:close-form-activities", close); return () => { window.removeEventListener("kovak:open-form-activities", open); window.removeEventListener("kovak:close-form-activities", close); }; }, []); function openCreate() { setEditing(null); setSheetOpen(true); } function openEdit(a: Activity) { setEditing(a); setSheetOpen(true); } async function handleComplete(a: Activity) { const result = await completeActivityAction(a.$id); if (result.ok) { setActivities((prev) => prev.map((x) => x.$id === a.$id ? { ...x, completedAt: new Date().toISOString() } : x), ); toast.success("Aktivite tamamlandı."); } else { toast.error(result.error ?? "Tamamlanamadı."); } } async function doDelete() { if (!deleteTarget) return; const result = await deleteActivityAction(deleteTarget.$id); if (result.ok) { setActivities((prev) => prev.filter((x) => x.$id !== deleteTarget.$id)); setDeleteTarget(null); toast.success("Aktivite silindi."); } else { toast.error(result.error ?? "Silinemedi."); } } return (

Aktiviteler

{/* View toggle */}
{(role === "owner" || role === "admin") && ( )}
{/* Calendar view */} {viewMode === "calendar" && ( )} {/* Team view — owner/admin only */} {viewMode === "team" && ( )} {/* List view */} {viewMode === "list" && (
Tip Başlık Müşteri İlan Tarih Durum {activities.length === 0 && ( Henüz aktivite yok. )} {activities.map((a) => ( {ACTIVITY_TYPE_LABELS[a.type] ?? a.type} {a.title} {customerName(a.customerId)} {propertyTitle(a.propertyId)} {a.dueDate ? new Date(a.dueDate).toLocaleDateString("tr-TR") : "—"} {a.completedAt ? ( Tamamlandı ) : ( Açık )} {!a.completedAt && ( handleComplete(a)}> Tamamla )} openEdit(a)}> Düzenle setDeleteTarget(a)} className="text-destructive focus:text-destructive" > Sil ))}
)} router.refresh()} /> { if (!v) setDeleteTarget(null); }} title="Bu aktivite silinsin mi?" description="Bu aktivite kalıcı olarak silinecek ve geri alınamaz." onConfirm={doDelete} />
); }