Eugen Rochko 5e7c079787 [Glitch] Change design of edit media modal in web UI
Port 11786f1114f9dfb5a17810d14477a94162f94064 to glitch-soc

Signed-off-by: Claire <claire.github-309c@sitedethib.com>
2025-01-21 19:43:38 +01:00

71 lines
1.5 KiB
TypeScript

import { useCallback, useState, forwardRef } from 'react';
interface Props {
src: string;
alt?: string;
lang?: string;
width?: number;
height?: number;
onClick?: React.MouseEventHandler;
onMouseDown?: React.MouseEventHandler;
onTouchStart?: React.TouchEventHandler;
}
export const GIFV = forwardRef<HTMLVideoElement, Props>(
(
{ src, alt, lang, width, height, onClick, onMouseDown, onTouchStart },
ref,
) => {
const [loading, setLoading] = useState(true);
const handleLoadedData = useCallback(() => {
setLoading(false);
}, [setLoading]);
const handleClick = useCallback(
(e: React.MouseEvent) => {
e.stopPropagation();
onClick?.(e);
},
[onClick],
);
return (
<div className='gifv'>
{loading && (
<canvas
role='button'
tabIndex={0}
aria-label={alt}
title={alt}
lang={lang}
onClick={handleClick}
/>
)}
<video
ref={ref}
src={src}
role='button'
tabIndex={0}
aria-label={alt}
title={alt}
lang={lang}
width={width}
height={height}
muted
loop
autoPlay
playsInline
onClick={handleClick}
onLoadedData={handleLoadedData}
onMouseDown={onMouseDown}
onTouchStart={onTouchStart}
/>
</div>
);
},
);
GIFV.displayName = 'GIFV';