Files
talk/client/coral-framework/hocs/withMergedSettings.js
T
2017-11-21 12:42:17 +01:00

26 lines
842 B
JavaScript

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;