import { ZBookmark } from "@hoarder/trpc/types/bookmarks";
import { ZBookmarkTags } from "@hoarder/trpc/types/tags";
import { Star, Archive, Trash } from "lucide-react-native";
import { View, Text, Image, ScrollView, Pressable } from "react-native";
import Markdown from "react-native-markdown-display";
import { api } from "@/lib/trpc";
function ActionBar({ bookmark }: { bookmark: ZBookmark }) {
const apiUtils = api.useUtils();
const { mutate: deleteBookmark } = api.bookmarks.deleteBookmark.useMutation({
onSuccess: () => {
apiUtils.bookmarks.getBookmarks.invalidate();
},
});
const { mutate: updateBookmark, variables } =
api.bookmarks.updateBookmark.useMutation({
onSuccess: () => {
apiUtils.bookmarks.getBookmarks.invalidate();
apiUtils.bookmarks.getBookmark.invalidate({ bookmarkId: bookmark.id });
},
});
return (
updateBookmark({
bookmarkId: bookmark.id,
favourited: !bookmark.favourited,
})
}
>
{(variables ? variables.favourited : bookmark.favourited) ? (
) : (
)}
updateBookmark({
bookmarkId: bookmark.id,
archived: !bookmark.archived,
})
}
>
deleteBookmark({
bookmarkId: bookmark.id,
})
}
>
);
}
function TagList({ tags }: { tags: ZBookmarkTags[] }) {
return (
{tags.map((t) => (
{t.name}
))}
);
}
function LinkCard({ bookmark }: { bookmark: ZBookmark }) {
if (bookmark.content.type !== "link") {
throw new Error("Wrong content type rendered");
}
const parsedUrl = new URL(bookmark.content.url);
return (
{bookmark.content.title || parsedUrl.host}
{parsedUrl.host}
);
}
function TextCard({ bookmark }: { bookmark: ZBookmark }) {
if (bookmark.content.type !== "text") {
throw new Error("Wrong content type rendered");
}
return (
{bookmark.content.text}
);
}
export default function BookmarkCard({
bookmark: initialData,
}: {
bookmark: ZBookmark;
}) {
const { data: bookmark } = api.bookmarks.getBookmark.useQuery(
{
bookmarkId: initialData.id,
},
{ initialData },
);
let comp;
switch (bookmark.content.type) {
case "link":
comp = ;
break;
case "text":
comp = ;
break;
}
return {comp};
}