[ SYSTEM ]: Linux wordpress 6.1.0-44-amd64 #1 SMP PREEMPT_DYNAMIC Debian 6.1.164-1 (2026-03-09) x86_64
[ SERVER ]: Apache/2.4.66 (Debian) | PHP: 8.2.30
[ USER ]: www-data | IP: 172.19.30.54
GEFORCE FILE MANAGER
/
var
/
www
/
html
/
wordpress
/
wp-content
/
plugins
/
presto-player
/
src
/
admin
/
analytics
/
components
/
UPLOAD:
NAME
SIZE
QUICK PERMS
ACTIONS
📄 DataTable.js
1,235 B
SET
[ EDIT ]
|
[ DEL ]
📄 DatePicker.js
1,421 B
SET
[ EDIT ]
|
[ DEL ]
📄 OverviewPanel.js
1,014 B
SET
[ EDIT ]
|
[ DEL ]
📄 TopUsers.js
1,992 B
SET
[ EDIT ]
|
[ DEL ]
📄 TopVideos.js
2,633 B
SET
[ EDIT ]
|
[ DEL ]
📄 TotalVideoViewsByUser.js
790 B
SET
[ EDIT ]
|
[ DEL ]
📄 TotalViewsGraph.js
3,001 B
SET
[ EDIT ]
|
[ DEL ]
📄 TotalWatchGraph.js
2,949 B
SET
[ EDIT ]
|
[ DEL ]
📄 VideoAverageWatchTime.js
847 B
SET
[ EDIT ]
|
[ DEL ]
📄 VideoAverageWatchTimeByUser.js
861 B
SET
[ EDIT ]
|
[ DEL ]
📄 VideoTimeline.js
2,670 B
SET
[ EDIT ]
|
[ DEL ]
📄 VideoTotalWatchTimeByUser.js
857 B
SET
[ EDIT ]
|
[ DEL ]
📄 VideoViews.js
818 B
SET
[ EDIT ]
|
[ DEL ]
DELETE SELECTED
[ CLOSE ]
EDIT: VideoTimeline.js
import { __, sprintf } from "@wordpress/i18n"; const { Card, CardBody } = wp.components; const { useState, useEffect, useRef } = wp.element; import Loading from "@/admin/settings/components/Loading"; import apiFetch from "@/shared/services/fetch"; import Chart from "react-apexcharts"; import { convertDateTimeToAbsoluteDate, timestamp } from "../util"; export default (props) => { const { video_id, startDate, endDate } = props; const [loading, setLoading] = useState(true); const [series, setSeries] = useState([ { name: "Views", data: [], }, ]); const fetchTimeline = () => { setLoading(true); apiFetch({ path: wp.url.addQueryArgs( `/presto-player/v1/analytics/video/${video_id}/timeline`, { start: convertDateTimeToAbsoluteDate(startDate), end: convertDateTimeToAbsoluteDate(endDate), } ), }) .then((data) => { let series = []; if (data.length) { data.forEach((item) => { // add another to them series.push({ x: item.watch_time, y: item.total, }); }); } setSeries([ { name: "Viewers", data: series, }, ]); }) .catch((e) => { console.error(e); }) .finally(() => { setLoading(false); }); }; useEffect(() => { fetchTimeline(); }, [startDate, endDate]); const chart = { options: { chart: { toolbar: { show: false, }, }, tickAmount: 1, yaxis: { labels: { formatter: function (num) { return parseInt(num); }, }, }, xaxis: { labels: { formatter: function (num) { return timestamp(num); }, }, }, colors: ["#7c3aed"], dataLabels: { enabled: false, }, stroke: { curve: "smooth" }, fill: { type: "gradient", gradient: { shadeIntensity: 1, opacityFrom: 0.7, opacityTo: 0.9, stops: [0, 90, 100], }, }, }, }; if (loading) { return ( <Card> <CardBody> <Loading /> </CardBody> </Card> ); } return ( <Card> <CardBody> <div className="presto-card__title"> {__("Audience Retention", "presto-player")} </div> <Chart options={chart.options} series={series} type="area" height={280} /> </CardBody> </Card> ); };