// src/components/ProfilePage.tsx import { AvatarUpload } from '@/components/avatar-upload'; import PasswordInput from '@/components/originui/password-input'; import { Button } from '@/components/ui/button'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@/components/ui/form'; import { Input } from '@/components/ui/input'; import { Modal } from '@/components/ui/modal/modal'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@/components/ui/select'; import { useTranslate } from '@/hooks/common-hooks'; import { TimezoneList } from '@/pages/user-setting/constants'; import { zodResolver } from '@hookform/resolvers/zod'; import { t } from 'i18next'; import { Loader2Icon, PenLine } from 'lucide-react'; import { FC, useEffect } from 'react'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import { EditType, modalTitle, useProfile } from './hooks/use-profile'; const baseSchema = z.object({ userName: z .string() .min(1, { message: t('setting.usernameMessage') }) .trim(), timeZone: z .string() .trim() .min(1, { message: t('setting.timezonePlaceholder') }), }); const nameSchema = baseSchema.extend({ currPasswd: z.string().optional(), newPasswd: z.string().optional(), confirmPasswd: z.string().optional(), }); const passwordSchema = baseSchema .extend({ currPasswd: z .string({ required_error: t('setting.currentPasswordMessage'), }) .trim(), newPasswd: z .string({ required_error: t('setting.newPasswordMessage'), }) .trim() .min(8, { message: t('setting.newPasswordDescription') }), confirmPasswd: z .string({ required_error: t('setting.confirmPasswordMessage'), }) .trim() .min(8, { message: t('setting.newPasswordDescription') }), }) .superRefine((data, ctx) => { if ( data.newPasswd && data.confirmPasswd && data.newPasswd !== data.confirmPasswd ) { ctx.addIssue({ path: ['confirmPasswd'], message: t('setting.confirmPasswordNonMatchMessage'), code: z.ZodIssueCode.custom, }); } }); const ProfilePage: FC = () => { const { t } = useTranslate('setting'); const { profile, editType, isEditing, submitLoading, editForm, handleEditClick, handleCancel, handleSave, handleAvatarUpload, } = useProfile(); const form = useForm>({ resolver: zodResolver( editType === EditType.editPassword ? passwordSchema : nameSchema, ), defaultValues: { userName: '', timeZone: '', }, // shouldUnregister: true, }); useEffect(() => { form.reset({ ...editForm, currPasswd: undefined }); }, [editForm, form]); // const ModalContent: FC = () => { // // let content = null; // // if (editType === EditType.editName) { // // content = editName(); // // } // return ( // <> // // ); // }; return (
{/* Header */}

{t('profile')}

{t('profileDescription')}
{/* Main Content */}
{/* Name */}
{profile.userName}
{/* Avatar */}
{/* Time Zone */}
{profile.timeZone}
{/* Email Address */}
{profile.email}
{t('emailDescription')}
{/* Password */}
{profile.currPasswd ? '********' : ''}
{editType && ( { if (!open) { handleCancel(); } }} className="!w-[480px]" > {/* */}
handleSave(data as any))} className="flex flex-col mt-6 mb-8 ml-2 space-y-6 " > {editType === EditType.editName && ( (
{t('username')}
)} /> )} {editType === EditType.editTimeZone && ( (
{t('timezone')}
)} /> )} {editType === EditType.editPassword && ( <> (
{t('currentPassword')}
)} /> (
{t('newPassword')}
)} /> (
{t('confirmPassword')} { form.trigger('confirmPasswd'); }} onChange={(ev) => { form.setValue( 'confirmPasswd', ev.target.value.trim(), ); }} />
)} /> )}
)}
); }; export default ProfilePage;