EdgeFunctionTimeSeriesChartCard.tsx 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import type { ReactNode } from 'react'
  2. import type { ChartConfig } from 'ui'
  3. import {
  4. Chart,
  5. ChartCard,
  6. ChartContent,
  7. ChartHeader,
  8. ChartLine,
  9. ChartLoadingState,
  10. type ChartLineProps,
  11. } from 'ui-patterns/Chart'
  12. import { EdgeFunctionChartEmptyState } from './EdgeFunctionChartEmptyState'
  13. import type { EdgeFunctionChartDatum } from './EdgeFunctionOverview.utils'
  14. interface EdgeFunctionTimeSeriesChartCardProps {
  15. data: EdgeFunctionChartDatum[]
  16. dateTimeFormat: string
  17. isLoading: boolean
  18. isError: boolean
  19. emptyTitle: string
  20. emptyDescription?: string
  21. metrics: ReactNode
  22. dataKey: string
  23. dataKeys?: string[]
  24. config: ChartConfig
  25. tooltipDetails?: ChartLineProps['tooltipDetails']
  26. referenceLines?: ChartLineProps['referenceLines']
  27. yAxisProps?: ChartLineProps['YAxisProps']
  28. className?: string
  29. }
  30. export const EdgeFunctionTimeSeriesChartCard = ({
  31. data,
  32. dateTimeFormat,
  33. isLoading,
  34. isError,
  35. emptyTitle,
  36. emptyDescription,
  37. metrics,
  38. dataKey,
  39. dataKeys,
  40. config,
  41. tooltipDetails,
  42. referenceLines,
  43. yAxisProps,
  44. className,
  45. }: EdgeFunctionTimeSeriesChartCardProps) => {
  46. return (
  47. <Chart isLoading={isLoading} className={className}>
  48. <ChartCard>
  49. <ChartHeader align="start">{metrics}</ChartHeader>
  50. <ChartContent
  51. isEmpty={isError || data.length === 0}
  52. emptyState={
  53. <EdgeFunctionChartEmptyState title={emptyTitle} description={emptyDescription} />
  54. }
  55. loadingState={<ChartLoadingState />}
  56. >
  57. <div className="h-40">
  58. <ChartLine
  59. data={data}
  60. dataKey={dataKey}
  61. dataKeys={dataKeys}
  62. DateTimeFormat={dateTimeFormat}
  63. isFullHeight
  64. showYAxis
  65. config={config}
  66. tooltipDetails={tooltipDetails}
  67. referenceLines={referenceLines}
  68. YAxisProps={yAxisProps}
  69. />
  70. </div>
  71. </ChartContent>
  72. </ChartCard>
  73. </Chart>
  74. )
  75. }