-
Notifications
You must be signed in to change notification settings - Fork 375
Expand file tree
/
Copy pathSettingsContainer.js
More file actions
43 lines (39 loc) · 1.54 KB
/
SettingsContainer.js
File metadata and controls
43 lines (39 loc) · 1.54 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import React from 'react';
import PropTypes from 'prop-types';
import { connect } from '../utils/griddleConnect';
import compose from 'recompose/compose';
import mapProps from 'recompose/mapProps';
import getContext from 'recompose/getContext';
//import { classNamesForComponentSelector, stylesForComponentSelector } from '../selectors/dataSelectors';
function getSettingsComponentsArrayFromObject(settingsObject, settingsComponents) {
//TODO: determine if we need to make this faster
return settingsObject ? Object.keys(settingsObject)
.sort((a, b) => {
var oa = settingsObject[a], ob = settingsObject[b];
return ((oa && oa.order) || 0) - ((ob && ob.order) || 0);
})
.map(key => settingsObject[key] && (settingsObject[key].component || (settingsComponents && settingsComponents[key]))) : null;
}
const EnhancedSettings = OriginalComponent => compose(
getContext({
components: PropTypes.object,
selectors: PropTypes.object,
settingsComponentObjects: PropTypes.object
}),
connect(
(state, props) => ({
className: props.selectors.classNamesForComponentSelector(state, 'Settings'),
style: props.selectors.stylesForComponentSelector(state, 'Settings'),
})
),
mapProps(props => {
const { components, settingsComponentObjects, ...otherProps } = props;
return {
settingsComponents: getSettingsComponentsArrayFromObject(settingsComponentObjects, components.SettingsComponents),
...otherProps,
};
})
)(props => (
<OriginalComponent {...props} />
));
export default EnhancedSettings;