Fixed forms

This commit is contained in:
2025-06-26 20:10:05 +02:00
parent b60245d0a7
commit be221f3e1c
5 changed files with 21 additions and 11 deletions

View File

@@ -5,7 +5,6 @@ export default function DashboardCreatePage() {
<div className="p-6 space-y-6"> <div className="p-6 space-y-6">
<div> <div>
<h1 className="text-2xl font-bold text-foreground mb-2">Create Short Link</h1> <h1 className="text-2xl font-bold text-foreground mb-2">Create Short Link</h1>
<p className="text-muted-foreground">Create a new short link with advanced configuration options.</p>
</div> </div>
<AdvancedUrlFormCard /> <AdvancedUrlFormCard />
</div> </div>

View File

@@ -20,9 +20,9 @@ export function AdvancedUrlFormCard() {
resolver: zodResolver(advancedUrlSchema), resolver: zodResolver(advancedUrlSchema),
defaultValues: { defaultValues: {
url: "", url: "",
slug: undefined, slug: "",
title: undefined, title: "",
maxVisits: undefined, maxVisits: 0,
expDate: undefined, expDate: undefined,
forwardQueryParams: true, forwardQueryParams: true,
crawlable: false crawlable: false

View File

@@ -18,7 +18,7 @@ export function UrlFormCard() {
resolver: zodResolver(urlFormSchema), resolver: zodResolver(urlFormSchema),
defaultValues: { defaultValues: {
url: "", url: "",
slug: undefined slug: ""
} }
}) })

View File

@@ -5,6 +5,7 @@ import { getSession } from "../auth/session"
import { insertUrl } from "../db/urls" import { insertUrl } from "../db/urls"
import { advancedUrlSchema, urlFormSchema } from "../schema/url" import { advancedUrlSchema, urlFormSchema } from "../schema/url"
import { deleteUrl as deleteUrlDb } from "../db/urls" import { deleteUrl as deleteUrlDb } from "../db/urls"
import { revalidatePath } from "next/cache"
type Response = { type Response = {
error: boolean error: boolean
@@ -30,7 +31,12 @@ export async function addUrl(unsafeData: unknown): Promise<Response> {
} }
} }
await insertUrl(data) await insertUrl({
...data,
slug: data.slug.length === 0 ? undefined : data.slug,
})
revalidatePath("/dashboard")
return { return {
error: false, error: false,
@@ -57,7 +63,12 @@ export async function createAdvanceUrl(unsafeData: unknown): Promise<Response> {
} }
} }
await insertUrl(data) await insertUrl({
...data,
slug: data.slug?.length === 0 ? undefined : data.slug,
title: data.title?.length === 0 ? undefined : data.title,
maxVisits: data.maxVisits > 0 ? data.maxVisits : undefined,
})
return { return {
error: false, error: false,

View File

@@ -2,14 +2,14 @@ import { z } from "zod";
export const urlFormSchema = z.object({ export const urlFormSchema = z.object({
url: z.string().url("Please enter a valid URL"), url: z.string().url("Please enter a valid URL"),
slug: z.string().max(10, "Slug must be 10 characters or less").optional() slug: z.string().max(10, "Slug must be 10 characters or less")
}) })
export const advancedUrlSchema = z.object({ export const advancedUrlSchema = z.object({
url: z.string().url("Please enter a valid URL"), url: z.string().url("Please enter a valid URL"),
slug: z.string().max(10, "Slug must be 10 characters or less").optional(), slug: z.string().max(10, "Slug must be 10 characters or less"),
title: z.string().max(100, "Title must be 100 characters or less").optional(), title: z.string().max(100, "Title must be 100 characters or less"),
maxVisits: z.number().int().min(1, "Max visits must be at least 1").optional(), maxVisits: z.number().int(),
expDate: z.date().optional(), expDate: z.date().optional(),
forwardQueryParams: z.boolean(), forwardQueryParams: z.boolean(),
crawlable: z.boolean(), crawlable: z.boolean(),