import { useContext, useMemo, useState } from 'react'; import { ReportContext } from '../[reportId]/Report'; import { firstBy } from 'thenby'; import styles from './JourneyView.module.css'; import classNames from 'classnames'; import { useEscapeKey } from 'components/hooks'; export default function JourneyView() { const [selected, setSelected] = useState(null); const { report } = useContext(ReportContext); const { data } = report || {}; useEscapeKey(() => setSelected(null)); const columns = useMemo(() => { if (!data) { return []; } return Array(data[0].items.length) .fill(undefined) .map((col = {}, index) => { data.forEach(({ items, count }) => { const item = items[index]; if (item) { if (!col[item]) { col[item] = { item, total: +count, index, paths: [ data.filter((d, i) => { return d.items[index] === item && i !== index; }), ], }; } else { col[item].total += +count; } } }); return Object.keys(col) .map(key => col[key]) .sort(firstBy('total', -1)); }); }, [data]); const handleClick = (item: string, index: number, paths: any[]) => { if (item !== selected?.item || index !== selected?.index) { setSelected({ item, index, paths }); } else { setSelected(null); } }; if (!data) { return null; } return (