From e99dee0b4f7220568c8ffa2755147bc45d35b32b Mon Sep 17 00:00:00 2001 From: MohamedBassem Date: Sat, 30 Mar 2024 04:45:42 +0000 Subject: feature(web): Add support for attaching notes to bookmarks --- .../dashboard/bookmarks/BookmarkPreview.tsx | 10 ++++- .../components/dashboard/bookmarks/NoteEditor.tsx | 48 ++++++++++++++++++++++ 2 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 apps/web/components/dashboard/bookmarks/NoteEditor.tsx (limited to 'apps/web') diff --git a/apps/web/components/dashboard/bookmarks/BookmarkPreview.tsx b/apps/web/components/dashboard/bookmarks/BookmarkPreview.tsx index 74c49ddd..102e0788 100644 --- a/apps/web/components/dashboard/bookmarks/BookmarkPreview.tsx +++ b/apps/web/components/dashboard/bookmarks/BookmarkPreview.tsx @@ -24,6 +24,7 @@ import Markdown from "react-markdown"; import type { ZBookmark } from "@hoarder/trpc/types/bookmarks"; +import { NoteEditor } from "./NoteEditor"; import { TagsEditor } from "./TagsEditor"; dayjs.extend(relativeTime); @@ -198,12 +199,17 @@ export default function BookmarkPreview({
{isBookmarkStillCrawling(bookmark) ? : content}
-
+
{linkHeader} -
+
+

Tags

+
+

Note

+ +
); diff --git a/apps/web/components/dashboard/bookmarks/NoteEditor.tsx b/apps/web/components/dashboard/bookmarks/NoteEditor.tsx new file mode 100644 index 00000000..d712d523 --- /dev/null +++ b/apps/web/components/dashboard/bookmarks/NoteEditor.tsx @@ -0,0 +1,48 @@ +import { Textarea } from "@/components/ui/textarea"; +import { toast } from "@/components/ui/use-toast"; +import { useClientConfig } from "@/lib/clientConfig"; +import { api } from "@/lib/trpc"; + +import type { ZBookmark } from "@hoarder/trpc/types/bookmarks"; + +export function NoteEditor({ bookmark }: { bookmark: ZBookmark }) { + const demoMode = !!useClientConfig().demoMode; + + const invalidateBookmarkCache = + api.useUtils().bookmarks.getBookmark.invalidate; + + const updateBookmarkMutator = api.bookmarks.updateBookmark.useMutation({ + onSuccess: () => { + toast({ + description: "The bookmark has been updated!", + }); + }, + onError: () => { + toast({ + description: "Something went wrong while saving the note", + variant: "destructive", + }); + }, + onSettled: () => { + invalidateBookmarkCache({ bookmarkId: bookmark.id }); + }, + }); + + return ( +