UNPKG

@razorpay/blade

Version:

The Design System that powers Razorpay

56 lines (53 loc) 2.08 kB
import { useRef, useLayoutEffect, memo } from 'react'; import { useAppDispatch } from './hooks.js'; import { addCartesianGraphicalItem, replaceCartesianGraphicalItem, removeCartesianGraphicalItem, addPolarGraphicalItem, removePolarGraphicalItem } from './graphicalItemsSlice.js'; var SetCartesianGraphicalItemImpl = props => { var dispatch = useAppDispatch(); var prevPropsRef = useRef(null); useLayoutEffect(() => { if (prevPropsRef.current === null) { dispatch(addCartesianGraphicalItem(props)); } else if (prevPropsRef.current !== props) { dispatch(replaceCartesianGraphicalItem({ prev: prevPropsRef.current, next: props })); } prevPropsRef.current = props; }, [dispatch, props]); useLayoutEffect(() => { return () => { if (prevPropsRef.current) { dispatch(removeCartesianGraphicalItem(prevPropsRef.current)); /* * Here we have to reset the ref to null because in StrictMode, the effect will run twice, * but it will keep the same ref value from the first render. * * In browser, React will clear the ref after the first effect cleanup, * so that wouldn't be an issue. * * In StrictMode, however, the ref is kept, * and in the hook above the code checks for `prevPropsRef.current === null` * which would be false so it would not dispatch the `addCartesianGraphicalItem` action again. * * https://github.com/recharts/recharts/issues/6022 */ prevPropsRef.current = null; } }; }, [dispatch]); return null; }; var SetCartesianGraphicalItem = /*#__PURE__*/memo(SetCartesianGraphicalItemImpl); function SetPolarGraphicalItem(props) { var dispatch = useAppDispatch(); useLayoutEffect(() => { dispatch(addPolarGraphicalItem(props)); return () => { dispatch(removePolarGraphicalItem(props)); }; }, [dispatch, props]); return null; } export { SetCartesianGraphicalItem, SetPolarGraphicalItem }; //# sourceMappingURL=SetGraphicalItem.js.map