diff --git a/Source/Filter/FilterPanel.tsx b/Source/Filter/FilterPanel.tsx index 6ff0232..78d5c71 100644 --- a/Source/Filter/FilterPanel.tsx +++ b/Source/Filter/FilterPanel.tsx @@ -180,9 +180,13 @@ export function FilterPanel({ const rangeSelection = rangeValues[filter.key]; const customValue = customValues?.[filter.key]; const isExpanded = expandedFilterKey === filter.key; - const isNumeric = filter.type === 'number'; + const isDate = filter.type === 'date'; + const isNumeric = filter.type === 'number' || isDate; const editorRender = editorMap[filter.key]; const isCustom = filter.type === 'custom' || editorRender !== undefined; + const formatRangeValue = isDate + ? (value: number) => new Date(value).toLocaleString() + : undefined; return (
@@ -219,6 +223,7 @@ export function FilterPanel({ buckets={filter.buckets ?? 20} selectedRange={rangeSelection ?? null} onChange={(range) => onRangeChange(filter.key, range)} + formatValue={formatRangeValue} /> ) : ( <> diff --git a/Source/Filter/RangeHistogramFilter.tsx b/Source/Filter/RangeHistogramFilter.tsx index 67b7e55..8decabf 100644 --- a/Source/Filter/RangeHistogramFilter.tsx +++ b/Source/Filter/RangeHistogramFilter.tsx @@ -11,6 +11,11 @@ export interface RangeHistogramFilterProps { buckets?: number; selectedRange: [number, number] | null; onChange: (range: [number, number] | null) => void; + /** + * Optional formatter for endpoint labels and bar tooltips. Defaults to a numeric formatter. + * Use this to display ms timestamps as dates, currency, etc. + */ + formatValue?: (value: number) => string; } interface HistogramBucket { @@ -20,6 +25,11 @@ interface HistogramBucket { maxCount: number; } +const defaultFormatValue = (value: number) => { + if (Number.isInteger(value)) return value.toString(); + return value.toFixed(1); +}; + export function RangeHistogramFilter({ values, min, @@ -27,6 +37,7 @@ export function RangeHistogramFilter({ buckets = 20, selectedRange, onChange, + formatValue = defaultFormatValue, }: RangeHistogramFilterProps) { const containerRef = useRef(null); const [isDragging, setIsDragging] = useState<'left' | 'right' | 'range' | null>(null); @@ -155,11 +166,6 @@ export function RangeHistogramFilter({ const leftPos = getPositionFromValue(currentRange[0]); const rightPos = getPositionFromValue(currentRange[1]); - const formatValue = (value: number) => { - if (Number.isInteger(value)) return value.toString(); - return value.toFixed(1); - }; - return (