import { useCallback } from "react"; import { IPaste } from "../../"; export const useApplyPastes = ( getKey: (row: TElement) => TKey ) => useCallback( (pastes: IPaste<{ element: TElement; subRow: TSubRow }, TElement>[]) => { const intermediateValues = new Map(); pastes.forEach(({ row, changers }) => { const key = getKey(row.element); let value = intermediateValues.get(key) ?? row.element; changers.forEach((changer) => { value = changer({ element: value, subRow: row.subRow }); }); intermediateValues.set(key, value); }); return [...intermediateValues.values()]; }, [getKey] );