Skip to content

Commit 15ea643

Browse files
committed
code improved
1 parent 9177f2e commit 15ea643

1 file changed

Lines changed: 32 additions & 41 deletions

File tree

src/index.tsx

Lines changed: 32 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import {
22
useRef,
33
useEffect,
4-
useState,
54
forwardRef,
65
useImperativeHandle,
76
type CSSProperties
@@ -38,11 +37,6 @@ interface GumletPlayerProps {
3837
[key: string]: any; // Allow additional props for iframe src query params
3938
}
4039

41-
// declare global {
42-
// interface Window {
43-
// playerJsObj: any;
44-
// }
45-
// }
4640

4741
export interface GumletPlayerHandle {
4842
play: () => void;
@@ -74,7 +68,7 @@ export const GumletPlayer = forwardRef<GumletPlayerHandle, GumletPlayerProps>(
7468
ref
7569
) => {
7670
const iframeRef = useRef<HTMLIFrameElement>(null);
77-
const [playerJSObject, setPlayerJSObject] = useState<any>(null);
71+
const playerRef = useRef<any>(null);
7872

7973
const propsRef = useRef(props);
8074
propsRef.current = props;
@@ -103,6 +97,32 @@ export const GumletPlayer = forwardRef<GumletPlayerHandle, GumletPlayerProps>(
10397
'onPlaybackRateChange',
10498
]
10599

100+
const play = () => playerRef.current?.play();
101+
const pause = () => playerRef.current?.pause();
102+
const mute = () => playerRef.current?.mute();
103+
const unmute = () => playerRef.current?.unmute();
104+
const setVolume = (volume: number) => playerRef.current?.setVolume(volume);
105+
const setCurrentTime = (time: number) => playerRef.current?.setCurrentTime(time);
106+
const setPlaybackRate = (rate: number) => playerRef.current?.setPlaybackRate(rate);
107+
108+
const getPaused = (): Promise<boolean> =>
109+
new Promise((resolve) => playerRef.current?.getPaused(resolve));
110+
111+
const getMuted = (): Promise<boolean> =>
112+
new Promise((resolve) => playerRef.current?.getMuted(resolve));
113+
114+
const getVolume = (): Promise<number> =>
115+
new Promise((resolve) => playerRef.current?.getVolume(resolve));
116+
117+
const getDuration = (): Promise<number> =>
118+
new Promise((resolve) => playerRef.current?.getDuration(resolve));
119+
120+
const getCurrentTime = (): Promise<number> =>
121+
new Promise((resolve) => playerRef.current?.getCurrentTime(resolve));
122+
123+
const getPlaybackRate = (): Promise<number> =>
124+
new Promise((resolve) => playerRef.current?.getPlaybackRate(resolve));
125+
106126
useImperativeHandle(ref, () => ({
107127
play,
108128
pause,
@@ -121,17 +141,11 @@ export const GumletPlayer = forwardRef<GumletPlayerHandle, GumletPlayerProps>(
121141

122142
useEffect(() => {
123143
if (!iframeRef.current) return;
124-
const PlayerClass = playerjs.Player;
125-
126-
if (!PlayerClass) {
127-
console.error("PlayerJS Player class not found in import.");
128-
return;
129-
}
130144

131-
const player = new PlayerClass(iframeRef.current);
145+
const player = new playerjs.Player(iframeRef.current);
132146

133147
// window.playerJsObj = player; // For debugging purposes
134-
setPlayerJSObject(player);
148+
playerRef.current = player;
135149
player.on('ready', () => {
136150
propsRef.current.onReady?.();
137151

@@ -150,36 +164,13 @@ export const GumletPlayer = forwardRef<GumletPlayerHandle, GumletPlayerProps>(
150164
player.on('error', (e: any) => propsRef.current.onError?.(e));
151165
player.on('playbackRateChange', (e: any) => propsRef.current.onPlaybackRateChange?.(e));
152166
});
167+
return () => {
168+
playerRef.current = null;
169+
};
153170
}, []);
154171

155172
if (!videoID) return <div>Error: videoID is required</div>;
156173

157-
const play = () => playerJSObject?.play();
158-
const pause = () => playerJSObject?.pause();
159-
const mute = () => playerJSObject?.mute();
160-
const unmute = () => playerJSObject?.unmute();
161-
const setVolume = (volume: number) => playerJSObject?.setVolume(volume);
162-
const setCurrentTime = (time: number) => playerJSObject?.setCurrentTime(time);
163-
const setPlaybackRate = (rate: number) => playerJSObject?.setPlaybackRate(rate);
164-
165-
const getPaused = (): Promise<boolean> =>
166-
new Promise((resolve) => playerJSObject?.getPaused(resolve));
167-
168-
const getMuted = (): Promise<boolean> =>
169-
new Promise((resolve) => playerJSObject?.getMuted(resolve));
170-
171-
const getVolume = (): Promise<number> =>
172-
new Promise((resolve) => playerJSObject?.getVolume(resolve));
173-
174-
const getDuration = (): Promise<number> =>
175-
new Promise((resolve) => playerJSObject?.getDuration(resolve));
176-
177-
const getCurrentTime = (): Promise<number> =>
178-
new Promise((resolve) => playerJSObject?.getCurrentTime(resolve));
179-
180-
const getPlaybackRate = (): Promise<number> =>
181-
new Promise((resolve) => playerJSObject?.getPlaybackRate(resolve));
182-
183174
const defaultVersion = 'play';
184175
const domain = props.version ? `${props.version}` : `${defaultVersion}`;
185176
const srcURL = new URL(`https://${domain}.gumlet.io/embed${isLive ? '/live' : ''}/${videoID}`);

0 commit comments

Comments
 (0)