diff --git a/src/app/[locale]/admin/users/UserForm.tsx b/src/app/[locale]/admin/users/UserForm.tsx index 5e7ab78..9876410 100644 --- a/src/app/[locale]/admin/users/UserForm.tsx +++ b/src/app/[locale]/admin/users/UserForm.tsx @@ -18,7 +18,8 @@ import { useI18n, useCurrentLocale } from '@/locales/client'; import { registerUser, updateUser } from '@/app/actions/user'; const formSchema = z.object({ - name: z.string().min(2, "Name must be at least 2 characters."), + name: z.string().min(2, "Full name must be at least 2 characters."), + nickname: z.string().optional(), email: z.string().email("Invalid email address."), role: z.enum(['User', 'Admin']), }); @@ -40,6 +41,7 @@ export default function UserForm({ initialData, isEditMode = false }: UserFormPr resolver: zodResolver(formSchema), defaultValues: { name: initialData?.name || '', + nickname: initialData?.nickname || '', email: initialData?.email || '', role: initialData?.role || 'User', }, @@ -85,7 +87,20 @@ export default function UserForm({ initialData, isEditMode = false }: UserFormPr name="name" render={({ field }) => ( - {t('admin.users.form_name_label')} + {t('admin.users.form_full_name_label')} + + + + + + )} + /> + ( + + {t('admin.users.form_nickname_label')} diff --git a/src/app/[locale]/admin/users/page.tsx b/src/app/[locale]/admin/users/page.tsx index 3ff938a..5fa3b60 100644 --- a/src/app/[locale]/admin/users/page.tsx +++ b/src/app/[locale]/admin/users/page.tsx @@ -102,7 +102,8 @@ export default function AdminUserManagementPage() { - {t('admin.users.table_header_name')} + {t('admin.users.table_header_full_name')} + {t('admin.users.table_header_nickname')} {t('admin.users.table_header_email')} {t('admin.users.table_header_role')} {t('admin.users.table_header_actions')} @@ -112,6 +113,7 @@ export default function AdminUserManagementPage() { {users.map((user) => ( {user.name} + {user.nickname} {user.email} {user.role} diff --git a/src/app/[locale]/dashboard/profile/page.tsx b/src/app/[locale]/dashboard/profile/page.tsx index 515dd95..39968ec 100644 --- a/src/app/[locale]/dashboard/profile/page.tsx +++ b/src/app/[locale]/dashboard/profile/page.tsx @@ -15,6 +15,7 @@ import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@ const mockUserProfile = { name: 'Alice Wonderland', + nickname: 'Alice', email: 'alice@example.com', avatarUrl: 'https://placehold.co/100x100.png?text=AW', bio: "Lover of imaginative play and sharing joy. I have a collection of classic storybooks and dress-up costumes.", @@ -29,6 +30,7 @@ export default function ProfilePage() { const changeLocale = useChangeLocale(); const [name, setName] = useState(mockUserProfile.name); + const [nickname, setNickname] = useState(mockUserProfile.nickname); const [email, setEmail] = useState(mockUserProfile.email); const [avatarUrl, setAvatarUrl] = useState(mockUserProfile.avatarUrl); const [bio, setBio] = useState(mockUserProfile.bio); @@ -52,7 +54,7 @@ export default function ProfilePage() { e.preventDefault(); setIsLoading(true); await new Promise(resolve => setTimeout(resolve, 1000)); - console.log("Updating profile:", { name, avatarUrl, bio, phone, location }); + console.log("Updating profile:", { name, nickname, avatarUrl, bio, phone, location }); toast({ title: t('dashboard.profile.save_button'), description: "Your profile information has been saved." }); setIsLoading(false); }; @@ -117,14 +119,19 @@ export default function ProfilePage() {
- setName(e.target.value)} placeholder="Your Nickname" disabled={isLoading} /> + setName(e.target.value)} placeholder="Your Full Name" required disabled={isLoading} />
- - + + setNickname(e.target.value)} placeholder="Your Nickname" disabled={isLoading} />
+
+ + +
+