refactor: video msg
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
import { useRef, useState } from 'react';
|
import { SyntheticEvent } from 'react';
|
||||||
import { formatBytes } from '../../utils';
|
import { formatBytes } from '../../utils';
|
||||||
import IconDownload from "../../../assets/icons/download.svg";
|
import IconDownload from "../../../assets/icons/download.svg";
|
||||||
import IconVideo from "../../../assets/icons/file.video.svg";
|
import IconVideo from "../../../assets/icons/file.video.svg";
|
||||||
@@ -11,36 +11,33 @@ type Props = {
|
|||||||
}
|
}
|
||||||
|
|
||||||
const VideoMessage = ({ url, name, size, download }: Props) => {
|
const VideoMessage = ({ url, name, size, download }: Props) => {
|
||||||
const videoRef = useRef<HTMLVideoElement>(null);
|
|
||||||
const [playing, setPlaying] = useState(false);
|
|
||||||
const _size = formatBytes(size);
|
const _size = formatBytes(size);
|
||||||
const handlePlaying = () => {
|
const handlePlay = (evt: SyntheticEvent<HTMLVideoElement>) => {
|
||||||
setPlaying(true);
|
const infoEle = evt.currentTarget.previousSibling;
|
||||||
};
|
if (infoEle) {
|
||||||
const handlePause = () => {
|
(infoEle as HTMLDivElement).classList.add("hidden");
|
||||||
if (videoRef && videoRef.current) {
|
}
|
||||||
if (videoRef.current.seeking) return;
|
};
|
||||||
|
const handlePause = (evt: SyntheticEvent<HTMLVideoElement>) => {
|
||||||
|
const infoEle = evt.currentTarget.previousSibling;
|
||||||
|
if (infoEle) {
|
||||||
|
(infoEle as HTMLDivElement).classList.remove("hidden");
|
||||||
}
|
}
|
||||||
setPlaying(false);
|
|
||||||
};
|
};
|
||||||
return (
|
return (
|
||||||
<div className='w-96 h-52 relative rounded-md border border-solid border-gray-300 overflow-hidden group'>
|
<div className='w-96 h-52 relative rounded-md border border-solid border-gray-300 overflow-hidden group'>
|
||||||
{!playing &&
|
<div className="absolute top-0 left-0 w-full h-full bg-black/40 z-20 group-hover:hidden"></div>
|
||||||
<>
|
<div className="absolute top-0 left-0 w-full flex justify-between z-30 px-3 py-2 overflow-hidden group-hover:bg-black/20">
|
||||||
<div className="absolute top-0 left-0 w-full h-full bg-black/40 z-20 group-hover:hidden"></div>
|
<div className="flex gap-2 ">
|
||||||
<div className="absolute top-0 left-0 w-full flex justify-between z-30 px-3 py-2 overflow-hidden group-hover:bg-black/20">
|
<IconVideo className="w-9 h-auto" />
|
||||||
<div className="flex gap-2 ">
|
<div className="flex flex-col gap-1 text-sm text-white">
|
||||||
<IconVideo className="w-9 h-auto" />
|
<span title={name} className='font-bold whitespace-nowrap text-ellipsis w-[240px] overflow-hidden'>{name}</span>
|
||||||
<div className="flex flex-col gap-1 text-sm text-white">
|
<span>{_size}</span>
|
||||||
<span title={name} className='font-bold whitespace-nowrap text-ellipsis w-[240px] overflow-hidden'>{name}</span>
|
|
||||||
<span>{_size}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<a href={download} className="mt-2"><IconDownload className="fill-white" /></a>
|
|
||||||
</div>
|
</div>
|
||||||
</>
|
</div>
|
||||||
}
|
<a href={download} className="mt-2"><IconDownload className="fill-white" /></a>
|
||||||
<video ref={videoRef} onPlaying={handlePlaying} onPause={handlePause} src={url} controls className="absolute left-0 top-0 w-full h-full object-cover z-10" />
|
</div>
|
||||||
|
<video onPlay={handlePlay} onPause={handlePause} src={url} controls className="absolute left-0 top-0 w-full h-full object-cover z-10" />
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user