import { Button, cn } from "@methanium/ui"; import { useStorage } from "@tensamin/storage/context"; import { Save } from "lucide-react"; import { useEffect, useState } from "react"; export default function MediaSaveButton({ ariaLabel, className, defaultSaved = false, onSavedMediaChange, url, }: { ariaLabel?: string; className?: string; defaultSaved?: boolean; onSavedMediaChange?: (savedMedia: string[]) => void; url: string; }) { const { load, save } = useStorage(); const [savedMedia, setSavedMedia] = useState(null); const isSaved = savedMedia ? savedMedia.includes(url) : defaultSaved; useEffect(() => { void load("chat_picker_saved_media").then(setSavedMedia); }, [load]); async function handleClick(event: React.MouseEvent) { event.stopPropagation(); const currentSavedMedia = savedMedia ?? (await load("chat_picker_saved_media")); const nextSavedMedia = currentSavedMedia.includes(url) ? currentSavedMedia.filter((item) => item !== url) : [url, ...currentSavedMedia]; setSavedMedia(nextSavedMedia); onSavedMediaChange?.(nextSavedMedia); void save("chat_picker_saved_media", nextSavedMedia); } return ( ); }