Skip to content

Commit 3163b24

Browse files
committed
zod validation
1 parent ae5dfdd commit 3163b24

6 files changed

Lines changed: 35 additions & 34 deletions

File tree

components/forms/CreateInviteForm.tsx

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,23 @@
11
import { Input } from './Styles';
2-
import { CreateInviteFormInput } from '@/types/forms/CreateInviteFormData';
32
import { UseFormRegister } from 'react-hook-form';
43
import styles from '@/styles/Livekit.module.css';
4+
import { CreateInviteFormInput } from '@/types/client/forms/createInvite';
55

6-
export function CreateInviteform({ register }: { register: UseFormRegister<CreateInviteFormInput> }) {
7-
6+
export function CreateInviteform({
7+
register,
8+
}: {
9+
register: UseFormRegister<CreateInviteFormInput>;
10+
}) {
811
return (
912
<form className="flex flex-col space-y-4">
1013
<div className="flex flex-col">
1114
<label htmlFor="numUses">Max number of uses</label>
1215
<select
1316
id="numUses"
14-
{...register('numUses')}
17+
{...(register('numUses'), { valueAsNumber: true })}
1518
className={`${Input('bg-grey-700')} mt-2 ${styles.input}`}
1619
>
17-
<option value="null">Unlimited</option>
20+
<option value="-1">Unlimited</option>
1821
<option value="1">1</option>
1922
<option value="5">5</option>
2023
<option value="10">10</option>

components/home/modals/CreateInviteModal.tsx

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,12 @@ import { CreateInviteform } from '@/components/forms/CreateInviteForm';
22
import Modal from '@/components/home/modals/Modal';
33
import { createInvite } from '@/services/invites.service';
44
import { Channel } from '@/types/dbtypes';
5-
import { CreateInviteFormInput } from '@/types/forms/CreateInviteFormData';
5+
import { CreateInviteFormInput } from '@/types/client/forms/createInvite';
66
import { useSupabaseClient } from '@supabase/auth-helpers-react';
77
import { Dispatch, SetStateAction, useRef } from 'react';
88
import { useForm } from 'react-hook-form';
99
import { toast } from 'react-toastify';
1010

11-
12-
1311
export default function CreateInviteModal({
1412
showModal,
1513
setShowModal,
@@ -29,30 +27,20 @@ export default function CreateInviteModal({
2927
} = useForm<CreateInviteFormInput>({
3028
mode: 'onSubmit',
3129
defaultValues: {
32-
numUses: 'null',
30+
numUses: -1,
3331
expiresAt: '1 week',
3432
},
3533
});
3634

3735
const onSubmit = async (formData: CreateInviteFormInput) => {
3836
console.log(formData);
3937

40-
// Try to parse values
41-
let numUses: number | null = null;
42-
if (formData.numUses) {
43-
numUses = parseInt(formData.numUses);
44-
45-
if (isNaN(numUses)) {
46-
numUses = null;
47-
}
48-
}
49-
5038
const { data, error } = await createInvite(
5139
supabase,
5240
channel.server_id,
5341
channel.channel_id,
5442
formData.expiresAt,
55-
numUses
43+
formData.numUses < 1 ? null : formData.numUses
5644
);
5745

5846
if (error) {
@@ -62,7 +50,9 @@ export default function CreateInviteModal({
6250
}
6351

6452
toast.success('Invite copied to clipboard');
65-
navigator.clipboard.writeText(`${window.location.origin}/invite/${data?.url_id}`);
53+
navigator.clipboard.writeText(
54+
`${window.location.origin}/invite/${data?.url_id}`
55+
);
6656

6757
// Finally, close the modal
6858
setShowModal(false);
@@ -101,7 +91,7 @@ export default function CreateInviteModal({
10191
</>
10292
}
10393
>
104-
<CreateInviteform register={register}/>
94+
<CreateInviteform register={register} />
10595
</Modal>
10696
);
10797
}

pages/index.tsx

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,12 @@ import { useMediaQuery } from 'react-responsive';
88
import { useEffect, useRef, useState } from 'react';
99
import { useRealtimeStore } from '@/hooks/useRealtimeStore';
1010
import { LiveKitRoom } from '@livekit/components-react';
11-
import { useTokenRef, useConnectionRef, useUserSettings, useSetConnectionState} from '@/lib/store';
11+
import {
12+
useTokenRef,
13+
useConnectionRef,
14+
useUserSettings,
15+
useSetConnectionState,
16+
} from '@/lib/store';
1217
import { useSetChannel } from '@/lib/store';
1318
import { getChannelById } from '@/services/channels.service';
1419
import Modal from '@/components/home/modals/Modal';
@@ -29,7 +34,7 @@ export default function Home() {
2934

3035
const tryConnect = useConnectionRef();
3136
const setConnectionState = useSetConnectionState();
32-
const [ livekitError, setLivekitError ] = useState<Error | null>(null);
37+
const [livekitError, setLivekitError] = useState<Error | null>(null);
3338

3439
const modalRef = useRef<HTMLDialogElement>(null);
3540

@@ -65,15 +70,17 @@ export default function Home() {
6570
return;
6671
}
6772

68-
const { data: _channel } = await getChannelById(supabase, channel_id_as_number);
73+
const { data: _channel } = await getChannelById(
74+
supabase,
75+
channel_id_as_number
76+
);
6977

7078
if (_channel) {
7179
setChannel(_channel);
7280
}
7381
}
7482

7583
handleAsync();
76-
7784
}, [channel_id, setChannel, supabase]);
7885

7986
return (
@@ -138,7 +145,7 @@ export default function Home() {
138145
) : (
139146
<div>
140147
<div className={'bg-grey-800 '}>
141-
<RenderDesktopView/>
148+
<RenderDesktopView />
142149
<div>
143150
{!user ? (
144151
''

types/client/forms/createInvite.ts

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import { object, TypeOf, z } from 'zod';
2+
3+
export const createInviteFormInputSchema = object({
4+
numUses: z.number(),
5+
expiresAt: z.enum(['1 week', '1 day', '1 hour', '30 minutes', 'null']),
6+
});
7+
8+
export type CreateInviteFormInput = TypeOf<typeof createInviteFormInputSchema>;

types/forms/CreateInviteFormData.ts

Lines changed: 0 additions & 6 deletions
This file was deleted.

types/inviteExpiry.ts

Lines changed: 0 additions & 1 deletion
This file was deleted.

0 commit comments

Comments
 (0)