-
Notifications
You must be signed in to change notification settings - Fork 375
Expand file tree
/
Copy pathCellContainer.js
More file actions
67 lines (58 loc) · 2.11 KB
/
CellContainer.js
File metadata and controls
67 lines (58 loc) · 2.11 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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import React from 'react';
import PropTypes from 'prop-types';
import { connect } from '../utils/griddleConnect';
import getContext from 'recompose/getContext';
import mapProps from 'recompose/mapProps';
import compose from 'recompose/compose';
//import {
// customComponentSelector,
// cellValueSelector,
// cellPropertiesSelector,
// classNamesForComponentSelector,
// stylesForComponentSelector
//} from '../selectors/dataSelectors';
import { valueOrResult } from '../utils/valueUtils';
function hasWidthOrStyles(cellProperties) {
return cellProperties.hasOwnProperty('width') || cellProperties.hasOwnProperty('styles');
}
function getCellStyles(cellProperties, originalStyles) {
if (!hasWidthOrStyles(cellProperties)) { return originalStyles; }
let styles = originalStyles;
// we want to take griddle style object styles, cell specific styles
if (cellProperties.hasOwnProperty('style')) {
styles = Object.assign({}, styles, originalStyles, cellProperties.style);
}
if (cellProperties.hasOwnProperty('width')) {
styles = Object.assign({}, styles, { width: cellProperties.width });
}
return styles;
}
const ComposedCellContainer = OriginalComponent => compose(
getContext({
selectors: PropTypes.object,
}),
connect((state, props) => {
return {
value: props.selectors.cellValueSelector(state, props),
customComponent: props.selectors.customComponentSelector(state, props),
cellProperties: props.selectors.cellPropertiesSelector(state, props),
className: props.selectors.classNamesForComponentSelector(state, 'Cell'),
style: props.selectors.stylesForComponentSelector(state, 'Cell'),
};
}),
mapProps(props => {
return ({
...props.cellProperties.extraData,
...props,
className: valueOrResult(props.cellProperties.cssClassName, props) || props.className,
style: getCellStyles(props.cellProperties, props.style),
value: props.customComponent ?
<props.customComponent {...props.cellProperties.extraData} {...props} /> :
props.value
})})
)(props =>
<OriginalComponent
{...props}
/>
);
export default ComposedCellContainer;