"use client"; import Image from "next/image"; import { useEffect, useState } from "react"; import { createPortal } from "react-dom"; import { Icon } from "@iconify/react"; interface Props { miiId: number; } export default function ShareMiiButton({ miiId }: Props) { const [isOpen, setIsOpen] = useState(false); const [isVisible, setIsVisible] = useState(false); const [hasCopiedUrl, setHasCopiedUrl] = useState(false); const [hasCopiedImage, setHasCopiedImage] = useState(false); const url = `${process.env.NEXT_PUBLIC_BASE_URL}/mii/${miiId}`; const handleCopyUrl = async () => { await navigator.clipboard.writeText(url); setHasCopiedUrl(true); // Reset to trigger exit animation setTimeout(() => { setHasCopiedUrl(false); }, 750); }; const handleCopyImage = async () => { const response = await fetch(`/mii/${miiId}/image?type=metadata`); const blob = await response.blob(); await navigator.clipboard.write([new ClipboardItem({ [blob.type]: blob })]); setHasCopiedImage(true); // Reset to trigger exit animation setTimeout(() => { setHasCopiedImage(false); }, 750); }; const close = () => { setIsVisible(false); setTimeout(() => { setIsOpen(false); }, 300); }; useEffect(() => { if (isOpen) { // slight delay to trigger animation setTimeout(() => setIsVisible(true), 10); } }, [isOpen]); return ( <> {isOpen && createPortal(
, document.body )} > ); }