"use client" import type React from "react" import { useState } from "react" import type { FamilyMember } from "@/types/family" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { CalendarIcon, User, Scroll, Users } from "lucide-react" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { ImageUpload } from "@/components/ui/image-upload" interface MemberFormProps { initialData?: Partial existingMembers?: FamilyMember[] onSubmit: (data: FamilyMember) => void onCancel: () => void } export function MemberForm({ initialData, existingMembers = [], onSubmit, onCancel }: MemberFormProps) { // Initialize state with default values or initialData const [formData, setFormData] = useState>({ id: initialData?.id || crypto.randomUUID(), surname: initialData?.surname || "李", givenName: initialData?.givenName || "", fullName: initialData?.fullName || "", gender: initialData?.gender || "male", generation: initialData?.generation || 1, spouseIds: initialData?.spouseIds || [], childrenIds: initialData?.childrenIds || [], fatherId: initialData?.fatherId, motherId: initialData?.motherId, ...initialData, }) const handleChange = (field: keyof FamilyMember, value: any) => { setFormData((prev) => { const newData = { ...prev, [field]: value } // Auto-update full name if surname or given name changes if (field === "surname" || field === "givenName") { newData.fullName = (newData.surname || "") + (newData.givenName || "") } return newData }) } const handleSpouseChange = (spouseId: string) => { // If selecting "none" (empty string), clear spouses if (!spouseId) { setFormData((prev) => ({ ...prev, spouseIds: [] })) return } // Otherwise set as single spouse (logic can be expanded for multiple later) setFormData((prev) => ({ ...prev, spouseIds: [spouseId] })) } const handleSubmit = (e: React.FormEvent) => { e.preventDefault() onSubmit(formData as FamilyMember) } const potentialRelatives = existingMembers.filter((m) => m.id !== formData.id) return (
{/* Basic Identity */} 基本信息 (Identity)
handleChange("avatarImageId", imageId)} />
handleChange("surname", e.target.value)} />
handleChange("givenName", e.target.value)} />
handleChange("generation", Number.parseInt(e.target.value))} />
{/* Traditional Names */} 传统称谓 (Traditional Names)
handleChange("courtesyName", e.target.value)} placeholder="e.g. 伯虎" />
handleChange("artName", e.target.value)} placeholder="e.g. 六如居士" />
handleChange("generationName", e.target.value)} />
handleChange("posthumousName", e.target.value)} />
{/* Dates & Places */} 生平与地点 (Life & Places)
handleChange("birthDate", e.target.value)} />
handleChange("deathDate", e.target.value)} />
handleChange("ancestralHome", e.target.value)} placeholder="e.g. 福建省泉州市" />
handleChange("burialPlace", e.target.value)} />
{/* Biography */} 生平事迹 (Biography)