import SectionHeader from '../SectionHeader' import { CategoryMetaKey, USAGE_CATEGORIES } from '../Usage.constants' import AttributeUsage from './AttributeUsage' import DatabaseSizeUsage from './DatabaseSizeUsage' import { DiskUsage } from './DiskUsage' import { ScaffoldContainer } from '@/components/layouts/Scaffold' import { DataPoint } from '@/data/analytics/constants' import { PricingMetric } from '@/data/analytics/org-daily-stats-query' import type { OrgSubscription } from '@/data/subscriptions/types' import { useOrgUsageQuery } from '@/data/usage/org-usage-query' export interface ChartMeta { [key: string]: { data: DataPoint[]; margin: number; isLoading: boolean } } export interface UsageSectionProps { orgSlug: string projectRef?: string | null categoryKey: CategoryMetaKey subscription?: OrgSubscription chartMeta: ChartMeta currentBillingCycleSelected: boolean startDate?: string endDate?: string } const UsageSection = ({ orgSlug, projectRef, categoryKey, chartMeta, subscription, currentBillingCycleSelected, startDate, endDate, }: UsageSectionProps) => { const { data: usage, error: usageError, isPending: isLoadingUsage, isError: isErrorUsage, isSuccess: isSuccessUsage, } = useOrgUsageQuery({ orgSlug, projectRef, start: !currentBillingCycleSelected && startDate ? new Date(startDate) : undefined, end: !currentBillingCycleSelected && endDate ? new Date(endDate) : undefined, }) const categoryMeta = USAGE_CATEGORIES(subscription).find( (category) => category.key === categoryKey ) if (!categoryMeta) return null return ( <> {categoryMeta.attributes.map((attribute) => attribute.key === 'diskSize' ? ( ) : attribute.key === PricingMetric.DATABASE_SIZE && subscription?.plan.id === 'free' ? ( ) : ( x.metric === attribute.key)} chartMeta={chartMeta} subscription={subscription} error={usageError} isLoading={isLoadingUsage} isError={isErrorUsage} isSuccess={isSuccessUsage} currentBillingCycleSelected={currentBillingCycleSelected} /> ) )} ) } export default UsageSection