import React, { useState } from "react"; import { Text, View } from "react-native"; import { BottomSheetBackdrop, BottomSheetModal, BottomSheetModalProps, BottomSheetView, useBottomSheetModal, } from "@gorhom/bottom-sheet"; import { useCreateBookmark } from "@hoarder/shared-react/hooks/bookmarks"; import { BookmarkTypes } from "@hoarder/shared/types/bookmarks"; import { Button } from "../ui/Button"; import { Input } from "../ui/Input"; import PageTitle from "../ui/PageTitle"; import { useToast } from "../ui/Toast"; const NoteEditorModal = React.forwardRef< BottomSheetModal, Omit >(({ ...props }, ref) => { const { dismiss } = useBottomSheetModal(); const [text, setText] = useState(""); const [error, setError] = useState(); const { toast } = useToast(); const { mutate: createBookmark } = useCreateBookmark({ onSuccess: (resp) => { if (resp.alreadyExists) { toast({ message: "Bookmark already exists", }); } setText(""); dismiss(); }, 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 onSubmit = () => { const data = text.trim(); try { const url = new URL(data); if (url.protocol != "http:" && url.protocol != "https:") { throw new Error(`Unsupported URL protocol: ${url.protocol}`); } createBookmark({ type: BookmarkTypes.LINK, url: data }); } catch (e: unknown) { createBookmark({ type: BookmarkTypes.TEXT, text: data }); } }; return ( ( )} {...props} > {error && ( {error} )}