import React, { useState } from "react"; import { Keyboard, Pressable, Text } from "react-native"; import { BottomSheetBackdrop, BottomSheetModal, BottomSheetModalProps, BottomSheetScrollView, BottomSheetView, TouchableWithoutFeedback, } from "@gorhom/bottom-sheet"; import { useUpdateBookmark, useUpdateBookmarkText, } from "@hoarder/shared-react/hooks/bookmarks"; import { isBookmarkStillTagging } from "@hoarder/shared-react/utils/bookmarkUtils"; import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; import { Input } from "../ui/Input"; import PageTitle from "../ui/PageTitle"; import { Skeleton } from "../ui/Skeleton"; import { useToast } from "../ui/Toast"; import BookmarkAssetImage from "./BookmarkAssetImage"; import BookmarkTextMarkdown from "./BookmarkTextMarkdown"; import TagPill from "./TagPill"; function TagList({ bookmark }: { bookmark: ZBookmark }) { return ( Tags {isBookmarkStillTagging(bookmark) ? ( <> ) : bookmark.tags.length > 0 ? ( {bookmark.tags.map((t) => ( ))} ) : ( No tags )} ); } function NotesEditor({ bookmark }: { bookmark: ZBookmark }) { const { mutate, isPending } = useUpdateBookmark(); return ( Notes mutate({ bookmarkId: bookmark.id, note: ev.nativeEvent.text, }) } defaultValue={bookmark.note ?? ""} /> ); } function BookmarkTextView({ bookmark }: { bookmark: ZBookmark }) { if (bookmark.content.type !== BookmarkTypes.TEXT) { throw new Error("Wrong content type rendered"); } const { toast } = useToast(); const [isEditing, setIsEditing] = useState(false); const [content, setContent] = useState(bookmark.content.text); const { mutate, isPending } = useUpdateBookmarkText({ onError: () => { toast({ message: "Something went wrong", variant: "destructive", }); }, onSuccess: () => { setIsEditing(false); }, }); return ( {isEditing ? ( mutate({ bookmarkId: bookmark.id, text: content, }) } value={content} onChangeText={setContent} multiline autoFocus /> ) : ( setIsEditing(true)}> )} ); } function BookmarkAssetView({ bookmark }: { bookmark: ZBookmark }) { if (bookmark.content.type !== BookmarkTypes.ASSET) { throw new Error("Wrong content type rendered"); } return ( ); } const ViewBookmarkModal = React.forwardRef< BottomSheetModal, Omit< BottomSheetModalProps, "children" | "backdropComponent" | "onDismiss" > & { bookmark: ZBookmark; } >(({ bookmark, ...props }, ref) => { let comp; let title = null; switch (bookmark.content.type) { case BookmarkTypes.LINK: comp = null; break; case BookmarkTypes.TEXT: title = bookmark.title; comp = ; break; case BookmarkTypes.ASSET: title = bookmark.title ?? bookmark.content.fileName; comp = ; break; } return ( ( )} {...props} > {comp} ); }); ViewBookmarkModal.displayName = "ViewBookmarkModal"; export default ViewBookmarkModal;