"use client"; import { UserIcon, PencilIcon, CheckIcon, XMarkIcon } from "@heroicons/react/24/outline"; import { Button } from "@/components/atoms/button"; import { Input } from "@/components/atoms/input"; /** Data required for displaying personal info card */ interface PersonalInfoData { firstname: string | null | undefined; lastname: string | null | undefined; email: string; phonenumber: string | null | undefined; sfNumber: string | null | undefined; dateOfBirth: string | null | undefined; gender: string | null | undefined; } interface PersonalInfoCardProps { /** User profile data including read-only fields */ data: PersonalInfoData; /** Email value for editing (may differ from data.email during edit) */ editEmail: string; /** Phone number value for editing (may differ from data.phonenumber during edit) */ editPhoneNumber: string; isEditing: boolean; isSaving: boolean; onEdit: () => void; onCancel: () => void; onChange: (field: "email" | "phonenumber", value: string) => void; onSave: () => void; } function ReadOnlyField({ label, value, hint, }: { label: string; value: string | null | undefined; hint: string; }) { return (

{value || Not provided}

{hint}

); } const EDITABLE_INPUT_CLASS = "block w-full px-4 py-2.5 border border-input rounded-lg bg-background text-foreground shadow-[var(--cp-shadow-1)] focus:outline-none focus:ring-2 focus:ring-ring focus:border-ring transition-colors"; function EditableEmailField({ email, editEmail, isEditing, onChange, }: { email: string; editEmail: string; isEditing: boolean; onChange: (field: "email" | "phonenumber", value: string) => void; }) { return (
{isEditing ? ( onChange("email", e.target.value)} className={EDITABLE_INPUT_CLASS} /> ) : (

{email}

Email can be updated from the portal.

)}
); } function EditablePhoneField({ phonenumber, editPhoneNumber, isEditing, onChange, }: { phonenumber: string | null | undefined; editPhoneNumber: string; isEditing: boolean; onChange: (field: "email" | "phonenumber", value: string) => void; }) { return (
{isEditing ? ( onChange("phonenumber", e.target.value)} placeholder="+81 XX-XXXX-XXXX" className={EDITABLE_INPUT_CLASS} /> ) : (

{phonenumber || Not provided}

)}
); } export function PersonalInfoCard({ data, editEmail, editPhoneNumber, isEditing, isSaving, onEdit, onCancel, onChange, onSave, }: PersonalInfoCardProps) { return (

Personal Information

{!isEditing && ( )}
{isEditing && (
)}
); }