import { generateImageByPubkey } from '@/lib/pubkey' import { randomString } from '@/lib/random' import { cn } from '@/lib/utils' import modalManager from '@/services/modal-manager.service' import { useEffect, useMemo, useState } from 'react' import { createPortal } from 'react-dom' import Lightbox from 'yet-another-react-lightbox' import Zoom from 'yet-another-react-lightbox/plugins/zoom' import Image from '../Image' export default function ProfileBanner({ pubkey, banner, className }: { pubkey: string banner?: string className?: string }) { const defaultBanner = useMemo(() => generateImageByPubkey(pubkey), [pubkey]) const [bannerUrl, setBannerUrl] = useState(banner ?? defaultBanner) useEffect(() => { if (banner) { setBannerUrl(banner) } else { setBannerUrl(defaultBanner) } }, [defaultBanner, banner]) return ( {`${pubkey} ) } export function BannerWithLightbox({ pubkey, banner, className }: { pubkey: string banner?: string className?: string }) { const id = useMemo(() => `profile-banner-lightbox-${randomString()}`, []) const defaultBanner = useMemo(() => generateImageByPubkey(pubkey), [pubkey]) const [bannerUrl, setBannerUrl] = useState(banner ?? defaultBanner) const [index, setIndex] = useState(-1) useEffect(() => { if (banner) { setBannerUrl(banner) } else { setBannerUrl(defaultBanner) } }, [defaultBanner, banner]) useEffect(() => { if (index >= 0) { modalManager.register(id, () => { setIndex(-1) }) } else { modalManager.unregister(id) } }, [index, id]) const handleBannerClick = (event: React.MouseEvent) => { event.stopPropagation() event.preventDefault() setIndex(0) } return ( <> {`${pubkey} {index >= 0 && createPortal(
e.stopPropagation()}> = 0} close={() => setIndex(-1)} controller={{ closeOnBackdropClick: true, closeOnPullUp: true, closeOnPullDown: true }} styles={{ toolbar: { paddingTop: '2.25rem' } }} />
, document.body )} ) }