Skip to content

Commit 533b82a

Browse files
committed
feat: display form validation errors below the form, not in toast
1 parent 383375c commit 533b82a

File tree

1 file changed

+11
-3
lines changed

1 file changed

+11
-3
lines changed

web/src/modules/shared/components/layout/UserMenu.tsx

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ interface FormValues {
3232
export const UserMenu = ({ userData }: { userData: LoggedUserData }) => {
3333
const [isEditingUsername, setIsEditingUsername] = useState(false);
3434
const [name, setName] = useState(userData.username);
35+
const [error, setError] = useState('');
3536

3637
const {
3738
handleSubmit,
@@ -42,6 +43,8 @@ export const UserMenu = ({ userData }: { userData: LoggedUserData }) => {
4243

4344
const onSubmit: SubmitHandler<FormValues> = async (data) => {
4445
try {
46+
setError('');
47+
4548
if (data.username === name) {
4649
setIsEditingUsername(false);
4750
return;
@@ -81,14 +84,14 @@ export const UserMenu = ({ userData }: { userData: LoggedUserData }) => {
8184
};
8285

8386
useEffect(() => {
84-
if (errors.username?.message) {
85-
toast.error(errors.username.message);
86-
}
87+
setError(errors.username?.message ?? '');
8788
}, [errors.username?.message]);
8889

8990
useEffect(() => {
9091
if (isEditingUsername) {
9192
reset({ username: name });
93+
} else {
94+
setError('');
9295
}
9396
}, [isEditingUsername, name, reset]);
9497

@@ -184,6 +187,11 @@ export const UserMenu = ({ userData }: { userData: LoggedUserData }) => {
184187
<p className='text-zinc-300 text-xs truncate'>{userData.email}</p>
185188
</div>
186189
</div>
190+
{error && (
191+
<p className='text-xs text-red-400 px-4 pb-2 max-w-60 leading-tight'>
192+
{error}
193+
</p>
194+
)}
187195

188196
<UserMenuSplitLine />
189197

0 commit comments

Comments
 (0)