PluginProbe ʕ •ᴥ•ʔ
Presto Player / 2.2.2
Presto Player v2.2.2
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 / analytics / components / VideoTimeline.js
presto-player / src / admin / analytics / components Last commit date
DataTable.js 5 years ago DatePicker.js 5 years ago OverviewPanel.js 5 years ago TopUsers.js 3 years ago TopVideos.js 3 years ago TotalVideoViewsByUser.js 4 years ago TotalViewsGraph.js 4 years ago TotalWatchGraph.js 4 years ago VideoAverageWatchTime.js 4 years ago VideoAverageWatchTimeByUser.js 4 years ago VideoTimeline.js 4 years ago VideoTotalWatchTimeByUser.js 4 years ago VideoViews.js 5 years ago
VideoTimeline.js
127 lines
1 const { __, sprintf } = wp.i18n;
2 const { Card, CardBody } = wp.components;
3 const { useState, useEffect, useRef } = wp.element;
4
5 import Loading from "@/admin/settings/components/Loading";
6 import apiFetch from "@/shared/services/fetch";
7 import Chart from "react-apexcharts";
8 import { convertDateTimeToAbsoluteDate, timestamp } from "../util";
9
10 export default (props) => {
11 const { video_id, startDate, endDate } = props;
12 const [loading, setLoading] = useState(true);
13
14 const [series, setSeries] = useState([
15 {
16 name: "Views",
17 data: [],
18 },
19 ]);
20
21 const fetchTimeline = () => {
22 setLoading(true);
23 apiFetch({
24 path: wp.url.addQueryArgs(
25 `/presto-player/v1/analytics/video/${video_id}/timeline`,
26 {
27 start: convertDateTimeToAbsoluteDate(startDate),
28 end: convertDateTimeToAbsoluteDate(endDate),
29 }
30 ),
31 })
32 .then((data) => {
33 let series = [];
34 if (data.length) {
35 data.forEach((item) => {
36 // add another to them
37 series.push({
38 x: item.watch_time,
39 y: item.total,
40 });
41 });
42 }
43 setSeries([
44 {
45 name: "Viewers",
46 data: series,
47 },
48 ]);
49 })
50 .catch((e) => {
51 console.error(e);
52 })
53 .finally(() => {
54 setLoading(false);
55 });
56 };
57
58 useEffect(() => {
59 fetchTimeline();
60 }, [startDate, endDate]);
61
62 const chart = {
63 options: {
64 chart: {
65 toolbar: {
66 show: false,
67 },
68 },
69 tickAmount: 1,
70 yaxis: {
71 labels: {
72 formatter: function (num) {
73 return parseInt(num);
74 },
75 },
76 },
77 xaxis: {
78 labels: {
79 formatter: function (num) {
80 return timestamp(num);
81 },
82 },
83 },
84 colors: ["#7c3aed"],
85 dataLabels: {
86 enabled: false,
87 },
88 stroke: { curve: "smooth" },
89 fill: {
90 type: "gradient",
91 gradient: {
92 shadeIntensity: 1,
93 opacityFrom: 0.7,
94 opacityTo: 0.9,
95 stops: [0, 90, 100],
96 },
97 },
98 },
99 };
100
101 if (loading) {
102 return (
103 <Card>
104 <CardBody>
105 <Loading />
106 </CardBody>
107 </Card>
108 );
109 }
110
111 return (
112 <Card>
113 <CardBody>
114 <div className="presto-card__title">
115 {__("Audience Retention", "presto-player")}
116 </div>
117 <Chart
118 options={chart.options}
119 series={series}
120 type="area"
121 height={280}
122 />
123 </CardBody>
124 </Card>
125 );
126 };
127