PluginProbe ʕ •ᴥ•ʔ
Presto Player / trunk
Presto Player vtrunk
4.3.0 4.2.4 4.2.3 4.2.2 4.2.0 4.2.1 trunk 1.10.0 1.10.1 1.10.2 1.11.0 1.12.0 1.13.0 1.14.0 1.14.1 1.5.10 1.5.11 1.5.12 1.5.13 1.5.14 1.5.15 1.5.5 1.5.6 1.5.7 1.5.8 1.5.9 1.6.0 1.6.1 1.6.10 1.6.11 1.6.12 1.6.13 1.6.2 1.6.3 1.6.4 1.6.5 1.6.6 1.6.7 1.6.8 1.6.9 1.7.0 1.7.1 1.7.2 1.8.0 1.8.1 1.8.2 1.8.3 1.8.4 1.8.5 1.8.6 1.9.0 1.9.1 1.9.10 1.9.11 1.9.12 1.9.13 1.9.14 1.9.2 1.9.3 1.9.4 1.9.5 1.9.6 1.9.7 1.9.8 1.9.9 2.0.0 2.0.1 2.0.10 2.0.11 2.0.12 2.0.13 2.0.14 2.0.15 2.0.16 2.0.2 2.0.3 2.0.4 2.0.5 2.0.6 2.0.7 2.0.8 2.0.9 2.1.0 2.2.0 2.2.1 2.2.2 2.2.3 2.2.3-beta1 2.3.0 2.3.1 2.3.2 2.3.3 3.0.0 3.0.0-beta1 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.1.0 3.1.1 3.1.2 3.1.3 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.0.7 4.0.8 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4
presto-player / src / admin / blocks / shared / MediaProviders / index.js
presto-player / src / admin / blocks / shared / MediaProviders Last commit date
index.js 1 week ago
index.js
114 lines
1 import { useState } from "@wordpress/element";
2 import { useDispatch } from "@wordpress/data";
3 import { store as coreStore } from "@wordpress/core-data";
4 import { store as noticesStore } from "@wordpress/notices";
5 import { __ } from "@wordpress/i18n";
6 import ProvidersPlaceholder from "../ProvidersPlaceholder";
7 import providerIcons from "../ProvidersPlaceholder/icons";
8
9 /**
10 * MediaProviders component for handling common video operations
11 *
12 * @param {Object} props Component props
13 * @param {Function} props.onSyncedMediaCreated Callback when synced video is created
14 * @param {Function} props.onSelect Callback when provider is selected
15 * @param {Function} props.onSelectMedia Callback when existing media is selected
16 * @param {boolean} props.sync Whether to sync media to media hub
17 */
18 const MediaProviders = ({
19 onSyncedMediaCreated,
20 onSelect,
21 onSelectMedia,
22 sync = false,
23 }) => {
24 const { saveEntityRecord } = useDispatch(coreStore);
25 const { createErrorNotice } = useDispatch(noticesStore);
26 const [saving, setSaving] = useState(false);
27
28 const providers = [
29 {
30 id: "self-hosted",
31 name: __("Video", "presto-player"),
32 icon: providerIcons?.video,
33 premium: false,
34 hasAccess: true,
35 },
36 {
37 id: "youtube",
38 name: __("YouTube", "presto-player"),
39 icon: providerIcons?.youtube,
40 premium: false,
41 hasAccess: true,
42 },
43 {
44 id: "vimeo",
45 name: __("Vimeo", "presto-player"),
46 icon: providerIcons?.vimeo,
47 premium: false,
48 hasAccess: true,
49 },
50 {
51 id: "audio",
52 name: __("Audio", "presto-player"),
53 icon: providerIcons?.audio,
54 premium: false,
55 hasAccess: true,
56 },
57 {
58 id: "bunny",
59 name: __("Bunny.net", "presto-player"),
60 icon: providerIcons?.bunny,
61 premium: true,
62 hasAccess: !!prestoPlayer?.isPremium,
63 },
64 ];
65
66 // Create a video with media hub sync
67 const createSyncedVideo = async (provider) => {
68 if (saving) return;
69 try {
70 setSaving(true);
71 const { id } = await saveEntityRecord(
72 "postType",
73 "pp_video_block",
74 {
75 status: "publish",
76 content: `<!-- wp:presto-player/reusable-edit -->
77 <div class="wp-block-presto-player-reusable-edit"><!-- wp:presto-player/${provider} /--></div>
78 <!-- /wp:presto-player/reusable-edit -->`,
79 },
80 { throwOnError: true }
81 );
82
83 if (onSyncedMediaCreated) {
84 onSyncedMediaCreated(id);
85 }
86 } catch (e) {
87 createErrorNotice(
88 e?.message || __("Something went wrong", "presto-player")
89 );
90 } finally {
91 setSaving(false);
92 }
93 };
94
95 const handleProviderSelect = (provider) => {
96 if (sync) {
97 createSyncedVideo(provider);
98 } else {
99 onSelect(provider);
100 }
101 };
102
103 return (
104 <ProvidersPlaceholder
105 loading={saving}
106 onSelect={handleProviderSelect}
107 onSelectMedia={onSelectMedia}
108 providers={providers}
109 />
110 );
111 };
112
113 export default MediaProviders;
114