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) => (
)
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')}`
}