Added actions
This commit is contained in:
@@ -190,7 +190,6 @@ export function AdvancedUrlFormCard() {
|
|||||||
<DatePicker
|
<DatePicker
|
||||||
value={field.value}
|
value={field.value}
|
||||||
onChange={field.onChange}
|
onChange={field.onChange}
|
||||||
placeholder="Select expiration date"
|
|
||||||
/>
|
/>
|
||||||
</FormControl>
|
</FormControl>
|
||||||
<FormDescription>
|
<FormDescription>
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ import {
|
|||||||
} from "@/components/ui/dropdown-menu"
|
} from "@/components/ui/dropdown-menu"
|
||||||
import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar } from "@/components/ui/sidebar"
|
import { SidebarMenu, SidebarMenuButton, SidebarMenuItem, useSidebar } from "@/components/ui/sidebar"
|
||||||
import { signOut, useSession } from "@/lib/auth/auth-client"
|
import { signOut, useSession } from "@/lib/auth/auth-client"
|
||||||
import { LogOut, Settings, User } from "lucide-react"
|
import { LogOut, User } from "lucide-react"
|
||||||
import Link from "next/link"
|
import Link from "next/link"
|
||||||
import { useRouter } from "next/navigation"
|
import { useRouter } from "next/navigation"
|
||||||
|
|
||||||
|
|||||||
@@ -1,10 +1,9 @@
|
|||||||
"use server"
|
"use server"
|
||||||
|
|
||||||
import { z } from "zod"
|
|
||||||
import { getSession } from "../auth/session"
|
import { getSession } from "../auth/session"
|
||||||
import { insertUrl } from "../db/urls"
|
import { insertUrl } from "../db/urls"
|
||||||
import { advancedUrlSchema, urlFormSchema } from "../schema/url"
|
import { advancedUrlSchema, editUrlSchema, urlFormSchema } from "../schema/url"
|
||||||
import { deleteUrl as deleteUrlDb } from "../db/urls"
|
import { deleteUrl as deleteUrlDb, updateUrl as updateUrlDb } from "../db/urls"
|
||||||
import { revalidatePath } from "next/cache"
|
import { revalidatePath } from "next/cache"
|
||||||
import { getWebsiteTitle } from "../websiteTitle"
|
import { getWebsiteTitle } from "../websiteTitle"
|
||||||
|
|
||||||
@@ -78,7 +77,34 @@ export async function createAdvanceUrl(unsafeData: unknown): Promise<Response> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function deleteUrl(unsafe: unknown): Promise<Response> {
|
export async function updateUrl(id: string, unsafeData: unknown): Promise<Response> {
|
||||||
|
const { session } = await getSession()
|
||||||
|
|
||||||
|
if (!session) {
|
||||||
|
return {
|
||||||
|
error: true,
|
||||||
|
message: "You must be logged in to update a short link."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const { error, data } = editUrlSchema.safeParse(unsafeData)
|
||||||
|
|
||||||
|
if (error) {
|
||||||
|
return {
|
||||||
|
error: true,
|
||||||
|
message: "Error parsing form data."
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await updateUrlDb(id, data)
|
||||||
|
|
||||||
|
return {
|
||||||
|
error: false,
|
||||||
|
message: "Short link updated successfully!"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function deleteUrl(id: string): Promise<Response> {
|
||||||
const { session } = await getSession()
|
const { session } = await getSession()
|
||||||
|
|
||||||
if (!session) {
|
if (!session) {
|
||||||
@@ -88,15 +114,6 @@ export async function deleteUrl(unsafe: unknown): Promise<Response> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const { error, data: id } = z.string().safeParse(unsafe)
|
|
||||||
|
|
||||||
if (error) {
|
|
||||||
return {
|
|
||||||
error: true,
|
|
||||||
message: "Error parsing form data."
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
await deleteUrlDb(id)
|
await deleteUrlDb(id)
|
||||||
|
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -13,4 +13,14 @@ export const advancedUrlSchema = z.object({
|
|||||||
expDate: z.date().optional(),
|
expDate: z.date().optional(),
|
||||||
forwardQueryParams: z.boolean(),
|
forwardQueryParams: z.boolean(),
|
||||||
crawlable: z.boolean(),
|
crawlable: z.boolean(),
|
||||||
|
})
|
||||||
|
|
||||||
|
export const editUrlSchema = z.object({
|
||||||
|
url: z.string().url("Please enter a valid URL").optional(),
|
||||||
|
slug: z.string().max(10, "Slug must be 10 characters or less").optional(),
|
||||||
|
title: z.string().max(100, "Title must be 100 characters or less").optional(),
|
||||||
|
maxVisits: z.number().int().optional(),
|
||||||
|
expDate: z.date().optional(),
|
||||||
|
forwardQueryParams: z.boolean().optional(),
|
||||||
|
crawlable: z.boolean().optional(),
|
||||||
})
|
})
|
||||||
Reference in New Issue
Block a user