mirror of
https://github.com/supabase/supabase.git
synced 2026-10-16 22:59:11 +03:00
* test client connections charts * add granularity to database dashboard * add range selection * add selection to area charts * refactor ChartHeader * fix default * fix time preset selected label and add tooltip actions * client connections stacked chart * polish all new chartts * change attribute * fix * add real queries * memory stack * cleanup * precision 1 * update charts * add endpoints * tooltip * format * improve charts * toggle max value * show limit * cleanup * cleanup * update api schema * fix ram_usage_max_available * remove pgbouncer and comments * show total with percentage in chart header * pretty * hide * update reports database * remove client_connections * revert * fix connectionStrings error * restore correct queries and conditions * vertically zoom in to percentage data * add feature flag logic on charts * add feature flag logic to date picker * chore: remove comment * add tooltip to charts metrics * chore: comment new pg endpoints * feat: lazy load ComposedChartHandler queries * feat: dim non-hovered chart values when hovering chart label item * feat: improve dim styling * chore: improve light mode stacked chart colors * chore: remove 15s interval * chore: sync types * chore: remove type * chore: restore type * fix hook error * show chart type toggle * remove console log * temp * keep connections charts as before * restore DateRangePicker * show last aggregate value when not hovering * clean up imports * disk IOps read and write * restore flag * refactor queries * clean up grafana promo banner * Update database-charts.ts | updated language * fix hook error * fix hook error * fix hook error * attempt fix hook error --------- Co-authored-by: TheOtherBrian1 <91111415+TheOtherBrian1@users.noreply.github.com>
110 lines
3.3 KiB
TypeScript
110 lines
3.3 KiB
TypeScript
import { Button, Tooltip, TooltipContent, TooltipTrigger } from 'ui'
|
|
import { Activity, BarChartIcon, GitCommitHorizontalIcon } from 'lucide-react'
|
|
|
|
export interface ChartHeaderProps {
|
|
title?: string
|
|
format?: string | ((value: unknown) => string)
|
|
customDateFormat?: string
|
|
minimalHeader?: boolean
|
|
displayDateInUtc?: boolean
|
|
highlightedLabel?: number | string | any | null
|
|
highlightedValue?: number | string | any | null
|
|
hideChartType?: boolean
|
|
chartStyle?: string
|
|
onChartStyleChange?: (style: string) => void
|
|
showMaxValue?: boolean
|
|
setShowMaxValue?: (value: boolean) => void
|
|
}
|
|
|
|
const ChartHeader = ({
|
|
format,
|
|
highlightedValue,
|
|
highlightedLabel,
|
|
title,
|
|
minimalHeader = false,
|
|
hideChartType = false,
|
|
chartStyle = 'bar',
|
|
onChartStyleChange,
|
|
showMaxValue = false,
|
|
setShowMaxValue,
|
|
}: ChartHeaderProps) => {
|
|
const chartTitle = (
|
|
<h3 className={'text-foreground-lighter ' + (minimalHeader ? 'text-xs' : 'text-sm')}>
|
|
{title}
|
|
</h3>
|
|
)
|
|
|
|
const highlighted = (
|
|
<h4
|
|
className={`text-foreground text-xl font-normal ${minimalHeader ? 'text-base' : 'text-2xl'}`}
|
|
>
|
|
{highlightedValue !== undefined && highlightedValue}
|
|
{format === 'seconds' ? ' ' : ''}
|
|
<span className="text-lg">
|
|
{typeof format === 'function' ? format(highlightedValue) : format}
|
|
</span>
|
|
</h4>
|
|
)
|
|
const label = <h4 className="text-foreground-lighter text-xs">{highlightedLabel}</h4>
|
|
|
|
if (minimalHeader) {
|
|
return (
|
|
<div className="flex flex-row items-center gap-x-4" style={{ minHeight: '1.8rem' }}>
|
|
{title && chartTitle}
|
|
<div className="flex flex-row items-baseline gap-x-2">
|
|
{highlightedValue !== undefined && highlighted}
|
|
{label}
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
return (
|
|
<div className="flex-grow flex justify-between items-start min-h-16">
|
|
<div className="flex flex-col">
|
|
{title && chartTitle}
|
|
{highlightedValue !== undefined && highlighted}
|
|
{label}
|
|
</div>
|
|
<div className="flex items-center gap-2">
|
|
{!hideChartType && onChartStyleChange && (
|
|
<Tooltip>
|
|
<TooltipTrigger asChild>
|
|
<Button
|
|
type="default"
|
|
className="px-1.5"
|
|
icon={chartStyle === 'bar' ? <Activity /> : <BarChartIcon />}
|
|
onClick={() => onChartStyleChange(chartStyle === 'bar' ? 'line' : 'bar')}
|
|
/>
|
|
</TooltipTrigger>
|
|
<TooltipContent side="left" align="center">
|
|
View as {chartStyle === 'bar' ? 'line chart' : 'bar chart'}
|
|
</TooltipContent>
|
|
</Tooltip>
|
|
)}
|
|
{setShowMaxValue && (
|
|
<Tooltip>
|
|
<TooltipTrigger asChild>
|
|
<Button
|
|
type={showMaxValue ? 'default' : 'dashed'}
|
|
className="px-1.5"
|
|
icon={
|
|
<GitCommitHorizontalIcon
|
|
className={showMaxValue ? 'text-foreground' : 'text-foreground-lighter'}
|
|
/>
|
|
}
|
|
onClick={() => setShowMaxValue(!showMaxValue)}
|
|
/>
|
|
</TooltipTrigger>
|
|
<TooltipContent side="left" align="center">
|
|
{showMaxValue ? 'Hide' : 'Show'} limit
|
|
</TooltipContent>
|
|
</Tooltip>
|
|
)}
|
|
</div>
|
|
</div>
|
|
)
|
|
}
|
|
|
|
export default ChartHeader
|