|
@@ -0,0 +1,69 @@
|
|
|
|
|
+import { useEffect, useRef, useState } from "react";
|
|
|
|
|
+import players from "video.js";
|
|
|
|
|
+import VideoPlayer from "./VideoPlayer";
|
|
|
|
|
+import type { IAttachmentResponse } from "../../api/Attachments";
|
|
|
|
|
+import { get } from "../../request";
|
|
|
|
|
+
|
|
|
|
|
+interface IWidget {
|
|
|
|
|
+ fileName?: string;
|
|
|
|
|
+ fileId?: string;
|
|
|
|
|
+ src?: string;
|
|
|
|
|
+ type?: string;
|
|
|
|
|
+}
|
|
|
|
|
+const VideoWidget = ({ fileId, src, type }: IWidget) => {
|
|
|
|
|
+ const playerRef = useRef<players.Player | null>(null);
|
|
|
|
|
+ const [url, setUrl] = useState<string>();
|
|
|
|
|
+
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ if (fileId) {
|
|
|
|
|
+ const url = `/v2/attachment/${fileId}`;
|
|
|
|
|
+ console.info("VideoWidget api request", url);
|
|
|
|
|
+ get<IAttachmentResponse>(url).then((json) => {
|
|
|
|
|
+ console.debug("VideoWidget api response", json);
|
|
|
|
|
+ if (json.ok) {
|
|
|
|
|
+ setUrl(json.data.url);
|
|
|
|
|
+ }
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ }, [fileId]);
|
|
|
|
|
+
|
|
|
|
|
+ useEffect(() => {
|
|
|
|
|
+ if (src) {
|
|
|
|
|
+ setUrl(src);
|
|
|
|
|
+ }
|
|
|
|
|
+ }, [src]);
|
|
|
|
|
+
|
|
|
|
|
+ const handlePlayerReady = (player: players.Player) => {
|
|
|
|
|
+ if (playerRef.current) {
|
|
|
|
|
+ playerRef.current = player;
|
|
|
|
|
+ player.on("waiting", () => {
|
|
|
|
|
+ console.log("player is waiting");
|
|
|
|
|
+ });
|
|
|
|
|
+
|
|
|
|
|
+ player.on("dispose", () => {
|
|
|
|
|
+ console.log("player will dispose");
|
|
|
|
|
+ });
|
|
|
|
|
+ }
|
|
|
|
|
+ };
|
|
|
|
|
+
|
|
|
|
|
+ return (
|
|
|
|
|
+ <VideoPlayer
|
|
|
|
|
+ options={{
|
|
|
|
|
+ autoplay: false,
|
|
|
|
|
+ controls: true,
|
|
|
|
|
+ responsive: true,
|
|
|
|
|
+ fluid: true,
|
|
|
|
|
+ poster: "",
|
|
|
|
|
+ sources: [
|
|
|
|
|
+ {
|
|
|
|
|
+ src: url ? url : "",
|
|
|
|
|
+ type: type ? type : "video/mp4",
|
|
|
|
|
+ },
|
|
|
|
|
+ ],
|
|
|
|
|
+ }}
|
|
|
|
|
+ onReady={handlePlayerReady}
|
|
|
|
|
+ />
|
|
|
|
|
+ );
|
|
|
|
|
+};
|
|
|
|
|
+
|
|
|
|
|
+export default VideoWidget;
|