import {mergeExcludingArrays} from 'coral-framework/utils'; import assignWith from 'lodash/assignWith'; import get from 'lodash/get'; import {withPropsOnChange} from 'recompose'; /** * Exports a HOC that applies props at `pending` to * props at `settings` and writes into `result` prop name. * `Settings`, and `pending` can have a dotnotation like * "asset.settings". * * Example: * withMergedSettings('asset.settings', 'pending', 'mergedSettings') */ const withMergedSettings = (settings, pending, result) => withPropsOnChange( (props, nextProps) => get(props, settings) !== get(nextProps, settings) || get(props, pending) !== get(nextProps, pending), (props) => ({ [result]: assignWith({}, get(props, settings), get(props, pending), mergeExcludingArrays) }) ); export default withMergedSettings;