import { useState } from "react";
import Image from "next/image";
import BookmarkHTMLHighlighter from "@/components/dashboard/preview/BookmarkHtmlHighlighter";
import { FullPageSpinner } from "@/components/ui/full-page-spinner";
import {
Select,
SelectContent,
SelectGroup,
SelectItem,
SelectTrigger,
SelectValue,
} from "@/components/ui/select";
import { toast } from "@/components/ui/use-toast";
import { useTranslation } from "@/lib/i18n/client";
import { api } from "@/lib/trpc";
import { ScrollArea } from "@radix-ui/react-scroll-area";
import {
useCreateHighlight,
useDeleteHighlight,
useUpdateHighlight,
} from "@karakeep/shared-react/hooks/highlights";
import {
BookmarkTypes,
ZBookmark,
ZBookmarkedLink,
} from "@karakeep/shared/types/bookmarks";
function FullPageArchiveSection({ link }: { link: ZBookmarkedLink }) {
const archiveAssetId =
link.fullPageArchiveAssetId ?? link.precrawledArchiveAssetId;
return (
);
}
function ScreenshotSection({ link }: { link: ZBookmarkedLink }) {
return (
);
}
function CachedContentSection({ bookmarkId }: { bookmarkId: string }) {
const { data: highlights } = api.highlights.getForBookmark.useQuery({
bookmarkId,
});
const { data: cachedContent, isPending: isCachedContentLoading } =
api.bookmarks.getBookmark.useQuery(
{
bookmarkId,
includeContent: true,
},
{
select: (data) =>
data.content.type == BookmarkTypes.LINK
? data.content.htmlContent
: null,
},
);
const { mutate: createHighlight } = useCreateHighlight({
onSuccess: () => {
toast({
description: "Highlight has been created!",
});
},
onError: () => {
toast({
variant: "destructive",
description: "Something went wrong",
});
},
});
const { mutate: updateHighlight } = useUpdateHighlight({
onSuccess: () => {
toast({
description: "Highlight has been updated!",
});
},
onError: () => {
toast({
variant: "destructive",
description: "Something went wrong",
});
},
});
const { mutate: deleteHighlight } = useDeleteHighlight({
onSuccess: () => {
toast({
description: "Highlight has been deleted!",
});
},
onError: () => {
toast({
variant: "destructive",
description: "Something went wrong",
});
},
});
let content;
if (isCachedContentLoading) {
content = ;
} else if (!cachedContent) {
content = (
Failed to fetch link content ...
);
} else {
content = (
deleteHighlight({
highlightId: h.id,
})
}
onUpdateHighlight={(h) =>
updateHighlight({
highlightId: h.id,
color: h.color,
})
}
onHighlight={(h) =>
createHighlight({
startOffset: h.startOffset,
endOffset: h.endOffset,
color: h.color,
bookmarkId,
text: h.text,
note: null,
})
}
/>
);
}
return {content};
}
function VideoSection({ link }: { link: ZBookmarkedLink }) {
return (
{/* eslint-disable-next-line jsx-a11y/media-has-caption -- captions not (yet) available */}
);
}
export default function LinkContentSection({
bookmark,
}: {
bookmark: ZBookmark;
}) {
const { t } = useTranslation();
const [section, setSection] = useState("cached");
if (bookmark.content.type != BookmarkTypes.LINK) {
throw new Error("Invalid content type");
}
let content;
if (section === "cached") {
content = ;
} else if (section === "archive") {
content = ;
} else if (section === "video") {
content = ;
} else {
content = ;
}
return (
{content}
);
}