????
Current Path : /proc/self/cwd/wp-content/plugins/presto-player/src/admin/blocks/blocks/hosted/ |
Current File : //proc/self/cwd/wp-content/plugins/presto-player/src/admin/blocks/blocks/hosted/edit.js |
/** * WordPress dependencies */ const { __ } = wp.i18n; const { getBlobByURL, isBlobURL } = wp.blob; const { Button, Disabled, Toolbar, Notice, withNotices, Placeholder, Spinner } = wp.components; import { BlockControls, InspectorControls } from "@wordpress/block-editor"; const { compose } = wp.compose; const { useEffect, useState } = wp.element; const { dispatch } = wp.data; const { createBlock } = wp.blocks; import { isHLS } from "@/shared/util"; // hocs import withPlayerEdit from "../with-player-edit"; import withPlayerData from "../with-player-data"; /** * Internal dependencies */ import HostedPlaceholder from "./HostedPlaceholder"; import TracksEditor from "@/admin/blocks/shared/tracks/TracksEditor"; import BlockInspectorControls from "@/admin/blocks/shared/BlockInspectorControls"; import Player from "@/admin/blocks/shared/Player"; import { determineVideoUrlType } from "@/shared/util.js"; import Editing from "../../shared/Editing"; //constants const ALLOWED_MEDIA_TYPES = ["video"]; export default compose([withPlayerData(), withPlayerEdit()])( withNotices( ({ attributes, setAttributes, noticeOperations, branding, loading, presetData, createVideo, onRemoveSrc, renderKey, lockSave, unlockSave, clientId, defaultPreset, }) => { const { poster, src, id, tracks } = attributes; const [upgradeNotice, setUpgradeNotice] = useState(""); const showNotice = (e) => { noticeOperations.removeAllNotices(); noticeOperations.createErrorNotice(e?.message); }; useEffect(() => { if (!id && isBlobURL(src)) { const file = getBlobByURL(src); if (file) { mediaUpload({ filesList: [file], onFileChange: ([{ url }]) => { setAttributes({ src: url }); }, onError: (message) => { noticeOperations.createErrorNotice(message); }, allowedTypes: ALLOWED_MEDIA_TYPES, }); } } }, []); function onSelectVideo(media) { if (!media || !media.url) { // in this case there was an error // previous attributes should be removed // because they may be temporary blob urls setAttributes({ src: undefined, id: undefined }); return; } // sets the block's attribute and updates the edit component from the // selected media setAttributes({ src: media.url, preset: defaultPreset?.id, attachment_id: media.id, }); lockSave(); createVideo({ src: media.url, type: "attachment", attachment_id: media.id, }) .catch((e) => { setAttributes({ src: "" }); showNotice(e); }) .finally(unlockSave); } function onSelectURL(newSrc) { setAttributes({ attachment_id: null }); if (newSrc && isHLS(newSrc)) { if (!prestoPlayer?.isPremium) { setUpgradeNotice( <Notice status="info" onRemove={() => setUpgradeNotice("")}> <div> <div> <strong> {__( "Get HLS Streaming and more with Presto Player Pro!", "presto-player" )} </strong> </div> {__( "Stream HLS links and more with Presto Player Pro.", "presto-player" )} <div style={{ marginTop: "1em", }} > <Button isPrimary>{__("Upgrade", "presto-player")}</Button> </div> </div> </Notice> ); return; } } if (newSrc !== src) { const { type } = determineVideoUrlType(newSrc); if (type === "youtube") { const youtubeBlock = createBlock("presto-player/youtube", { src: newSrc, }); dispatch("core/editor").replaceBlock(clientId, youtubeBlock); return; } if (type === "vimeo") { const vimeoBlock = createBlock("presto-player/vimeo", { src: newSrc, }); dispatch("core/editor").replaceBlock(clientId, vimeoBlock); return; } setAttributes({ src: newSrc, attachmend_id: null }); setAttributes({ preset: defaultPreset?.id }); lockSave(); createVideo({ src: newSrc, type: "link" }) .catch((e) => { setAttributes({ src: "" }); showNotice(e); }) .finally(unlockSave); } } function onUploadError(message) { noticeOperations.removeAllNotices(); noticeOperations.createErrorNotice(message); } if (!src) { return ( <div> <HostedPlaceholder onSelect={onSelectVideo} onSelectURL={onSelectURL} setAttributes={setAttributes} attributes={attributes} onError={onUploadError} > {upgradeNotice} </HostedPlaceholder> </div> ); } // loading presets still if (loading || !id) { return ( <Placeholder className="presto-player__placeholder is-loading"> <Spinner /> </Placeholder> ); } return ( <div> <BlockControls> <TracksEditor tracks={tracks} onChange={(newTracks) => { setAttributes({ tracks: newTracks }); }} /> <Toolbar> <Button onClick={() => onRemoveSrc()}> {__("Replace", "presto-player")} </Button> </Toolbar> <Editing /> </BlockControls> <InspectorControls> <BlockInspectorControls setAttributes={setAttributes} attributes={attributes} /> </InspectorControls> <figure> {/* Disable the video tag so the user clicking on it won't play the video when the controls are enabled. */} <Disabled> <Player poster={poster} src={src} id={id} type={"hosted"} attributes={attributes} setAttributes={setAttributes} preset={presetData} branding={branding} key={renderKey} /> </Disabled> </figure> </div> ); } ) );