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 / TotalWatchGraph.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
TotalWatchGraph.js
124 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, humanSeconds } from "../util";
9
10 export default (props) => {
11 const [loading, setLoading] = useState(true);
12 const [averageTime, setAverageTime] = useState(0);
13 const { startDate, endDate } = props;
14 const [series, setSeries] = useState([
15 {
16 name: "Views",
17 data: [],
18 },
19 ]);
20
21 const chart = {
22 options: {
23 chart: {
24 toolbar: {
25 show: false,
26 },
27 },
28 yaxis: {
29 labels: {
30 formatter: function (num) {
31 return Math.abs(num) > 999
32 ? Math.sign(num) * (Math.abs(num) / 1000).toFixed(1) + "k min"
33 : (Math.sign(num) * Math.abs(num)).toFixed(1) + "min";
34 },
35 },
36 },
37 colors: ["#7c3aed"],
38 xaxis: {
39 type: "datetime",
40 min: new Date(startDate).setHours(0, 0, 0, 0),
41 max: new Date(endDate).setHours(23, 59, 59, 999),
42 },
43 dataLabels: {
44 enabled: false,
45 },
46 stroke: { curve: "smooth" },
47 fill: {
48 type: "gradient",
49 gradient: {
50 shadeIntensity: 1,
51 opacityFrom: 0.7,
52 opacityTo: 0.9,
53 stops: [0, 90, 100],
54 },
55 },
56 },
57 };
58
59 // fetch only if we already mounted
60 useEffect(() => {
61 fetchMinutes();
62 }, [props]);
63
64 const fetchMinutes = () => {
65 setLoading(true);
66 apiFetch({
67 path:
68 "/presto-player/v1/analytics/watch-time?" +
69 jQuery.param({
70 start: convertDateTimeToAbsoluteDate(startDate),
71 end: convertDateTimeToAbsoluteDate(endDate),
72 }),
73 parse: false,
74 })
75 .then(async (res) => {
76 const { data, average } = await res.json();
77
78 setAverageTime(parseFloat(average));
79
80 let series = [];
81 if (data.length) {
82 data.forEach((item) => {
83 series.push({
84 x: item.date_time,
85 y: (item.total / 60).toFixed(2),
86 });
87 });
88 }
89 setSeries([
90 {
91 name: "Watch Time",
92 data: series,
93 },
94 ]);
95 })
96 .catch((e) => {
97 console.error(e);
98 })
99 .finally(() => {
100 setLoading(false);
101 });
102 };
103
104 if (loading) {
105 return (
106 <CardBody>
107 <Loading />
108 </CardBody>
109 );
110 }
111
112 return (
113 <CardBody className="presto-flow">
114 <div className="presto-card__title">
115 {sprintf(
116 __("%s average watch time", "presto-player"),
117 humanSeconds(averageTime)
118 )}
119 </div>
120 <Chart options={chart.options} series={series} type="area" height={280} />
121 </CardBody>
122 );
123 };
124