Files
talk/client/coral-framework/hocs/withMergedSettings.js
T
2018-01-11 20:00:34 -07:00

31 lines
885 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;