import React, {useCallback, useState} from 'react'; import {useTranslation} from "react-i18next"; import {Card} from "react-bootstrap"; import CardTabs from "../../../CardTabs"; import {faChartArea} from "@fortawesome/free-solid-svg-icons"; import {useDataRequest} from "../../../../hooks/dataFetchHook"; import { fetchDayByDayGraph, fetchHourByHourGraph, fetchNetworkCalendarGraph, fetchPlayersOnlineGraph } from "../../../../service/serverService"; import {ErrorViewBody} from "../../../../views/ErrorView"; import {ChartLoader} from "../../../navigation/Loader"; import TimeByTimeGraph from "../../../graphs/TimeByTimeGraph"; import PlayersOnlineGraph from "../../../graphs/PlayersOnlineGraph"; import {useMetadata} from "../../../../hooks/metadataHook"; import StackedPlayersOnlineGraph from "../../../graphs/StackedPlayersOnlineGraph"; import {useAuth} from "../../../../hooks/authenticationHook"; import {faCalendar} from "@fortawesome/free-regular-svg-icons"; import ServerCalendar from "../../../calendar/ServerCalendar"; import {postQuery} from "../../../../service/queryService"; import Highcharts from "highcharts/highstock"; import QueryPlayerListModal from "../../../modal/QueryPlayerListModal"; const SingleProxyPlayersOnlineGraph = ({serverUUID}) => { const {data, loadingError} = useDataRequest(fetchPlayersOnlineGraph, [serverUUID]); if (loadingError) return if (!serverUUID || !data) return ; return } const MultiProxyPlayersOnlineGraph = () => { const {data, loadingError} = useDataRequest(fetchPlayersOnlineGraph, []); if (loadingError) return if (!data) return ; return } const PlayersOnlineTab = () => { const {serverUUID, networkMetadata} = useMetadata(); if (!networkMetadata) return if (networkMetadata.usingRedisBungee || networkMetadata.servers.filter(server => server.proxy).length === 1) { return } else { return } } const DayByDayTab = () => { const {data, loadingError} = useDataRequest(fetchDayByDayGraph, []) if (loadingError) return if (!data) return ; return } const HourByHourTab = () => { const {data, loadingError} = useDataRequest(fetchHourByHourGraph, []) if (loadingError) return if (!data) return ; return } const NetworkCalendarTab = () => { const {data, loadingError} = useDataRequest(fetchNetworkCalendarGraph, []); const [modalOpen, setModalOpen] = useState(false); const [queryData, setQueryData] = useState(undefined); const closeModal = useCallback(() => { setModalOpen(false); }, [setModalOpen]); const onSelect = useCallback(async selectionInfo => { const start = Highcharts.dateFormat('%d/%m/%Y', selectionInfo.start); const end = Highcharts.dateFormat('%d/%m/%Y', selectionInfo.end); const query = { filters: [{ kind: "playedBetween", parameters: { afterDate: start, afterTime: "00:00", beforeDate: end, beforeTime: "00:00" } }], view: { afterDate: start, afterTime: "00:00", beforeDate: end, beforeTime: "00:00", servers: [], wantedData: ["players"] } } setQueryData(undefined); setModalOpen(true); const data = await postQuery(query); const loaded = data?.data; if (loaded) { setQueryData(loaded); } }, [setQueryData, setModalOpen]); if (loadingError) return if (!data) return ; return <> } const NetworkOnlineActivityGraphsCard = () => { const {hasPermission} = useAuth(); const {t} = useTranslation(); const tabs = [ { name: t('html.label.networkOnlineActivity'), icon: faChartArea, color: 'blue', href: 'online-activity', element: , permission: 'page.network.overview.graphs.online' }, { name: t('html.label.dayByDay'), icon: faChartArea, color: 'blue', href: 'day-by-day', element: , permission: 'page.network.overview.graphs.day.by.day' }, { name: t('html.label.hourByHour'), icon: faChartArea, color: 'blue', href: 'hour-by-hour', element: , permission: 'page.network.overview.graphs.hour.by.hour' }, { name: t('html.label.networkCalendar'), icon: faCalendar, color: 'teal', href: 'network-calendar', element: , permission: 'page.network.overview.graphs.calendar' } ].filter(tab => hasPermission(tab.permission)); return }; export default NetworkOnlineActivityGraphsCard