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/preview | |
| 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/preview')
5 files changed, 20 insertions, 16 deletions
diff --git a/apps/web/components/dashboard/preview/AssetContentSection.tsx b/apps/web/components/dashboard/preview/AssetContentSection.tsx index 4d6bb976..03ab8a43 100644 --- a/apps/web/components/dashboard/preview/AssetContentSection.tsx +++ b/apps/web/components/dashboard/preview/AssetContentSection.tsx @@ -1,10 +1,10 @@ import Image from "next/image"; import Link from "next/link"; -import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; +import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; export function AssetContentSection({ bookmark }: { bookmark: ZBookmark }) { - if (bookmark.content.type != "asset") { + if (bookmark.content.type != BookmarkTypes.ASSET) { throw new Error("Invalid content type"); } diff --git a/apps/web/components/dashboard/preview/BookmarkPreview.tsx b/apps/web/components/dashboard/preview/BookmarkPreview.tsx index 6a1068af..01e57e05 100644 --- a/apps/web/components/dashboard/preview/BookmarkPreview.tsx +++ b/apps/web/components/dashboard/preview/BookmarkPreview.tsx @@ -17,11 +17,11 @@ import dayjs from "dayjs"; import relativeTime from "dayjs/plugin/relativeTime"; import { CalendarDays, ExternalLink } from "lucide-react"; -import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; import { isBookmarkStillCrawling, isBookmarkStillLoading, } from "@hoarder/shared-react/utils/bookmarkUtils"; +import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; import ActionBar from "./ActionBar"; import { AssetContentSection } from "./AssetContentSection"; @@ -66,10 +66,10 @@ function CreationTime({ createdAt }: { createdAt: Date }) { } function getSourceUrl(bookmark: ZBookmark) { - if (bookmark.content.type === "link") { + if (bookmark.content.type === BookmarkTypes.LINK) { return bookmark.content.url; } - if (bookmark.content.type === "asset") { + if (bookmark.content.type === BookmarkTypes.ASSET) { return bookmark.content.sourceUrl; } return null; @@ -108,15 +108,15 @@ export default function BookmarkPreview({ let content; switch (bookmark.content.type) { - case "link": { + case BookmarkTypes.LINK: { content = <LinkContentSection bookmark={bookmark} />; break; } - case "text": { + case BookmarkTypes.TEXT: { content = <TextContentSection bookmark={bookmark} />; break; } - case "asset": { + case BookmarkTypes.ASSET: { content = <AssetContentSection bookmark={bookmark} />; break; } diff --git a/apps/web/components/dashboard/preview/EditableTitle.tsx b/apps/web/components/dashboard/preview/EditableTitle.tsx index 237ad108..03b95e74 100644 --- a/apps/web/components/dashboard/preview/EditableTitle.tsx +++ b/apps/web/components/dashboard/preview/EditableTitle.tsx @@ -1,7 +1,7 @@ import { toast } from "@/components/ui/use-toast"; import { useUpdateBookmark } from "@hoarder/shared-react/hooks/bookmarks"; -import { ZBookmark } from "@hoarder/shared/types/bookmarks"; +import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; import { EditableText } from "../EditableText"; @@ -16,13 +16,13 @@ export function EditableTitle({ bookmark }: { bookmark: ZBookmark }) { let title: string | null = null; switch (bookmark.content.type) { - case "link": + case BookmarkTypes.LINK: title = bookmark.content.title ?? bookmark.content.url; break; - case "text": + case BookmarkTypes.TEXT: title = null; break; - case "asset": + case BookmarkTypes.ASSET: title = bookmark.content.fileName ?? null; break; } diff --git a/apps/web/components/dashboard/preview/LinkContentSection.tsx b/apps/web/components/dashboard/preview/LinkContentSection.tsx index 3aeacdcd..f2069821 100644 --- a/apps/web/components/dashboard/preview/LinkContentSection.tsx +++ b/apps/web/components/dashboard/preview/LinkContentSection.tsx @@ -10,7 +10,11 @@ import { } from "@/components/ui/select"; import { ScrollArea } from "@radix-ui/react-scroll-area"; -import { ZBookmark, ZBookmarkedLink } from "@hoarder/shared/types/bookmarks"; +import { + BookmarkTypes, + ZBookmark, + ZBookmarkedLink, +} from "@hoarder/shared/types/bookmarks"; function FullPageArchiveSection({ link }: { link: ZBookmarkedLink }) { return ( @@ -63,7 +67,7 @@ export default function LinkContentSection({ }) { const [section, setSection] = useState<string>("cached"); - if (bookmark.content.type != "link") { + if (bookmark.content.type != BookmarkTypes.LINK) { throw new Error("Invalid content type"); } diff --git a/apps/web/components/dashboard/preview/TextContentSection.tsx b/apps/web/components/dashboard/preview/TextContentSection.tsx index 2df1e964..76cb23ea 100644 --- a/apps/web/components/dashboard/preview/TextContentSection.tsx +++ b/apps/web/components/dashboard/preview/TextContentSection.tsx @@ -1,10 +1,10 @@ import { MarkdownComponent } from "@/components/ui/markdown-component"; import { ScrollArea } from "@radix-ui/react-scroll-area"; -import type { ZBookmark } from "@hoarder/shared/types/bookmarks"; +import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; export function TextContentSection({ bookmark }: { bookmark: ZBookmark }) { - if (bookmark.content.type != "text") { + if (bookmark.content.type != BookmarkTypes.TEXT) { throw new Error("Invalid content type"); } return ( |
