| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108 |
- 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 (
- <>
- <ScaffoldContainer>
- <SectionHeader
- title={categoryMeta.name}
- description={categoryMeta.description}
- className="pb-0"
- />
- </ScaffoldContainer>
- {categoryMeta.attributes.map((attribute) =>
- attribute.key === 'diskSize' ? (
- <DiskUsage
- key={attribute.name}
- slug={orgSlug}
- projectRef={projectRef}
- attribute={attribute}
- subscription={subscription}
- currentBillingCycleSelected={currentBillingCycleSelected}
- usage={usage}
- />
- ) : attribute.key === PricingMetric.DATABASE_SIZE && subscription?.plan.id === 'free' ? (
- <DatabaseSizeUsage
- key={attribute.name}
- slug={orgSlug}
- projectRef={projectRef}
- attribute={attribute}
- subscription={subscription}
- currentBillingCycleSelected={currentBillingCycleSelected}
- usage={usage}
- />
- ) : (
- <AttributeUsage
- key={attribute.name}
- slug={orgSlug}
- projectRef={projectRef}
- attribute={attribute}
- usage={usage}
- usageMeta={usage?.usages.find((x) => x.metric === attribute.key)}
- chartMeta={chartMeta}
- subscription={subscription}
- error={usageError}
- isLoading={isLoadingUsage}
- isError={isErrorUsage}
- isSuccess={isSuccessUsage}
- currentBillingCycleSelected={currentBillingCycleSelected}
- />
- )
- )}
- </>
- )
- }
- export default UsageSection
|