Skip to content

Commit ec90ea1

Browse files
authored
Merge pull request #531 from hacking-racoon/feat/video-slide-stop
feat(SearchVideos): modify Lightbox to pause the prev video when sliding
2 parents 01230bf + d30f714 commit ec90ea1

File tree

1 file changed

+28
-5
lines changed

1 file changed

+28
-5
lines changed

ui/components/SearchVideos.tsx

Lines changed: 28 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* eslint-disable @next/next/no-img-element */
22
import { PlayCircle, PlayIcon, PlusIcon, VideoIcon } from 'lucide-react';
3-
import { useState } from 'react';
3+
import { useRef, useState } from 'react';
44
import Lightbox, { GenericSlide, VideoSlide } from 'yet-another-react-lightbox';
55
import 'yet-another-react-lightbox/styles.css';
66
import { Message } from './ChatWindow';
@@ -35,6 +35,8 @@ const Searchvideos = ({
3535
const [loading, setLoading] = useState(false);
3636
const [open, setOpen] = useState(false);
3737
const [slides, setSlides] = useState<VideoSlide[]>([]);
38+
const [currentIndex, setCurrentIndex] = useState(0);
39+
const videoRefs = useRef<(HTMLIFrameElement | null)[]>([]);
3840

3941
return (
4042
<>
@@ -182,18 +184,39 @@ const Searchvideos = ({
182184
open={open}
183185
close={() => setOpen(false)}
184186
slides={slides}
187+
index={currentIndex}
188+
on={{
189+
view: ({ index }) => {
190+
const previousIframe = videoRefs.current[currentIndex];
191+
if (previousIframe?.contentWindow) {
192+
previousIframe.contentWindow.postMessage(
193+
'{"event":"command","func":"pauseVideo","args":""}',
194+
'*',
195+
);
196+
}
197+
198+
setCurrentIndex(index);
199+
},
200+
}}
185201
render={{
186-
slide: ({ slide }) =>
187-
slide.type === 'video-slide' ? (
202+
slide: ({ slide }) => {
203+
const index = slides.findIndex((s) => s === slide);
204+
return slide.type === 'video-slide' ? (
188205
<div className="h-full w-full flex flex-row items-center justify-center">
189206
<iframe
190-
src={slide.iframe_src}
207+
src={`${slide.iframe_src}${slide.iframe_src.includes('?') ? '&' : '?'}enablejsapi=1`}
208+
ref={(el) => {
209+
if (el) {
210+
videoRefs.current[index] = el;
211+
}
212+
}}
191213
className="aspect-video max-h-[95vh] w-[95vw] rounded-2xl md:w-[80vw]"
192214
allowFullScreen
193215
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
194216
/>
195217
</div>
196-
) : null,
218+
) : null;
219+
},
197220
}}
198221
/>
199222
</>

0 commit comments

Comments
 (0)