PluginProbe ʕ •ᴥ•ʔ
Presto Player / trunk
Presto Player vtrunk
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 / dashboard / pages / settings / general / ViewingAnalyticsPage.js
presto-player / src / admin / dashboard / pages / settings / general Last commit date
BrandingPage.js 1 month ago ContributePage.js 1 month ago CustomCssPage.js 1 month ago LicensePage.js 1 month ago MediaHubPage.js 1 month ago PresetsPage.js 1 month ago UninstallPage.js 1 month ago ViewingAnalyticsPage.js 1 month ago
ViewingAnalyticsPage.js
115 lines
1 import { __ } from '@wordpress/i18n';
2 import { useCallback } from 'react';
3 import { Container, Switch, toast, Tooltip } from '@bsf/force-ui';
4 import { Info } from 'lucide-react';
5 import SettingsPageShell from '../shared/SettingsPageShell';
6 import SectionCard from '../shared/SectionCard';
7 import ProGate from '../shared/ProGate';
8 import useSettingOption from '../../../hooks/useSettingOption';
9 import useRegisterActivePage from '../../../hooks/useRegisterActivePage';
10 import { OPTION_KEYS } from '../config';
11
12 const DEFAULT_ANALYTICS = {
13 enable: false,
14 purge_data: true,
15 };
16
17 const isPremium = window.prestoPlayer?.isPremium ?? false;
18
19 const ViewingAnalyticsPage = ( { registerActivePage } ) => {
20 const { data, setData, save, reset, isDirty, isSaving, isLoading } =
21 useSettingOption( OPTION_KEYS.analytics, DEFAULT_ANALYTICS );
22
23 const update = ( patch ) =>
24 setData( ( prev ) => ( {
25 ...( prev || DEFAULT_ANALYTICS ),
26 ...patch,
27 } ) );
28
29 const handleSave = useCallback( async () => {
30 try {
31 await save();
32 toast.success( __( 'Settings saved.', 'presto-player' ), {
33 autoDismiss: 3000,
34 } );
35 } catch ( err ) {
36 toast.error( __( 'Could not save settings.', 'presto-player' ), {
37 autoDismiss: 5000,
38 } );
39 }
40 }, [ save ] );
41
42 useRegisterActivePage( registerActivePage, {
43 isDirty,
44 save: handleSave,
45 discard: reset,
46 } );
47
48 return (
49 <SettingsPageShell
50 title={ __( 'Video Analytics', 'presto-player' ) }
51 isDirty={ isDirty }
52 isSaving={ isSaving }
53 isLoading={ isLoading }
54 onSave={ handleSave }
55 >
56 <SectionCard>
57 <ProGate
58 enabled={ isPremium }
59 title={ __( 'Video Analytics', 'presto-player' ) }
60 description={ __(
61 'Track video views, watch time, and engagement metrics.',
62 'presto-player'
63 ) }
64 >
65 <Container direction="column" className="gap-4">
66 <Switch
67 size="md"
68 value={ !! data.enable }
69 onChange={ ( val ) => update( { enable: val } ) }
70 label={ {
71 heading: __( 'Enable', 'presto-player' ),
72 description: __(
73 'Enable view analytics for your media.',
74 'presto-player'
75 ),
76 } }
77 />
78
79 { data.enable && (
80 <Switch
81 size="md"
82 value={ !! data.purge_data }
83 onChange={ ( val ) => update( { purge_data: val } ) }
84 label={ {
85 heading: (
86 <span className="inline-flex items-center gap-1.5">
87 { __( 'Auto-Purge Data (recommended)', 'presto-player' ) }
88 <Tooltip
89 content={ __(
90 'Analytics records older than 90 days are automatically deleted to keep your database lean. Disable only if you need long-term historical data.',
91 'presto-player'
92 ) }
93 arrow
94 placement="right"
95 >
96 <Info className="size-3.5 text-icon-secondary cursor-help shrink-0" />
97 </Tooltip>
98 </span>
99 ),
100 description: __(
101 'Automatically purge data older than 90 days.',
102 'presto-player'
103 ),
104 } }
105 />
106 ) }
107 </Container>
108 </ProGate>
109 </SectionCard>
110 </SettingsPageShell>
111 );
112 };
113
114 export default ViewingAnalyticsPage;
115