UNPKG

10.7 kBJavaScriptView Raw
1import _extends from 'babel-runtime/helpers/extends';
2import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';
3import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
4import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
5import _inherits from 'babel-runtime/helpers/inherits';
6
7var _class, _temp;
8
9import React from 'react';
10import PropTypes from 'prop-types';
11import classnames from 'classnames';
12import FilterComponent from './filter';
13import SortComponent from './sort';
14import CellComponent from './cell';
15import ResizeComponent from './resize';
16
17var noop = function noop() {};
18var Header = (_temp = _class = function (_React$Component) {
19 _inherits(Header, _React$Component);
20
21 function Header() {
22 _classCallCheck(this, Header);
23
24 var _this = _possibleConstructorReturn(this, _React$Component.call(this));
25
26 _this.checkHasLock = function () {
27 var columns = _this.props.columns;
28
29 var hasLock = false;
30 for (var i = 0; i < columns.length; i++) {
31 var cols = columns[i];
32 for (var j = 0; j < cols.length; j++) {
33 var col = cols[j];
34 if (col.lock) {
35 hasLock = true;
36 break;
37 }
38 }
39 if (hasLock) {
40 break;
41 }
42 }
43 _this.hasLock = hasLock;
44 };
45
46 _this.getCellRef = function (i, j, cell) {
47 _this.props.headerCellRef(i, j, cell);
48
49 var columns = _this.props.columns;
50
51 var columnProps = columns[i] && columns[i][j];
52 if (columnProps && columnProps.ref && typeof columnProps.ref === 'function') {
53 columnProps.ref(cell);
54 }
55 };
56
57 _this.getCellDomRef = function (i, j, cellDom) {
58 var cellRefKey = _this.getCellDomRefKey(i, j);
59 _this[cellRefKey] = cellDom;
60 };
61
62 _this.getCellDomRefKey = function (i, j) {
63 return 'header_cell_' + i + '_' + j;
64 };
65
66 _this.onSort = function (dataIndex, order, sort) {
67 _this.props.onSort(dataIndex, order, sort);
68 };
69
70 _this.hasLock = false;
71 return _this;
72 }
73
74 Header.prototype.render = function render() {
75 var _this2 = this;
76
77 /*eslint-disable no-unused-vars */
78 var _props = this.props,
79 prefix = _props.prefix,
80 className = _props.className,
81 children = _props.children,
82 Tag = _props.component,
83 colGroup = _props.colGroup,
84 columns = _props.columns,
85 locale = _props.locale,
86 filterParams = _props.filterParams,
87 onFilter = _props.onFilter,
88 components = _props.components,
89 affixRef = _props.affixRef,
90 headerCellRef = _props.headerCellRef,
91 onSort = _props.onSort,
92 sort = _props.sort,
93 sortIcons = _props.sortIcons,
94 onResizeChange = _props.onResizeChange,
95 pure = _props.pure,
96 rtl = _props.rtl,
97 tableWidth = _props.tableWidth,
98 tableEl = _props.tableEl,
99 resizeProxyDomRef = _props.resizeProxyDomRef,
100 others = _objectWithoutProperties(_props, ['prefix', 'className', 'children', 'component', 'colGroup', 'columns', 'locale', 'filterParams', 'onFilter', 'components', 'affixRef', 'headerCellRef', 'onSort', 'sort', 'sortIcons', 'onResizeChange', 'pure', 'rtl', 'tableWidth', 'tableEl', 'resizeProxyDomRef']);
101
102 this.checkHasLock();
103
104 var _components$Cell = components.Cell,
105 Cell = _components$Cell === undefined ? CellComponent : _components$Cell,
106 _components$Filter = components.Filter,
107 Filter = _components$Filter === undefined ? FilterComponent : _components$Filter,
108 _components$Sort = components.Sort,
109 Sort = _components$Sort === undefined ? SortComponent : _components$Sort,
110 _components$Resize = components.Resize,
111 Resize = _components$Resize === undefined ? ResizeComponent : _components$Resize;
112
113 var rowSpan = columns.length;
114
115 var header = columns.map(function (cols, index) {
116 var col = cols.map(function (col, j) {
117 var _classnames;
118
119 var cellRefKey = _this2.getCellDomRefKey(index, j);
120 /* eslint-disable no-unused-vars, prefer-const */
121
122 var title = col.title,
123 colSpan = col.colSpan,
124 sortable = col.sortable,
125 sortDirections = col.sortDirections,
126 resizable = col.resizable,
127 asyncResizable = col.asyncResizable,
128 dataIndex = col.dataIndex,
129 filters = col.filters,
130 filterMode = col.filterMode,
131 filterMenuProps = col.filterMenuProps,
132 filterProps = col.filterProps,
133 width = col.width,
134 align = col.align,
135 alignHeader = col.alignHeader,
136 className = col.className,
137 __normalized = col.__normalized,
138 lock = col.lock,
139 cellStyle = col.cellStyle,
140 wordBreak = col.wordBreak,
141 others = _objectWithoutProperties(col, ['title', 'colSpan', 'sortable', 'sortDirections', 'resizable', 'asyncResizable', 'dataIndex', 'filters', 'filterMode', 'filterMenuProps', 'filterProps', 'width', 'align', 'alignHeader', 'className', '__normalized', 'lock', 'cellStyle', 'wordBreak']);
142
143 var order = sort ? sort[dataIndex] : '';
144 className = classnames((_classnames = {}, _classnames[prefix + 'table-header-node'] = true, _classnames[prefix + 'table-header-resizable'] = resizable || asyncResizable, _classnames[prefix + 'table-word-break-' + wordBreak] = !!wordBreak, _classnames[prefix + 'table-header-sort-' + order] = sortable && order, _classnames[className] = className, _classnames));
145 var attrs = {},
146 sortElement = void 0,
147 filterElement = void 0,
148 resizeElement = void 0;
149
150 attrs.colSpan = colSpan;
151
152 // column.group doesn't have sort resize filter
153 if (!(col.children && col.children.length)) {
154 if (sortable) {
155 sortElement = React.createElement(Sort, {
156 prefix: prefix,
157 className: prefix + 'table-header-icon',
158 dataIndex: dataIndex,
159 onSort: _this2.onSort,
160 sortDirections: sortDirections,
161 sortIcons: sortIcons,
162 sort: sort,
163 rtl: rtl,
164 locale: locale
165 });
166 }
167 if (asyncResizable || resizable) {
168 resizeElement = React.createElement(Resize, {
169 asyncResizable: asyncResizable,
170 hasLock: _this2.hasLock,
171 col: col,
172 tableEl: tableEl,
173 prefix: prefix,
174 rtl: rtl,
175 dataIndex: dataIndex,
176 resizeProxyDomRef: resizeProxyDomRef,
177 cellDomRef: _this2[cellRefKey],
178 onChange: onResizeChange
179 });
180 }
181
182 if (filters) {
183 filterElement = filters.length ? React.createElement(Filter, {
184 dataIndex: dataIndex,
185 className: prefix + 'table-header-icon',
186 filters: filters,
187 prefix: prefix,
188 locale: locale,
189 rtl: rtl,
190 filterParams: filterParams,
191 filterMode: filterMode,
192 filterMenuProps: filterMenuProps,
193 filterProps: filterProps,
194 onFilter: onFilter
195 }) : null;
196 }
197 attrs.rowSpan = rowSpan - index;
198 }
199
200 if (+attrs.colSpan === 0) {
201 return null;
202 }
203
204 return React.createElement(
205 Cell,
206 _extends({}, others, attrs, {
207 key: j,
208 prefix: prefix,
209 pure: pure,
210 rtl: rtl,
211 cell: title,
212 component: 'th',
213 align: alignHeader ? alignHeader : align,
214 className: className,
215 ref: _this2.getCellRef.bind(_this2, index, j),
216 getCellDomRef: _this2.getCellDomRef.bind(_this2, index, j),
217 type: 'header'
218 }),
219 sortElement,
220 filterElement,
221 resizeElement
222 );
223 });
224 return React.createElement(
225 'tr',
226 { key: index },
227 col
228 );
229 });
230
231 return React.createElement(
232 Tag,
233 _extends({ className: className }, others),
234 header,
235 children
236 );
237 };
238
239 return Header;
240}(React.Component), _class.propTypes = {
241 children: PropTypes.any,
242 prefix: PropTypes.string,
243 pure: PropTypes.bool,
244 className: PropTypes.string,
245 component: PropTypes.string,
246 columns: PropTypes.array,
247 colGroup: PropTypes.object,
248 headerCellRef: PropTypes.func,
249 locale: PropTypes.object,
250 filterParams: PropTypes.object,
251 onFilter: PropTypes.func,
252 components: PropTypes.object,
253 sort: PropTypes.object,
254 sortIcons: PropTypes.object,
255 onSort: PropTypes.func,
256 onResizeChange: PropTypes.func,
257 tableWidth: PropTypes.number,
258 tableEl: PropTypes.any
259}, _class.defaultProps = {
260 component: 'thead',
261 columns: [],
262 headerCellRef: noop,
263 onFilter: noop,
264 components: {},
265 onSort: noop,
266 onResizeChange: noop
267}, _temp);
268Header.displayName = 'Header';
269export { Header as default };
\No newline at end of file