PluginProbe ʕ •ᴥ•ʔ
Presto Player / 3.0.0-beta1
Presto Player v3.0.0-beta1
4.5.0 4.4.1 4.4.0 4.3.3 4.3.2 4.3.1 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 / settings / pages / General.js
presto-player / src / admin / settings / pages Last commit date
parts 3 years ago General.js 2 years ago Integrations.js 3 years ago Performance.js 3 years ago
General.js
284 lines
1 import { __ } from "@wordpress/i18n";
2 import { useEntityProp, store as coreStore } from "@wordpress/core-data";
3 import { useSelect } from "@wordpress/data";
4 import {
5 ColorPicker,
6 ComboboxControl,
7 ToggleControl,
8 RangeControl,
9 Spinner,
10 } from "@wordpress/components";
11 import Disabled from "../components/Disabled";
12 import Group from "../components/Group";
13 import Media from "../components/Media";
14 import Page from "../components/Page";
15 import CodeMirror from "../components/CodeMirror";
16
17 export default () => {
18 const disabled = () => {
19 if (prestoPlayer?.isPremium) {
20 return false;
21 }
22 return {
23 title: __("Pro Feature", "presto-player"),
24 heading: __("Unlock Presto Player Pro", "presto-player"),
25 message: __(
26 "Get this feature and more with the Pro version of Presto Player!",
27 "presto-player"
28 ),
29 link: "https://prestoplayer.com",
30 };
31 };
32
33 const { presets, loadingPresets, audioPresets, loadingAudioPresets } =
34 useSelect((select) => {
35 const presetArgs = ["presto-player", "preset"];
36 const audioPresetArgs = ["presto-player", "audio-preset"];
37 return {
38 presets: select(coreStore).getEntityRecords(...presetArgs),
39 loadingPresets: select(coreStore).isResolving(
40 "getEntityRecords",
41 presetArgs
42 ),
43 audioPresets: select(coreStore).getEntityRecords(...audioPresetArgs),
44 loadingAudioPresets: select(coreStore).isResolving(
45 "getEntityRecords",
46 audioPresetArgs
47 ),
48 };
49 }, []);
50
51 const [presetSettings, setPresetSettings] = useEntityProp(
52 "root",
53 "site",
54 "presto_player_presets"
55 );
56 const updatePresetSettings = (data) => {
57 setPresetSettings({
58 ...(presetSettings || {}),
59 ...data,
60 });
61 };
62
63 const [audioPresetSettings, setAudioPresetSettings] = useEntityProp(
64 "root",
65 "site",
66 "presto_player_audio_presets"
67 );
68 const updateAudioPresetSettings = (data) => {
69 setAudioPresetSettings({
70 ...(audioPresetSettings || {}),
71 ...data,
72 });
73 };
74
75 const [analytics, setAnalytics] = useEntityProp(
76 "root",
77 "site",
78 "presto_player_analytics"
79 );
80
81 const updateAnalytics = (data) => {
82 setAnalytics({
83 ...(analytics || {}),
84 ...data,
85 });
86 };
87
88 const [branding, setBranding] = useEntityProp(
89 "root",
90 "site",
91 "presto_player_branding"
92 );
93 const updateBranding = (data) => {
94 setBranding({
95 ...(branding || {}),
96 ...data,
97 });
98 };
99
100 const [uninstall, setUninstall] = useEntityProp(
101 "root",
102 "site",
103 "presto_player_uninstall"
104 );
105
106 const updateUninstall = (data) => {
107 setUninstall({
108 ...(uninstall || {}),
109 ...data,
110 });
111 };
112
113 return (
114 <Page
115 title={__("General", "presto-player")}
116 description={__(
117 "Branding, analytics and uninstall data.",
118 "presto-player"
119 )}
120 >
121 <Group
122 title={__("Branding", "presto-player")}
123 description={__("Global player branding options", "presto-player")}
124 >
125 <Disabled disabled={disabled()}>
126 <Media
127 className={"presto-player__setting--logo"}
128 label={
129 <>
130 {__("Logo", "presto-player")}{" "}
131 {disabled() && (
132 <span className="presto-options__pro-badge">
133 {__("Pro", "presto-player")}
134 </span>
135 )}
136 </>
137 }
138 onSelect={(image) => updateBranding({ logo: image?.url })}
139 maxWidth={branding?.logo_width || 150}
140 value={branding?.logo}
141 />
142
143 <div style={{ maxWidth: "500px" }}>
144 <RangeControl
145 className={"presto-player__setting--logo-width"}
146 label={__("Logo Max Width", "presto-player")}
147 value={branding?.logo_width || 150}
148 onChange={(logo_width) => updateBranding({ logo_width })}
149 min={1}
150 max={400}
151 />
152 </div>
153 </Disabled>
154 <ColorPicker
155 className={"presto-player__setting--brand-color"}
156 onChangeComplete={(value) => updateBranding({ color: value.hex })}
157 color={branding?.color}
158 />
159 </Group>
160 <Group
161 title={__("Analytics", "presto-player")}
162 disabled={disabled()}
163 description={__(
164 "Analytics settings for media plays, watch times and more.",
165 "presto-player"
166 )}
167 >
168 <div>
169 <ToggleControl
170 className={"presto-player__setting--analytics-enable"}
171 label={__("Enable", "presto-player")}
172 help={__("Enable view analytics for your media", "presto-player")}
173 checked={analytics?.enable}
174 onChange={(enable) => updateAnalytics({ enable })}
175 />
176
177 {!!analytics?.enable && (
178 <ToggleControl
179 label={__("Auto-Purge Data (recommended)")}
180 help={__(
181 "Automatically purge data older than 90 days.",
182 "presto-player"
183 )}
184 className={"presto-player__setting--analytics-enable"}
185 checked={
186 analytics?.purge_data !== undefined
187 ? analytics?.purge_data
188 : true
189 }
190 onChange={(purge_data) => updateAnalytics({ purge_data })}
191 />
192 )}
193 </div>
194 </Group>
195 <Group
196 title={__("Presets", "presto-player")}
197 disabled={disabled()}
198 description={__("Media presets settings.", "presto-player")}
199 >
200 {!!loadingPresets ? (
201 <Spinner />
202 ) : (
203 <ComboboxControl
204 label={__("Select default preset for video.", "presto-player")}
205 value={presetSettings?.default_player_preset}
206 options={(presets || []).map((preset) => {
207 return {
208 value: preset?.id,
209 label: preset?.name,
210 };
211 })}
212 onChange={(default_player_preset) =>
213 updatePresetSettings({
214 default_player_preset: default_player_preset || 1,
215 })
216 }
217 />
218 )}
219
220 {!!loadingAudioPresets ? (
221 <Spinner />
222 ) : (
223 <ComboboxControl
224 label={__("Select default preset for audio.", "presto-player")}
225 value={audioPresetSettings?.default_player_preset}
226 options={(audioPresets || []).map((preset) => {
227 return {
228 value: preset?.id,
229 label: preset?.name,
230 };
231 })}
232 onChange={(default_player_preset) =>
233 updateAudioPresetSettings({
234 default_player_preset: default_player_preset || 1,
235 })
236 }
237 />
238 )}
239 </Group>
240 <Group
241 disabled={disabled()}
242 title={__("Custom CSS", "presto-player")}
243 description={__(
244 "Quickly add custom css to the player web component.",
245 "presto-player"
246 )}
247 >
248 <CodeMirror
249 disabled={!prestoPlayer?.isPremium}
250 option={{ id: "player_css" }}
251 value={branding?.player_css}
252 onChange={(player_css) => updateBranding({ player_css })}
253 />
254 </Group>
255 <Group
256 title={__("Uninstall Options", "presto-player")}
257 description={__(
258 "Options to remove data on uninstall.",
259 "presto-player"
260 )}
261 >
262 <ToggleControl
263 label={__("Remove data on uninstall")}
264 help={__("This removes all data on uninstall.", "presto-player")}
265 className="presto-player__setting--uninstall"
266 checked={uninstall?.uninstall_data}
267 onChange={(uninstall_data) => {
268 if (uninstall_data) {
269 const r = confirm(
270 __(
271 "Caution: Data Loss. Are you sure you want to remove all the data from this plugin? This is irreversible!",
272 "presto-player"
273 )
274 );
275 if (!r) return;
276 }
277 updateUninstall({ uninstall_data });
278 }}
279 />
280 </Group>
281 </Page>
282 );
283 };
284