import React, { useContext, useEffect, useState } from "react"; import { Descriptions } from "antd"; import { ControlContext, PluginExtensionProps, SectionHeader, notifyErrorHandler, useAccount } from "@clusterio/web_ui"; import { PlayerStatistics, StatisticsGetRequest } from "../../messages.js"; import { formatValue, statistics } from "../statistics"; /** The statistics of a player, shown on their user page. */ export default function UserStatistics(props: PluginExtensionProps<"UserViewPage">) { const control = useContext(ControlContext); const account = useAccount(); const canView = Boolean(account.hasPermission("exp_player_statistics.view")); const name = props.user.name; const [record, setRecord] = useState(); useEffect(() => { if (canView) { control.send(new StatisticsGetRequest(name)) .then(setRecord) .catch(notifyErrorHandler("Error loading player statistics")); } }, [name, canView]); if (!canView || !record) { return null; } return <> {statistics.map(([statistic, title]) => {formatValue(statistic, record.stats[statistic] ?? 0)} )} ; }