import { Skeleton } from '@/@dble_layout'; import React, { HTMLAttributes, SVGProps, useEffect, useRef, useState } from 'react'; import ImageInstance from './Image'; import { PopupAvatarWrapper } from './instances/PopupAvatarWrapper'; // type Types = { source: string; alt: string; size?: number | string; borderRadius?: number | string; zoomUp?: boolean; zoomUpImageSize?: number; isLoading?: boolean; } & HTMLAttributes; // const Avatar = ({ source, alt, size = 30, borderRadius = 1000, zoomUp, zoomUpImageSize, onClick, isLoading, ...props }: Types) => { const imgRef = useRef(null); const [zoomImg, setZoomImg] = useState(false); const [showZoomImage, setShowZoomImage] = useState(false); const source_instance = !!source || (!!source && /\.(png|jpg|jpeg|webp)$/.test(source)); const sizes = { width: size, minWidth: size, maxWidth: size, height: size, minHeight: size, maxHeight: size, }; useEffect(() => { const clickModalOutside = (event: MouseEvent) => { if (zoomImg && imgRef.current && !imgRef.current.contains(event.target as Node)) setZoomImg(false); }; if (zoomImg) document.body.style.overflowY = 'hidden'; else document.body.style.overflowY = 'auto'; document.addEventListener('mousedown', clickModalOutside); return () => { document.removeEventListener('mousedown', clickModalOutside); }; }, [zoomImg]); useEffect(() => { if (zoomImg) { const scrollY = window.scrollY; document.body.style.position = 'fixed'; document.body.style.top = `-${scrollY}px`; document.body.style.overflowY = 'hidden'; const timer = setTimeout(() => { setShowZoomImage(true); }, 200); return () => clearTimeout(timer); } else { const scrollY = document.body.style.top; document.body.style.position = ''; document.body.style.top = ''; document.body.style.overflowY = 'auto'; window.scrollTo(0, parseInt(scrollY || '0') * -1); setShowZoomImage(false); } }, [zoomImg]); // // handleOnClick const handleOnClick = (event: React.MouseEvent) => { if (!!source && zoomUp) { setZoomImg(true); onClick && onClick(event); } else if (onClick) onClick(event); }; return ( <> {isLoading ? ( ) : ( <> {source_instance ? ( ) : ( )} > )} )} {!isLoading && zoomImg && showZoomImage && (
)} ); }; export default Avatar;