import { useContext } from 'react'; import classNames from 'classnames'; import { useMessages } from '@/components/hooks'; import { ReportContext } from '../[reportId]/Report'; import { formatLongNumber } from '@/lib/format'; import styles from './GoalsChart.module.css'; export function GoalsChart({ className }: { className?: string; isLoading?: boolean }) { const { report } = useContext(ReportContext); const { formatMessage, labels } = useMessages(); const { data } = report || {}; const getLabel = type => { let label = ''; switch (type) { case 'url': label = labels.viewedPage; break; case 'event': label = labels.triggeredEvent; break; default: label = labels.collectedData; break; } return label; }; return (
{data?.map(({ type, value, goal, result, property, operator }, index: number) => { const percent = result > goal ? 100 : (result / goal) * 100; return (
{formatMessage(getLabel(type))} {`${value}${ type === 'event-data' ? `:(${operator}):${property}` : '' }`}
20 && percent <= 40, [styles.level3]: percent > 40 && percent <= 60, [styles.level4]: percent > 60 && percent <= 80, [styles.level5]: percent > 80, }), )} style={{ width: `${percent}%` }} >
{formatLongNumber(result)} / {formatLongNumber(goal)}
{((result / goal) * 100).toFixed(2)}%
); })}
); } export default GoalsChart;