import React from 'react' import { Color, colorPalette, getColorClassNames, tremorTwMerge } from '~/lib/tremor' import { CustomTooltipProps } from '@tremor/react' import { GroupByPeriod } from '~/services/vacancies/vacancies.types' import { endOfMonth, endOfWeek, endOfYear, isSameDay, setDefaultOptions } from 'date-fns' setDefaultOptions({ weekStartsOn: 1 }) export const ChartTooltipFrame = ({ children }: { children: React.ReactNode }) => (
{children}
) export interface ChartTooltipRowProps { value: string name: string color: Color | string } export const ChartTooltipRow = ({ value, name, color }: ChartTooltipRowProps) => (

{name}

{value}

) const ChartTooltip = ({ active, payload, groupBy, }: CustomTooltipProps & { rawDate: string groupBy: GroupByPeriod }) => { if (active && payload) { const rawDate = payload[0]?.payload?.rawDate const filteredPayload = payload.filter((item: any) => item.type !== 'none') return (

{formatDate(rawDate ?? '', groupBy)}

{filteredPayload.map(({ value, name, color }, idx: number) => ( ))}
) } return null } export { ChartTooltip } function formatDate(date: string | number, groupBy: GroupByPeriod): string { let endDate: Date const startDate = new Date(date) switch (groupBy) { case 'day': endDate = new Date(startDate) break case 'week': endDate = endOfWeek(startDate) break case 'month': endDate = endOfMonth(startDate) break case 'year': endDate = new Date(endOfYear(startDate)) break default: endDate = new Date(startDate) } return isSameDay(startDate, endDate) ? startDate.toLocaleDateString('ru') : `${startDate.toLocaleDateString('ru')} - ${endDate.toLocaleDateString('ru')}` }