import { useForm } from 'react-hook-form'; import { zodResolver } from '@hookform/resolvers/zod'; import { z } from 'zod'; import { showToast } from '@/lib/notify'; import { Typography } from '@/components/ui/typography'; import { Button } from '@/components/ui/button'; import { Input } from '@/components/ui/input'; import { Sheet } from '@/components/ui/sheet'; import { useAuth } from '../useAuth'; import { updateMe } from '../service'; const schema = z.object({ name: z.string().trim(), email: z.string().trim().email('이메일 형식을 확인해 주십시오.').or(z.literal('')), contactNumber: z.string().trim(), password: z.string(), passwordConfirm: z.string(), }); type FormValues = z.infer; const inputClass = 'text-foreground text-xs'; const blank = (v: string) => (v.trim() ? v.trim() : null); export function ProfileSheet({ open, onClose }: { open: boolean; onClose: () => void }) { const { user } = useAuth(); const { register, handleSubmit, setError, formState: { errors, isSubmitting }, } = useForm({ resolver: zodResolver(schema), defaultValues: { name: user?.name ?? '', email: user?.email ?? '', contactNumber: user?.contact ?? '', password: '', passwordConfirm: '', }, }); const onValid = async (v: FormValues) => { if (v.password && v.password.length < 4) { setError('password', { message: '비밀번호는 4자 이상으로 설정해 주십시오.' }); return; } if (v.password && v.password !== v.passwordConfirm) { setError('passwordConfirm', { message: '비밀번호가 일치하지 않습니다.' }); return; } try { await updateMe({ name: blank(v.name), email: blank(v.email), contact_number: blank(v.contactNumber), ...(v.password ? { password: v.password } : {}), }); showToast('내 정보가 수정되었습니다.', 'success'); onClose(); } catch (err) { showToast(err instanceof Error ? err.message : '내 정보 수정 실패', 'error'); } }; return (
{/* 읽기 전용: 회사 / 로그인ID / 권한 */}
회사 {user?.company}
로그인 ID {user?.loginId}
권한등급 {user?.role}
{/* 이름 */}
이름
{/* 이메일 */}
이메일 {errors.email &&

{errors.email.message}

}
{/* 연락처 */}
연락처
{/* 비밀번호 변경(옵션) */}
비밀번호 변경 (변경 시에만 입력) {errors.password &&

{errors.password.message}

}
{/* 비밀번호 확인 */}
비밀번호 확인 {errors.passwordConfirm &&

{errors.passwordConfirm.message}

}
); }