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 / Dashboard.js
presto-player / src / admin / dashboard / pages Last commit date
learn 1 month ago settings 1 month ago Analytics.js 1 month ago AnalyticsDetail.js 1 month ago Dashboard.js 1 month ago Emails.js 1 month ago Learn.js 1 month ago MediaHub.js 3 weeks ago Onboarding.js 3 weeks ago Settings.js 1 month ago UserAnalyticsDetail.js 1 month ago
Dashboard.js
63 lines
1 import React, { useState, useRef } from "react";
2 import { Container } from "@bsf/force-ui";
3 import WelcomeBanner from "../components/WelcomeBanner";
4 import VideoModal from "../components/VideoModal";
5 import ExtendPlugins from "../components/ExtendPlugins";
6 import QuickAccess from "../components/QuickAccess";
7 import TopPerformingMedia from "../components/TopPerformingMedia";
8 import UpgradeToPro from "../components/UpgradeToPro";
9 import EngagementChart, { Chart } from "../components/EngagementChart";
10 import useTopPerforming from "../hooks/useTopPerforming";
11 import DashboardSkeleton from "../components/Skeletons/DashboardSkeleton";
12
13 const Dashboard = () => {
14 const [isVideoOpen, setIsVideoOpen] = useState(false);
15 const videoTriggerRef = useRef(null);
16
17 const { data: topPerformingData, isLoading: isTopPerformingLoading } =
18 useTopPerforming({ mediaPerPage: 5 });
19
20 if (isTopPerformingLoading) {
21 return <DashboardSkeleton />;
22 }
23
24 return (
25 <Container className="p-8" gap="md" direction="column">
26 <Container gap="md" direction={{ sm: "column", md: "row" }}>
27 {/* Left Card */}
28 <div className="relative flex flex-col gap-6 flex-1 min-w-0">
29 <WelcomeBanner onVideoOpen={setIsVideoOpen} videoTriggerRef={videoTriggerRef} />
30
31 <EngagementChart showAllTimeSummary>
32 <Chart>
33 <Container.Item className="flex items-center justify-between w-full p-1">
34 <Chart.Tabs />
35 <Chart.DateFilter />
36 </Container.Item>
37 <Container.Item className="w-full flex items-stretch justify-between gap-1 bg-background-secondary rounded-lg p-1">
38 <Chart.AreaChart />
39 <Chart.Summary />
40 </Container.Item>
41 </Chart>
42 </EngagementChart>
43
44 <ExtendPlugins layout="inline" />
45 </div>
46
47 {/* Right Card */}
48 <Container.Item className="max-w-full w-full md:max-w-[33%]">
49 <Container direction="column" gap="md">
50 <UpgradeToPro />
51 <TopPerformingMedia data={topPerformingData} />
52 <QuickAccess />
53 </Container>
54 </Container.Item>
55 </Container>
56
57 <VideoModal isOpen={isVideoOpen} onClose={() => setIsVideoOpen(false)} triggerRef={videoTriggerRef} />
58 </Container>
59 );
60 };
61
62 export default Dashboard;
63