import LazyMemo from './LazyMemo'; import { SyntheticEvent } from 'react'; function shallowAlphabeticalStringify(obj: any) { return JSON.stringify(obj, Object.keys(obj).sort()); } export default function MemoizedHandlerFactory( handler: (e: React.MouseEvent, params: Params) => void, key: (params: Params) => string = shallowAlphabeticalStringify ) { const memo = new LazyMemo) => void>( key, (params: Params) => { return (e: React.MouseEvent) => handler(e, params); } ); return (params: Params) => memo.get(params); }