aboutsummaryrefslogtreecommitdiffstats
path: root/apps/web/components/dashboard/bookmarks
diff options
context:
space:
mode:
authorkamtschatka <simon.schatka@gmx.at>2024-07-01 13:03:53 +0200
committerGitHub <noreply@github.com>2024-07-01 12:03:53 +0100
commite6486465decd612f7e437abe904960a47ff359ce (patch)
treef36fd7efbcf2a083905061d8c5f1310f36350ced /apps/web/components/dashboard/bookmarks
parentccbff18a9763e458c07f46cb3a331062df14a9b9 (diff)
downloadkarakeep-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')
-rw-r--r--apps/web/components/dashboard/bookmarks/BookmarkCard.tsx8
-rw-r--r--apps/web/components/dashboard/bookmarks/BookmarkOptions.tsx7
-rw-r--r--apps/web/components/dashboard/bookmarks/BookmarkedTextEditor.tsx6
-rw-r--r--apps/web/components/dashboard/bookmarks/EditorCard.tsx12
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);
}}