"use client"; import { useState, useTransition } from "react"; import { LayoutGrid, Mail, Search, Table, Users } from "lucide-react"; import { toast } from "sonner"; import { resendParentInvite } from "../actions"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Input } from "@/components/ui/input"; import { Table as UITable, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table"; import { AddFamilyDialog } from "../add-family-dialog"; import { DutyManager } from "../duty-manager"; import { EditFamilyDialog } from "../edit-family-dialog"; import { InvitationStatus } from "../invitation-status"; import type { FamilyInvitationView } from "@/lib/family-invitation-view"; interface FamilyUser { id: string; firstName: string; lastName: string; email: string; emailVerifiedAt: Date | null; invitation: FamilyInvitationView; dutyAssignments: { id: string; dutyId: string; duty: { name: string; }; }[]; } interface FamilyChild { id: string; firstName: string; lastName: string; } interface FamilyData { id: string; name: string; users: FamilyUser[]; children: FamilyChild[]; } interface DutyData { id: string; name: string; assignments: { id: string; }[]; } interface FamiliesListClientProps { initialFamilies: FamilyData[]; allDuties: DutyData[]; canManageDuties: boolean; } export function FamiliesListClient({ initialFamilies, allDuties, canManageDuties, }: FamiliesListClientProps) { const [viewMode, setViewMode] = useState<"table" | "cards">("table"); const [searchQuery, setSearchQuery] = useState(""); const filteredFamilies = initialFamilies.filter((family) => { const q = searchQuery.toLowerCase().trim(); if (!q) return true; // Check family name if (family.name.toLowerCase().includes(q)) return true; // Check parents const matchesParent = family.users.some( (user) => user.firstName.toLowerCase().includes(q) || user.lastName.toLowerCase().includes(q) || user.email.toLowerCase().includes(q) ); if (matchesParent) return true; // Check children const matchesChild = family.children.some( (child) => child.firstName.toLowerCase().includes(q) || child.lastName.toLowerCase().includes(q) ); return matchesChild; }); const childCount = filteredFamilies.reduce( (acc, family) => acc + family.children.length, 0 ); const pendingInviteCount = filteredFamilies.reduce( (acc, family) => acc + family.users.filter((user) => !user.emailVerifiedAt).length, 0 ); return (

VERWALTUNG · FAMILIEN

Familien{" "} organisieren

Haushalte, Elternteile, Kinder und Ämter an einem ruhigen Ort pflegen.