| Server IP : 193.146.211.90 / Your IP : 10.85.6.55 Web Server : Apache System : Linux wordpress-gti-69dcdb54f7-n4wdq 6.11.8-arch1-2 #1 SMP PREEMPT_DYNAMIC Fri, 15 Nov 2024 15:35:07 +0000 x86_64 User : 1001 ( 1001) PHP Version : 8.2.25 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : ON | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /bitnami/wordpress/wp-content/plugins/presto-player/src/admin/blocks/blocks/ |
Upload File : |
/**
* WordPress dependencies
*/
const { createHigherOrderComponent } = wp.compose;
const { useEffect, useState } = wp.element;
import { usePrevious } from "@/admin/blocks/util";
import apiFetch from "@/shared/services/fetch";
/**
* Higher order component factory for injecting the editor colors as the
* `colors` prop in the `withColors` HOC.
*
* @return {Function} The higher order component.
*/
export default () =>
createHigherOrderComponent(
(WrappedComponent) => (props) => {
const {
presets,
attributes,
setAttributes,
defaultPreset,
isSelected,
branding,
} = props;
const [presetData, setPresetData] = useState({});
const [count, setCount] = useState(1);
let { poster, chapters } = attributes;
// don't allow selection if there is an override
useEffect(() => {
if (isSelected && attributes?.selectionOverrideClientId) {
wp.data
.dispatch("core/block-editor")
.selectBlock(attributes?.selectionOverrideClientId);
}
}, [isSelected]);
// set preset data when presets are loaded
useEffect(() => {
if (presets && presets.length) {
const thisPreset = presets.find((preset) => {
return preset.id === attributes?.preset;
});
if (thisPreset) {
setPresetData(thisPreset);
} else {
setPresetData(defaultPreset);
setAttributes({ preset: defaultPreset?.id });
}
}
}, [presets, attributes?.preset]);
// re-render the player if presetdata, poster or chapters change
useEffect(() => {
onUpdate();
}, [poster, presetData, chapters, branding.logo]);
// increment update key
const onUpdate = () => {
setCount(count + 1);
};
// re-render only if times change
const prevChapters = usePrevious(chapters);
useEffect(() => {
let times = chapters?.map((item) => item.time);
let prevTimes = prevChapters?.map((item) => item.time);
if (_.difference(times, prevTimes).length) {
onUpdate();
}
}, [chapters]);
const createVideo = async ({
src,
external_id,
attachment_id,
type,
title,
}) => {
if (!src && !external_id && !attachment_id) {
return;
}
const { id } = await apiFetch({
method: "POST",
path: "/presto-player/v1/videos",
data: {
attachment_id,
post_id: wp.data.select("core/editor").getCurrentPostId(),
external_id,
...(title ? { title } : {}),
src,
type,
},
});
setAttributes({ id });
};
const lock = () => {
return wp.data.dispatch("core/editor").lockPostSaving("presto-player");
};
const unlock = () => {
return wp.data
.dispatch("core/editor")
.unlockPostSaving("presto-player");
};
function onRemoveSrc() {
let r = confirm("Remove this video?");
if (r) {
setAttributes({
src: "",
id: undefined,
...(attributes?.thumbnail ? { thumbnail: null } : {}),
...(attributes?.preview ? { preview: null } : {}),
...(attributes?.previewSrc ? { previewSrc: null } : {}),
...(attributes?.previewThumbnail ? { previewThumbnail: null } : {}),
});
}
}
// make sure it's the default
if (!attributes?.preset) {
setAttributes({ preset: defaultPreset?.id });
}
return (
<WrappedComponent
{...props}
lockSave={lock}
unlockSave={unlock}
createVideo={createVideo}
onUpdate={onUpdate}
onRemoveSrc={onRemoveSrc}
presetData={presetData}
setPresetData={setPresetData}
renderKey={count}
/>
);
},
"withPlayerEdit"
);