Skip to content

Commit ac59668

Browse files
committed
Refactor form validation in multiple components; switch to valibot for schema resolution
1 parent c24eabb commit ac59668

File tree

7 files changed

+23
-27
lines changed

7 files changed

+23
-27
lines changed

web/bun.lockb

-140 KB
Binary file not shown.

web/package.json

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
"preview": "vite preview"
1111
},
1212
"dependencies": {
13-
"@hookform/resolvers": "^3.9.0",
13+
"@hookform/resolvers": "3.9.0",
1414
"@radix-ui/react-avatar": "^1.1.0",
1515
"@radix-ui/react-dialog": "^1.1.1",
1616
"@radix-ui/react-label": "^2.1.0",
@@ -26,14 +26,13 @@
2626
"lucide-react": "^0.446.0",
2727
"react": "^18.3.1",
2828
"react-dom": "^18.3.1",
29-
"react-hook-form": "^7.53.0",
29+
"react-hook-form": "7.53.0",
3030
"react-intersection-observer": "^9.16.0",
3131
"react-router-dom": "^6.26.2",
3232
"socket.io-client": "^4.8.0",
3333
"tailwind-merge": "^2.5.2",
3434
"tailwindcss-animate": "^1.0.7",
35-
"vaul": "^1.0.0",
36-
"zod": "^3.23.8"
35+
"vaul": "^1.0.0"
3736
},
3837
"devDependencies": {
3938
"@types/node": "^22.7.2",
@@ -43,14 +42,11 @@
4342
"@types/react-dom": "^18.3.0",
4443
"@vitejs/plugin-react-swc": "^3.5.0",
4544
"autoprefixer": "^10.4.20",
46-
"eslint": "^9.9.0",
4745
"eslint-plugin-react-hooks": "^5.1.0-rc.0",
4846
"eslint-plugin-react-refresh": "^0.4.9",
4947
"globals": "^15.9.0",
5048
"postcss": "^8.4.47",
5149
"tailwindcss": "^3.4.13",
52-
"typescript": "^5.5.3",
53-
"typescript-eslint": "^8.0.1",
5450
"vite": "^5.4.11"
5551
}
5652
}

web/src/pages/Chat/ChatInput.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,14 @@ import { Image, Send } from "lucide-react";
22
import { Input } from "../../components/ui/input";
33
import { socket } from "../../lib/socket";
44
import { useEffect, useRef, useState } from "react";
5-
import { useParams } from "react-router-dom";
65

76
export function ChatInput({chat, chatId}: { chat: Chat, chatId: string | null }) {
87
const typingTimeoutRef = useRef<NodeJS.Timeout | null>(null);
98
const [message, setMessage] = useState<string>("");
109
const [images, setImages] = useState<File[]>([]);
1110
const [imagePreview, setImagePreview] = useState<string[]>([]);
11+
console.log(images);
12+
1213

1314
useEffect(() => {
1415
return () => {

web/src/pages/Chat/MessageArea.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import {
99
import { useInfiniteQuery } from "@tanstack/react-query";
1010
import { useInView } from "react-intersection-observer";
1111
import { GET } from "../../lib/fetch";
12-
import { useParams } from "react-router-dom";
1312
import { useEffect, useState } from "react";
1413
import { socket } from "../../lib/socket";
1514

web/src/pages/Login.tsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { zLoginUser } from "../../../common/zod_schema";
2-
import { zodResolver } from "@hookform/resolvers/zod";
1+
import { LoginUserSchema, vLoginUser } from "../../../common/zod_schema";
2+
import { valibotResolver } from "@hookform/resolvers/valibot";
33
import { useForm } from "react-hook-form";
44
import {
55
Form,
@@ -11,7 +11,6 @@ import {
1111
} from "../components/ui/form";
1212
import { Input } from "../components/ui/input";
1313
import { Button } from "../components/ui/button";
14-
import { z } from "zod";
1514
import {
1615
Card,
1716
CardContent,
@@ -26,8 +25,8 @@ import { useSetAtom } from "jotai";
2625
import { User } from "../lib/store";
2726

2827
export default function Login() {
29-
const form = useForm<z.infer<typeof zLoginUser>>({
30-
resolver: zodResolver(zLoginUser),
28+
const form = useForm<LoginUserSchema>({
29+
resolver: valibotResolver(vLoginUser),
3130
defaultValues: {
3231
email: "",
3332
password: "",
@@ -36,7 +35,7 @@ export default function Login() {
3635

3736
const setUser: any = useSetAtom(User as any);
3837

39-
async function onSubmit(data: z.infer<typeof zLoginUser>) {
38+
async function onSubmit(data: LoginUserSchema) {
4039
const user = await POST("/login", data);
4140
setUser(user);
4241
}

web/src/pages/Profile.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,8 @@ import { Input } from "../components/ui/input";
1111
import { useAtom } from "jotai";
1212
import { User } from "../lib/store";
1313
import { useForm } from "react-hook-form";
14-
import { zProfile } from "../../../common/zod_schema";
15-
import { z } from "zod";
16-
import { zodResolver } from "@hookform/resolvers/zod";
14+
import { ProfileSchema, vProfile } from "../../../common/zod_schema";
15+
import { valibotResolver } from "@hookform/resolvers/valibot";
1716
import {
1817
Form,
1918
FormControl,
@@ -40,7 +39,10 @@ const ProfileImage = ({ user, form }) => {
4039
<FormLabel>
4140
<Avatar className="flex relative cursor-pointer">
4241
<AvatarImage
43-
src={makeObjectURL(value) || user?.avatar?.url}
42+
src={
43+
makeObjectURL(value) ||
44+
user?.avatar?.url
45+
}
4446
alt={user?.name.first}
4547
className="w-40 h-40 rounded-full"
4648
/>
@@ -76,8 +78,8 @@ const ProfileImage = ({ user, form }) => {
7678
export default function Profile() {
7779
const [user, setUser]: [any, any] = useAtom(User);
7880

79-
const form = useForm<z.infer<typeof zProfile>>({
80-
resolver: zodResolver(zProfile),
81+
const form = useForm<ProfileSchema>({
82+
resolver: valibotResolver(vProfile),
8183
defaultValues: {
8284
email: user?.email,
8385
username: user?.username,

web/src/pages/Register.tsx

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import { zRegisterUser } from "../../../common/zod_schema";
2-
import { zodResolver } from "@hookform/resolvers/zod";
1+
import { RegisterUserSchema, vRegisterUser } from "../../../common/zod_schema";
2+
import { valibotResolver } from "@hookform/resolvers/valibot";
33
import { useForm } from "react-hook-form";
44
import {
55
Form,
@@ -11,7 +11,6 @@ import {
1111
} from "../components/ui/form";
1212
import { Input } from "../components/ui/input";
1313
import { Button } from "../components/ui/button";
14-
import { z } from "zod";
1514
import {
1615
Card,
1716
CardContent,
@@ -26,8 +25,8 @@ import { User } from "../lib/store";
2625
import { useSetAtom } from "jotai";
2726

2827
export default function Register() {
29-
const form = useForm<z.infer<typeof zRegisterUser>>({
30-
resolver: zodResolver(zRegisterUser),
28+
const form = useForm<RegisterUserSchema>({
29+
resolver: valibotResolver(vRegisterUser),
3130
defaultValues: {
3231
name: {
3332
first: "",
@@ -42,7 +41,7 @@ export default function Register() {
4241

4342
const setUser: any = useSetAtom(User as any);
4443

45-
async function onSubmit(data: z.infer<typeof zRegisterUser>) {
44+
async function onSubmit(data: RegisterUserSchema) {
4645
const user = await POST("/register", data);
4746
setUser(user);
4847
console.log(user);

0 commit comments

Comments
 (0)