import clsx from 'clsx' import { ComponentType, useEffect, useState } from 'react' import Confetti from 'react-confetti' import { useTranslation } from 'react-i18next' import { CopyToClipboard } from '../CopyToClipboard' import { Modal, ModalProps } from './Modal' export interface ItemCreatedModalProps { modalProps: Omit header: Required['header'] Item: ComponentType> itemProps: T url: string } export const ItemCreatedModal = < T extends { className?: string onMouseOver?: () => void onMouseLeave?: () => void }, >({ modalProps: { containerClassName: modalContainerClassName, ...modalProps } = {}, header, url, ...props }: ItemCreatedModalProps) => { const { t } = useTranslation() const [confettiVisible, setConfettiVisible] = useState(true) const [recycleConfetti, setRecycleConfetti] = useState(false) // Turn confetti off and back on. const [resetConfetti, setResetConfetti] = useState(false) useEffect(() => { if (resetConfetti && !confettiVisible) { setResetConfetti(false) setConfettiVisible(true) } }, [confettiVisible, resetConfetti]) return (
{confettiVisible && ( setConfettiVisible(false)} recycle={recycleConfetti} /> )}
setRecycleConfetti(false)} onMouseOver={() => { setRecycleConfetti(true) setConfettiVisible(true) }} />
{ setResetConfetti(true) setConfettiVisible(false) }} takeAll textClassName="!bg-transparent" tooltip={t('button.copyToClipboard')} value={url} />
) }