import React, { useEffect, useState } from "react"; import { Text, View } from "react-native"; import { BottomSheetBackdrop, BottomSheetModal, BottomSheetModalProps, BottomSheetTextInput, BottomSheetView, useBottomSheetModal, } from "@gorhom/bottom-sheet"; import { useCreateBookmark, useUpdateBookmarkText, } from "@hoarder/shared-react/hooks/bookmarks"; import { BookmarkTypes, ZBookmark } from "@hoarder/shared/types/bookmarks"; import { Button } from "../ui/Button"; import PageTitle from "../ui/PageTitle"; const NoteEditorModal = React.forwardRef< BottomSheetModal, Omit< BottomSheetModalProps, "children" | "backdropComponent" | "onDismiss" > & { bookmark?: ZBookmark; } >(({ bookmark, ...props }, ref) => { const { dismiss } = useBottomSheetModal(); const isEditing = !!bookmark; const [text, setText] = useState(""); const [error, setError] = useState(); const resetText = () => { if (bookmark) { if (bookmark.content.type !== BookmarkTypes.TEXT) { throw new Error("Wrong content type rendered"); } setText(bookmark.content.text); } }; useEffect(resetText, []); const onSuccess = () => { resetText(); dismiss(); }; const { mutate: createBookmark } = useCreateBookmark({ onSuccess, onError: (e) => { let message; if (e.data?.zodError) { const zodError = e.data.zodError; message = JSON.stringify(zodError); } else { message = `Something went wrong: ${e.message}`; } setError(message); }, }); const { mutate: updateBookmark } = useUpdateBookmarkText({ onSuccess, onError: (e) => { let message; if (e.data?.zodError) { const zodError = e.data.zodError; message = JSON.stringify(zodError); } else { message = `Something went wrong: ${e.message}`; } setError(message); }, }); const mutate = (text: string) => { if (isEditing) { updateBookmark({ bookmarkId: bookmark.id, text, }); } else { createBookmark({ type: BookmarkTypes.TEXT, text }); } }; return ( ( )} {...props} > {error && ( {error} )}