1 | import _extends from 'babel-runtime/helpers/extends';
|
2 | import _objectWithoutProperties from 'babel-runtime/helpers/objectWithoutProperties';
|
3 | import _classCallCheck from 'babel-runtime/helpers/classCallCheck';
|
4 | import _possibleConstructorReturn from 'babel-runtime/helpers/possibleConstructorReturn';
|
5 | import _inherits from 'babel-runtime/helpers/inherits';
|
6 |
|
7 | var _class, _temp;
|
8 |
|
9 | import React from 'react';
|
10 | import PropTypes from 'prop-types';
|
11 | import classnames from 'classnames';
|
12 | import FilterComponent from './filter';
|
13 | import SortComponent from './sort';
|
14 | import CellComponent from './cell';
|
15 | import ResizeComponent from './resize';
|
16 |
|
17 | var noop = function noop() {};
|
18 | var 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 |
|
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 |
|
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 |
|
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);
|
268 | Header.displayName = 'Header';
|
269 | export { Header as default }; |
\ | No newline at end of file |