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