import { useState } from "react"; import { HTTP_BACKEND_URL } from "../config"; import { Button } from "./ui/button"; import { Input } from "./ui/input"; import { toast } from "react-hot-toast"; import { useStore } from "../store/store"; import { useAuth } from "@clerk/clerk-react"; interface Props { screenshotOneApiKey: string | null; doCreate: (urls: string[], inputMode: "image" | "video") => void; } export function UrlInputSection({ doCreate, screenshotOneApiKey }: Props) { const [isLoading, setIsLoading] = useState(false); const [referenceUrl, setReferenceUrl] = useState(""); // Hosted version only const subscriberTier = useStore((state) => state.subscriberTier); const { getToken } = useAuth(); async function takeScreenshot() { if (!referenceUrl) { return toast.error("Please enter a URL"); } if (!screenshotOneApiKey && subscriberTier === "free") { return toast.error( "Please upgrade to a paid plan to use the screenshot feature." ); } if (referenceUrl) { try { setIsLoading(true); const authToken = await getToken(); const response = await fetch(`${HTTP_BACKEND_URL}/api/screenshot`, { method: "POST", body: JSON.stringify({ url: referenceUrl, apiKey: screenshotOneApiKey, authToken, }), headers: { "Content-Type": "application/json", }, }); if (!response.ok) { throw new Error("Failed to capture screenshot"); } const res = await response.json(); doCreate([res.url], "image"); } catch (error) { console.error(error); toast.error( "Failed to capture screenshot. Look at the console and your backend logs for more details." ); } finally { setIsLoading(false); } } } return (
Or screenshot a URL...
setReferenceUrl(e.target.value)} value={referenceUrl} />
); }