From 7bd43b8e3f1ce4bd30b60747c01e757ebdbafc23 Mon Sep 17 00:00:00 2001 From: Taken Date: Sat, 28 Jun 2025 00:21:10 +0200 Subject: [PATCH] Updated forms --- .../(admin)/dashboard/_components/url-form-card.tsx | 12 ++++++------ src/components/ui/form.tsx | 11 +++++++++-- src/lib/actions/url.ts | 4 ++-- src/lib/schema/url.ts | 2 +- 4 files changed, 18 insertions(+), 11 deletions(-) diff --git a/src/app/(admin)/dashboard/_components/url-form-card.tsx b/src/app/(admin)/dashboard/_components/url-form-card.tsx index 36c6323..cfd974d 100644 --- a/src/app/(admin)/dashboard/_components/url-form-card.tsx +++ b/src/app/(admin)/dashboard/_components/url-form-card.tsx @@ -53,7 +53,7 @@ function AdvancedUrlForm() { name="url" render={({ field }) => ( - Original URL + Original URL @@ -69,7 +69,7 @@ function AdvancedUrlForm() { name="slug" render={({ field }) => ( - Custom Slug (Optional) + Custom Slug @@ -117,7 +117,7 @@ function AdvancedUrlForm() { @@ -131,7 +131,7 @@ function AdvancedUrlForm() { name="title" render={({ field }) => ( - Title (Optional) + Title @@ -147,7 +147,7 @@ function AdvancedUrlForm() { name="maxVisits" render={({ field }) => ( - Max Visits (Optional) + Max Visits ( - Expiration Date (Optional) + Expiration Date ) { function FormLabel({ className, + required, + children, ...props -}: React.ComponentProps) { +}: React.ComponentProps & { + required?: boolean +}) { const { error, formItemId } = useFormField() return ( @@ -92,7 +96,10 @@ function FormLabel({ className={cn("data-[error=true]:text-destructive", className)} htmlFor={formItemId} {...props} - /> + > + {children} + {required && *} + ) } diff --git a/src/lib/actions/url.ts b/src/lib/actions/url.ts index a5b2b2f..36d87d7 100644 --- a/src/lib/actions/url.ts +++ b/src/lib/actions/url.ts @@ -66,9 +66,9 @@ export async function createAdvanceUrl(unsafeData: unknown): Promise { await insertUrl({ ...data, - slug: data.slug?.length === 0 ? undefined : data.slug, + slug: data.slug ? data.slug.trim() : undefined, title: data.title?.length === 0 ? await getWebsiteTitle(data.url) : data.title, - maxVisits: data.maxVisits > 0 ? data.maxVisits : undefined + maxVisits: data.maxVisits ? data.maxVisits : null, }) return { diff --git a/src/lib/schema/url.ts b/src/lib/schema/url.ts index 90af5d0..1fd08ec 100644 --- a/src/lib/schema/url.ts +++ b/src/lib/schema/url.ts @@ -17,7 +17,7 @@ export const advancedUrlSchema = z.object({ export const editUrlSchema = z.object({ url: z.string().url("Please enter a valid URL"), - slug: z.string().max(10, "Slug must be 10 characters or less"), + slug: z.string().min(1).max(10, "Slug must be 10 characters or less"), title: z.string().max(100, "Title must be 100 characters or less").transform(v => v.trim() === "" ? null : v).nullable(), maxVisits: z.number().int().positive().nullable(), expDate: z.date().nullable(),