PluginProbe ʕ •ᴥ•ʔ
Presto Player / 4.5.0
Presto Player v4.5.0
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 / dashboard / components / DashboardPromos.js
presto-player / src / admin / dashboard / components Last commit date
Emails 3 months ago EngagementChart 3 months ago MediaHub 3 months ago Onboarding 3 months ago Popup 3 months ago Skeletons 2 months ago WhatsNew 3 months ago charts 3 months ago test 3 months ago AdminMenuSync.js 3 months ago ChartEmptyState.js 3 months ago ChooseDate.js 3 months ago ColorPicker.js 3 months ago DashboardPromos.js 2 days ago ExtendPlugins.js 3 months ago Filters.js 3 months ago Link.js 3 months ago McpPromoBanner.js 2 days ago Navbar.js 2 months ago NoFound.js 3 months ago PageHeader.js 3 months ago PluginRecommendations.js 3 months ago PostScheduleField.js 3 months ago PrestoPlayerIcon.js 3 months ago ProGateOverlay.js 3 months ago PromoBanner.js 2 days ago QuickAccess.js 2 weeks ago RankedTable.js 3 months ago SkinPromoBanner.js 2 days ago StatCard.js 3 months ago TopMedia.js 3 months ago TopPerformingMedia.js 3 months ago TopUsers.js 3 months ago TruncatedTitle.js 3 months ago UpgradeNotice.js 3 months ago UpgradeToPro.js 2 weeks ago VideoModal.js 3 months ago WelcomeBanner.js 3 months ago
DashboardPromos.js
55 lines
1 import { useState } from 'react';
2 import { useLocation } from '../router/router';
3 import { isPromoDismissed } from './PromoBanner';
4 import McpPromoBanner, { MCP_PROMO_KEY } from './McpPromoBanner';
5 import SkinPromoBanner, { SKIN_PROMO_KEY } from './SkinPromoBanner';
6
7 /**
8 * Picks which feature promo sits under the navbar on the Dashboard home. Only
9 * ever one — two full-width strips above the dashboard is too much chrome.
10 *
11 * Newest release first: the MCP promo shipped in 4.4.0 and anyone who never
12 * dismissed it would otherwise permanently outrank whatever ships next.
13 */
14 const DashboardPromos = () => {
15 // Dismissals are also tracked in memory, not just read back from storage:
16 // writes throw and get swallowed when site data is blocked (Safari's "block
17 // all cookies", Firefox strict), and without this the X would be a no-op.
18 const [ closed, setClosed ] = useState( () => new Set() );
19 const dismiss = ( key ) =>
20 setClosed( ( previous ) => new Set( previous ).add( key ) );
21 const isHidden = ( key ) => closed.has( key ) || isPromoDismissed( key );
22
23 const ctx = window.prestoPlayer || {};
24 const location = useLocation();
25 const tab = location.params?.tab;
26
27 if ( tab && tab !== 'Dashboard' ) {
28 return null;
29 }
30
31 // One strip per page load. Sliding the next promo into the slot the user
32 // just closed reads as the X being broken; it waits for the next load.
33 if ( closed.size ) {
34 return null;
35 }
36
37 // The MCP section reads /wp/v2/settings and needs the Abilities API, so
38 // anyone missing either would just land on a screen that can't load.
39 const mcpAvailable =
40 ctx.abilitiesSupported !== false && ctx.canManageOptions !== false;
41
42 // The skin is not gated on manage_options — it is news, not a settings link.
43 if ( ! isHidden( SKIN_PROMO_KEY ) ) {
44 return <SkinPromoBanner onDismiss={ () => dismiss( SKIN_PROMO_KEY ) } />;
45 }
46
47 if ( mcpAvailable && ! isHidden( MCP_PROMO_KEY ) ) {
48 return <McpPromoBanner onDismiss={ () => dismiss( MCP_PROMO_KEY ) } />;
49 }
50
51 return null;
52 };
53
54 export default DashboardPromos;
55