import { useContext } from 'react'; import classNames from 'classnames'; import { useMessages } from 'components/hooks'; import { ReportContext } from '../[reportId]/Report'; import { formatLongNumberOptions } from 'lib/format'; import { useIntl } from 'react-intl'; import styles from './FunnelChart.module.css'; export interface FunnelChartProps { className?: string; isLoading?: boolean; } export function FunnelChart({ className }: FunnelChartProps) { const { report } = useContext(ReportContext); const { formatMessage, labels } = useMessages(); const intl = useIntl(); const { data } = report || {}; return (
{data?.map(({ type, value, visitors, dropped, dropoff, remaining }, index: number) => { return (
{index + 1}
{formatMessage(type === 'url' ? labels.viewedPage : labels.triggeredEvent)} {value}
{intl.formatNumber(+visitors, formatLongNumberOptions(+visitors))} {formatMessage(labels.visitors)}
{intl.formatNumber(+remaining, { style: 'percent', maximumFractionDigits: 2 })}
{dropoff > 0 && (
{intl.formatNumber(+dropped, formatLongNumberOptions(+dropped))}{' '} {formatMessage(labels.visitorsDroppedOff)} ( {intl.formatNumber(+dropoff, { style: 'percent', maximumFractionDigits: 2 })})
)}
); })}
); } export default FunnelChart;