/****************************************************************************** * Copyright (c) 2026 Contributors to the Eclipse Foundation. * * See the NOTICE file(s) distributed with this work for additional * information regarding copyright ownership. * * This program and the accompanying materials are made available under the * terms of the Eclipse Public License 2.0 which is available at * https://www.eclipse.org/legal/epl-2.0. * * SPDX-License-Identifier: EPL-2.0 *****************************************************************************/ import { FC, useContext, useMemo } from 'react'; import { Box, Alert } from '@mui/material'; import { useParams, useNavigate } from 'react-router'; import { MainContext } from '../../../context'; import type { Customer } from '../../../extension-registry-types'; import { handleError } from '../../../utils'; import { AdminDashboardRoutes } from '../admin-dashboard-routes'; import { SearchListContainer } from '../search-list-container'; import { CustomerSearch } from './usage-stats-search'; import { UsageStatsChart } from '../../../components/rate-limiting/usage-stats/usage-stats-chart'; import { useAdminUsageStats } from './use-usage-stats'; import { useCustomers } from '../customers/use-customers'; export const UsageStatsView: FC = () => { const { customer } = useParams<{ customer: string }>(); const navigate = useNavigate(); const { pageSettings } = useContext(MainContext); const { data: customersData, isFetching: customersLoading, error: customersErrorObj } = useCustomers(); const customers = customersData?.customers ?? []; const customersError = customersErrorObj ? handleError(customersErrorObj as Error) : null; const { usageStats, dailyP95, loading, error: statsError, startDate, setStartDate } = useAdminUsageStats(customer); const selectedCustomer = useMemo(() => customers.find(c => c.name === customer) || null, [customers, customer]); const handleCustomerChange = (_: unknown, value: Customer | null) => { if (value) { navigate(`${AdminDashboardRoutes.USAGE_STATS}/${value.name}`); } else { navigate(AdminDashboardRoutes.USAGE_STATS); } }; const error = customersError || statsError; if (error) { return {error}; } return ( ]} listContainer={!customer && Select a customer to view usage statistics.} loading={loading || customersLoading} /> {customer && ( )} ); };