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 / pages / learn / LearnPage.js
presto-player / src / admin / dashboard / pages / learn Last commit date
ChapterCard.js 2 weeks ago LearnPage.js 2 weeks ago LearnPageSkeleton.js 3 months ago ProgressPill.js 3 months ago ScreenshotDialog.js 3 months ago SetupCompleteCard.js 3 months ago StepItem.js 2 weeks ago useLearnProgress.js 3 months ago
LearnPage.js
98 lines
1 import { useMemo, useEffect } from '@wordpress/element';
2 import { Container } from '@bsf/force-ui';
3 import { BookOpen } from 'lucide-react';
4 import ChapterCard from './ChapterCard';
5 import LearnPageSkeleton from './LearnPageSkeleton';
6 import SetupCompleteCard from './SetupCompleteCard';
7 import useLearnProgress from './useLearnProgress';
8
9 const { __ } = wp.i18n;
10
11 const LearnPage = () => {
12 const { chapters, isLoading, setStepCompleted } = useLearnProgress();
13
14 // Deep-link support: `&chapter=<id>` opens that chapter and scrolls to it,
15 // so links from the AI settings land straight on the AI Abilities chapter.
16 const targetChapter = useMemo(
17 () => new URLSearchParams( window.location.search ).get( 'chapter' ) || '',
18 []
19 );
20
21 useEffect( () => {
22 if ( ! targetChapter || isLoading ) {
23 return;
24 }
25 const el = document.getElementById( `learn-chapter-${ targetChapter }` );
26 if ( el ) {
27 el.scrollIntoView( { behavior: 'smooth', block: 'start' } );
28 }
29 }, [ targetChapter, isLoading ] );
30
31 const showCelebration = useMemo( () => {
32 const gettingStarted = chapters.find( ( c ) => c.id === 'getting-started' );
33 if ( ! gettingStarted || ! gettingStarted.steps?.length ) {
34 return false;
35 }
36 return gettingStarted.steps.every( ( s ) => s.completed );
37 }, [ chapters ] );
38
39 if ( isLoading ) {
40 return <LearnPageSkeleton />;
41 }
42
43 return (
44 <Container
45 containerType="flex"
46 direction="column"
47 gap="md"
48 className="p-8 max-w-4xl mx-auto w-full"
49 >
50 { /* Header */ }
51 <Container.Item>
52 <h1 className="m-0 text-2xl font-semibold text-text-primary">
53 { __( 'Learn', 'presto-player' ) }
54 </h1>
55 <p className="m-0 mt-2 text-sm text-text-secondary leading-relaxed max-w-3xl">
56 { __(
57 'Follow these chapters to set up your video player and get the most out of Presto Player — learn how to add videos, brand the player, embed, track analytics, and unlock advanced features.',
58 'presto-player'
59 ) }
60 </p>
61 </Container.Item>
62
63 { /* Celebration banner — shown when Getting Started chapter is done */ }
64 { showCelebration && (
65 <Container.Item>
66 <SetupCompleteCard />
67 </Container.Item>
68 ) }
69
70 { /* Chapters */ }
71 { chapters.length === 0 ? (
72 <Container.Item>
73 <div className="flex flex-col items-center justify-center py-16 gap-3 text-text-secondary">
74 <BookOpen className="w-10 h-10 text-text-tertiary" />
75 <p className="m-0 text-sm">
76 { __( 'No learn chapters available yet.', 'presto-player' ) }
77 </p>
78 </div>
79 </Container.Item>
80 ) : (
81 chapters.map( ( chapter ) => (
82 <Container.Item key={ chapter.id }>
83 <div id={ `learn-chapter-${ chapter.id }` }>
84 <ChapterCard
85 chapter={ chapter }
86 defaultOpen={ chapter.id === targetChapter }
87 onStepToggle={ setStepCompleted }
88 />
89 </div>
90 </Container.Item>
91 ) )
92 ) }
93 </Container>
94 );
95 };
96
97 export default LearnPage;
98