diff options
| author | kamtschatka <simon.schatka@gmx.at> | 2024-07-01 13:03:53 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-07-01 12:03:53 +0100 |
| commit | e6486465decd612f7e437abe904960a47ff359ce (patch) | |
| tree | f36fd7efbcf2a083905061d8c5f1310f36350ced /apps/web/components/dashboard/bookmarks | |
| parent | ccbff18a9763e458c07f46cb3a331062df14a9b9 (diff) | |
| download | karakeep-e6486465decd612f7e437abe904960a47ff359ce.tar.zst | |
refactor: added the bookmark type to the database (#256)
* refactoring asset types
Extracted out functions to silently delete assets and to update them after crawling
Generalized the mapping of assets to bookmark fields to make extending them easier
* Added the bookmark type to the database
Introduced an enum to have better type safety
cleaned up the code and based some code on the type directly
* add BookmarkType.UNKNWON
* lint and remove unused function
---------
Co-authored-by: MohamedBassem <me@mbassem.com>
Diffstat (limited to 'apps/web/components/dashboard/bookmarks')
4 files changed, 20 insertions, 13 deletions
diff --git a/apps/web/components/dashboard/bookmarks/BookmarkCard.tsx b/apps/web/components/dashboard/bookmarks/BookmarkCard.tsx index 76316de7..ec0d4069 100644 --- a/apps/web/components/dashboard/bookmarks/BookmarkCard.tsx +++ b/apps/web/components/dashboard/bookmarks/BookmarkCard.tsx @@ -1,7 +1,7 @@ import { api } from "@/lib/trpc"; -import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; import { isBookmarkStillLoading } from "@hoarder/shared-react/utils/bookmarkUtils"; +import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; import AssetCard from "./AssetCard"; import LinkCard from "./LinkCard"; @@ -34,21 +34,21 @@ export default function BookmarkCard({ ); switch (bookmark.content.type) { - case "link": + case BookmarkTypes.LINK: return ( <LinkCard className={className} bookmark={{ ...bookmark, content: bookmark.content }} /> ); - case "text": + case BookmarkTypes.TEXT: return ( <TextCard className={className} bookmark={{ ...bookmark, content: bookmark.content }} /> ); - case "asset": + case BookmarkTypes.ASSET: return ( <AssetCard className={className} diff --git a/apps/web/components/dashboard/bookmarks/BookmarkOptions.tsx b/apps/web/components/dashboard/bookmarks/BookmarkOptions.tsx index e5f38eae..4007090e 100644 --- a/apps/web/components/dashboard/bookmarks/BookmarkOptions.tsx +++ b/apps/web/components/dashboard/bookmarks/BookmarkOptions.tsx @@ -32,6 +32,7 @@ import { } from "@hoarder/shared-react/hooks//bookmarks"; import { useRemoveBookmarkFromList } from "@hoarder/shared-react/hooks//lists"; import { useBookmarkGridContext } from "@hoarder/shared-react/hooks/bookmark-grid-context"; +import { BookmarkTypes } from "@hoarder/shared/types/bookmarks"; import { BookmarkedTextEditor } from "./BookmarkedTextEditor"; import { ArchivedActionIcon, FavouritedActionIcon } from "./icons"; @@ -115,7 +116,7 @@ export default function BookmarkOptions({ bookmark }: { bookmark: ZBookmark }) { </Button> </DropdownMenuTrigger> <DropdownMenuContent className="w-fit"> - {bookmark.content.type === "text" && ( + {bookmark.content.type === BookmarkTypes.TEXT && ( <DropdownMenuItem onClick={() => setTextEditorOpen(true)}> <Pencil className="mr-2 size-4" /> <span>Edit</span> @@ -151,7 +152,7 @@ export default function BookmarkOptions({ bookmark }: { bookmark: ZBookmark }) { /> <span>{bookmark.archived ? "Un-archive" : "Archive"}</span> </DropdownMenuItem> - {bookmark.content.type === "link" && ( + {bookmark.content.type === BookmarkTypes.LINK && ( <DropdownMenuItem onClick={() => { navigator.clipboard.writeText( @@ -191,7 +192,7 @@ export default function BookmarkOptions({ bookmark }: { bookmark: ZBookmark }) { </DropdownMenuItem> )} - {bookmark.content.type === "link" && ( + {bookmark.content.type === BookmarkTypes.LINK && ( <DropdownMenuItem disabled={demoMode} onClick={() => diff --git a/apps/web/components/dashboard/bookmarks/BookmarkedTextEditor.tsx b/apps/web/components/dashboard/bookmarks/BookmarkedTextEditor.tsx index db69e1a3..74e94f94 100644 --- a/apps/web/components/dashboard/bookmarks/BookmarkedTextEditor.tsx +++ b/apps/web/components/dashboard/bookmarks/BookmarkedTextEditor.tsx @@ -14,7 +14,7 @@ import { Textarea } from "@/components/ui/textarea"; import { toast } from "@/components/ui/use-toast"; import { api } from "@/lib/trpc"; -import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; +import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; export function BookmarkedTextEditor({ bookmark, @@ -27,7 +27,9 @@ export function BookmarkedTextEditor({ }) { const isNewBookmark = bookmark === undefined; const [noteText, setNoteText] = useState( - bookmark && bookmark.content.type == "text" ? bookmark.content.text : "", + bookmark && bookmark.content.type == BookmarkTypes.TEXT + ? bookmark.content.text + : "", ); const invalidateOneBookmarksCache = diff --git a/apps/web/components/dashboard/bookmarks/EditorCard.tsx b/apps/web/components/dashboard/bookmarks/EditorCard.tsx index a1055e8e..78bd0742 100644 --- a/apps/web/components/dashboard/bookmarks/EditorCard.tsx +++ b/apps/web/components/dashboard/bookmarks/EditorCard.tsx @@ -19,6 +19,7 @@ import { useForm } from "react-hook-form"; import { z } from "zod"; import { useCreateBookmarkWithPostHook } from "@hoarder/shared-react/hooks/bookmarks"; +import { BookmarkTypes } from "@hoarder/shared/types/bookmarks"; import { useUploadAsset } from "../UploadDropzone"; @@ -99,7 +100,7 @@ export default function EditorCard({ className }: { className?: string }) { if (urls.length === 1) { // Only 1 url in the textfield --> simply import it - mutate({ type: "link", url: text }); + mutate({ type: BookmarkTypes.LINK, url: text }); return; } // multiple urls found --> ask the user if it should be imported as multiple URLs or as a text bookmark @@ -128,7 +129,7 @@ export default function EditorCard({ className }: { className?: string }) { tryToImportUrls(text); } catch (e) { // Not a URL - mutate({ type: "text", text }); + mutate({ type: BookmarkTypes.TEXT, text }); } }; @@ -240,7 +241,10 @@ export default function EditorCard({ className }: { className?: string }) { variant="secondary" loading={isPending} onClick={() => { - mutate({ type: "text", text: multiUrlImportState.text }); + mutate({ + type: BookmarkTypes.TEXT, + text: multiUrlImportState.text, + }); setMultiUrlImportState(null); }} > @@ -254,7 +258,7 @@ export default function EditorCard({ className }: { className?: string }) { loading={isPending} onClick={() => { multiUrlImportState.urls.forEach((url) => - mutate({ type: "link", url: url.toString() }), + mutate({ type: BookmarkTypes.LINK, url: url.toString() }), ); setMultiUrlImportState(null); }} |
