From 3745443c2b27afb833be7bcc2f3b4f486a42a571 Mon Sep 17 00:00:00 2001 From: MohamedBassem Date: Wed, 7 Feb 2024 18:12:53 +0000 Subject: [PATCH] [feature] Add support for deleting links --- bun.lockb | Bin 260504 -> 89336 bytes db/index.ts | 2 + web/app/api/v1/links/[linkId]/route.ts | 32 ++++ web/app/bookmarks/components/LinkCard.tsx | 36 +++- web/app/layout.tsx | 6 +- web/components/ui/toast.tsx | 127 ++++++++++++++ web/components/ui/toaster.tsx | 35 ++++ web/components/ui/use-toast.ts | 192 ++++++++++++++++++++++ web/lib/api.ts | 10 +- web/lib/services/links.ts | 9 + web/package.json | 1 + 11 files changed, 440 insertions(+), 10 deletions(-) create mode 100644 web/app/api/v1/links/[linkId]/route.ts create mode 100644 web/components/ui/toast.tsx create mode 100644 web/components/ui/toaster.tsx create mode 100644 web/components/ui/use-toast.ts diff --git a/bun.lockb b/bun.lockb index f4f09e8a2c750c540881e8b8ca6d19dda4cae6d5..641526b8753f0c08dd720b4dc05a8fbe294a0cf6 100755 GIT binary patch delta 20504 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%0A*bW;0m|^jzBd)2UG`~0VhDO>dhc&ox1}y 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 literal 260504 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 B`_%vd diff --git a/db/index.ts b/db/index.ts index b5bf6ce8..dbf925f4 100644 --- a/db/index.ts +++ b/db/index.ts @@ -2,4 +2,6 @@ import { PrismaClient } from "@prisma/client"; const prisma = new PrismaClient(); +export { Prisma } from "@prisma/client"; + export default prisma; diff --git a/web/app/api/v1/links/[linkId]/route.ts b/web/app/api/v1/links/[linkId]/route.ts new file mode 100644 index 00000000..39449d6d --- /dev/null +++ b/web/app/api/v1/links/[linkId]/route.ts @@ -0,0 +1,32 @@ +import { authOptions } from "@/lib/auth"; +import { unbookmarkLink } from "@/lib/services/links"; +import { Prisma } from "@remember/db"; + +import { getServerSession } from "next-auth"; +import { NextRequest } from "next/server"; + +export async function DELETE( + _request: NextRequest, + { params }: { params: { linkId: string } }, +) { + // TODO: We probably should be using an API key here instead of the session; + const session = await getServerSession(authOptions); + if (!session) { + return new Response(null, { status: 401 }); + } + + try { + await unbookmarkLink(params.linkId, session.user.id); + } catch (e: unknown) { + if ( + e instanceof Prisma.PrismaClientKnownRequestError && + e.code === "P2025" // RecordNotFound + ) { + return new Response(null, { status: 404 }); + } else { + throw e; + } + } + + return new Response(null, { status: 201 }); +} diff --git a/web/app/bookmarks/components/LinkCard.tsx b/web/app/bookmarks/components/LinkCard.tsx index 75973f7e..907acd19 100644 --- a/web/app/bookmarks/components/LinkCard.tsx +++ b/web/app/bookmarks/components/LinkCard.tsx @@ -13,12 +13,34 @@ import { ImageCardFooter, ImageCardTitle, } from "@/components/ui/imageCard"; +import { useToast } from "@/components/ui/use-toast"; +import APIClient from "@/lib/api"; import { ZBookmarkedLink } from "@/lib/types/api/links"; import { MoreHorizontal, Trash2 } from "lucide-react"; import Link from "next/link"; +import { useRouter } from "next/navigation"; -export function LinkOptions() { - // TODO: Implement deletion +export function LinkOptions({ linkId }: { linkId: string }) { + const { toast } = useToast(); + const router = useRouter(); + + const unbookmarkLink = async () => { + let [_, error] = await APIClient.unbookmarkLink(linkId); + + if (error) { + toast({ + variant: "destructive", + title: "Something went wrong", + description: "There was a problem with your request.", + }); + } else { + toast({ + description: "The link has been deleted!", + }); + } + + router.refresh(); + }; return ( @@ -27,10 +49,10 @@ export function LinkOptions() { - - - Delete - + + + Delete + ); @@ -59,7 +81,7 @@ export default function LinkCard({ link }: { link: ZBookmarkedLink }) { {parsedUrl.host} - + diff --git a/web/app/layout.tsx b/web/app/layout.tsx index 30d918df..a6543b1c 100644 --- a/web/app/layout.tsx +++ b/web/app/layout.tsx @@ -2,6 +2,7 @@ import type { Metadata } from "next"; import { Inter } from "next/font/google"; import "./globals.css"; import React from "react"; +import { Toaster } from "@/components/ui/toaster"; const inter = Inter({ subsets: ["latin"] }); @@ -17,7 +18,10 @@ export default function RootLayout({ }>) { return ( - {children} + + {children} + + ); } diff --git a/web/components/ui/toast.tsx b/web/components/ui/toast.tsx new file mode 100644 index 00000000..a8224775 --- /dev/null +++ b/web/components/ui/toast.tsx @@ -0,0 +1,127 @@ +import * as React from "react" +import * as ToastPrimitives from "@radix-ui/react-toast" +import { cva, type VariantProps } from "class-variance-authority" +import { X } from "lucide-react" + +import { cn } from "@/lib/utils" + +const ToastProvider = ToastPrimitives.Provider + +const ToastViewport = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ToastViewport.displayName = ToastPrimitives.Viewport.displayName + +const toastVariants = cva( + "group pointer-events-auto relative flex w-full items-center justify-between space-x-4 overflow-hidden rounded-md border p-6 pr-8 shadow-lg transition-all data-[swipe=cancel]:translate-x-0 data-[swipe=end]:translate-x-[var(--radix-toast-swipe-end-x)] data-[swipe=move]:translate-x-[var(--radix-toast-swipe-move-x)] data-[swipe=move]:transition-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[swipe=end]:animate-out data-[state=closed]:fade-out-80 data-[state=closed]:slide-out-to-right-full data-[state=open]:slide-in-from-top-full data-[state=open]:sm:slide-in-from-bottom-full", + { + variants: { + variant: { + default: "border bg-background text-foreground", + destructive: + "destructive group border-destructive bg-destructive text-destructive-foreground", + }, + }, + defaultVariants: { + variant: "default", + }, + } +) + +const Toast = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef & + VariantProps +>(({ className, variant, ...props }, ref) => { + return ( + + ) +}) +Toast.displayName = ToastPrimitives.Root.displayName + +const ToastAction = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ToastAction.displayName = ToastPrimitives.Action.displayName + +const ToastClose = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + + + +)) +ToastClose.displayName = ToastPrimitives.Close.displayName + +const ToastTitle = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ToastTitle.displayName = ToastPrimitives.Title.displayName + +const ToastDescription = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => ( + +)) +ToastDescription.displayName = ToastPrimitives.Description.displayName + +type ToastProps = React.ComponentPropsWithoutRef + +type ToastActionElement = React.ReactElement + +export { + type ToastProps, + type ToastActionElement, + ToastProvider, + ToastViewport, + Toast, + ToastTitle, + ToastDescription, + ToastClose, + ToastAction, +} diff --git a/web/components/ui/toaster.tsx b/web/components/ui/toaster.tsx new file mode 100644 index 00000000..e2233852 --- /dev/null +++ b/web/components/ui/toaster.tsx @@ -0,0 +1,35 @@ +"use client" + +import { + Toast, + ToastClose, + ToastDescription, + ToastProvider, + ToastTitle, + ToastViewport, +} from "@/components/ui/toast" +import { useToast } from "@/components/ui/use-toast" + +export function Toaster() { + const { toasts } = useToast() + + return ( + + {toasts.map(function ({ id, title, description, action, ...props }) { + return ( + +

+ {title && {title}} + {description && ( + {description} + )} +
+ {action} + + + ) + })} + + + ) +} diff --git a/web/components/ui/use-toast.ts b/web/components/ui/use-toast.ts new file mode 100644 index 00000000..16713070 --- /dev/null +++ b/web/components/ui/use-toast.ts @@ -0,0 +1,192 @@ +// Inspired by react-hot-toast library +import * as React from "react" + +import type { + ToastActionElement, + ToastProps, +} from "@/components/ui/toast" + +const TOAST_LIMIT = 1 +const TOAST_REMOVE_DELAY = 1000000 + +type ToasterToast = ToastProps & { + id: string + title?: React.ReactNode + description?: React.ReactNode + action?: ToastActionElement +} + +const actionTypes = { + ADD_TOAST: "ADD_TOAST", + UPDATE_TOAST: "UPDATE_TOAST", + DISMISS_TOAST: "DISMISS_TOAST", + REMOVE_TOAST: "REMOVE_TOAST", +} as const + +let count = 0 + +function genId() { + count = (count + 1) % Number.MAX_SAFE_INTEGER + return count.toString() +} + +type ActionType = typeof actionTypes + +type Action = + | { + type: ActionType["ADD_TOAST"] + toast: ToasterToast + } + | { + type: ActionType["UPDATE_TOAST"] + toast: Partial + } + | { + type: ActionType["DISMISS_TOAST"] + toastId?: ToasterToast["id"] + } + | { + type: ActionType["REMOVE_TOAST"] + toastId?: ToasterToast["id"] + } + +interface State { + toasts: ToasterToast[] +} + +const toastTimeouts = new Map>() + +const addToRemoveQueue = (toastId: string) => { + if (toastTimeouts.has(toastId)) { + return + } + + const timeout = setTimeout(() => { + toastTimeouts.delete(toastId) + dispatch({ + type: "REMOVE_TOAST", + toastId: toastId, + }) + }, TOAST_REMOVE_DELAY) + + toastTimeouts.set(toastId, timeout) +} + +export const reducer = (state: State, action: Action): State => { + switch (action.type) { + case "ADD_TOAST": + return { + ...state, + toasts: [action.toast, ...state.toasts].slice(0, TOAST_LIMIT), + } + + case "UPDATE_TOAST": + return { + ...state, + toasts: state.toasts.map((t) => + t.id === action.toast.id ? { ...t, ...action.toast } : t + ), + } + + case "DISMISS_TOAST": { + const { toastId } = action + + // ! Side effects ! - This could be extracted into a dismissToast() action, + // but I'll keep it here for simplicity + if (toastId) { + addToRemoveQueue(toastId) + } else { + state.toasts.forEach((toast) => { + addToRemoveQueue(toast.id) + }) + } + + return { + ...state, + toasts: state.toasts.map((t) => + t.id === toastId || toastId === undefined + ? { + ...t, + open: false, + } + : t + ), + } + } + case "REMOVE_TOAST": + if (action.toastId === undefined) { + return { + ...state, + toasts: [], + } + } + return { + ...state, + toasts: state.toasts.filter((t) => t.id !== action.toastId), + } + } +} + +const listeners: Array<(state: State) => void> = [] + +let memoryState: State = { toasts: [] } + +function dispatch(action: Action) { + memoryState = reducer(memoryState, action) + listeners.forEach((listener) => { + listener(memoryState) + }) +} + +type Toast = Omit + +function toast({ ...props }: Toast) { + const id = genId() + + const update = (props: ToasterToast) => + dispatch({ + type: "UPDATE_TOAST", + toast: { ...props, id }, + }) + const dismiss = () => dispatch({ type: "DISMISS_TOAST", toastId: id }) + + dispatch({ + type: "ADD_TOAST", + toast: { + ...props, + id, + open: true, + onOpenChange: (open) => { + if (!open) dismiss() + }, + }, + }) + + return { + id: id, + dismiss, + update, + } +} + +function useToast() { + const [state, setState] = React.useState(memoryState) + + React.useEffect(() => { + listeners.push(setState) + return () => { + const index = listeners.indexOf(setState) + if (index > -1) { + listeners.splice(index, 1) + } + } + }, [state]) + + return { + ...state, + toast, + dismiss: (toastId?: string) => dispatch({ type: "DISMISS_TOAST", toastId }), + } +} + +export { useToast, toast } diff --git a/web/lib/api.ts b/web/lib/api.ts index 193d9bb7..12ce9464 100644 --- a/web/lib/api.ts +++ b/web/lib/api.ts @@ -35,8 +35,8 @@ async function doRequest( opts?: RequestInit, ): Promise< | (InputSchema extends ZodTypeAny - ? [z.infer>, undefined] - : [undefined, undefined]) + ? [z.infer>, undefined] + : [undefined, undefined]) | [undefined, FetchError] > { try { @@ -84,4 +84,10 @@ export default class APIClient { body: JSON.stringify(body), }); } + + static async unbookmarkLink(linkId: string) { + return await doRequest(`/links/${linkId}`, undefined, { + method: "DELETE", + }); + } } diff --git a/web/lib/services/links.ts b/web/lib/services/links.ts index f3ff1757..dbcbe9c4 100644 --- a/web/lib/services/links.ts +++ b/web/lib/services/links.ts @@ -1,6 +1,15 @@ import { LinkCrawlerQueue } from "@remember/shared/queues"; import prisma from "@remember/db"; +export async function unbookmarkLink(linkId: string, userId: string) { + await prisma.bookmarkedLink.delete({ + where: { + id: linkId, + userId, + }, + }); +} + export async function bookmarkLink(url: string, userId: string) { const link = await prisma.bookmarkedLink.create({ data: { diff --git a/web/package.json b/web/package.json index 09249bab..0c7ce127 100644 --- a/web/package.json +++ b/web/package.json @@ -14,6 +14,7 @@ "@next/eslint-plugin-next": "^14.1.0", "@radix-ui/react-dropdown-menu": "^2.0.6", "@radix-ui/react-slot": "^1.0.2", + "@radix-ui/react-toast": "^1.1.5", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", "install": "^0.13.0",