Table.js 50 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410
  1. 'use strict';
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. var _objectWithoutProperties2 = require('babel-runtime/helpers/objectWithoutProperties');
  6. var _objectWithoutProperties3 = _interopRequireDefault(_objectWithoutProperties2);
  7. var _defineProperty2 = require('babel-runtime/helpers/defineProperty');
  8. var _defineProperty3 = _interopRequireDefault(_defineProperty2);
  9. var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
  10. var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
  11. var _typeof2 = require('babel-runtime/helpers/typeof');
  12. var _typeof3 = _interopRequireDefault(_typeof2);
  13. var _extends4 = require('babel-runtime/helpers/extends');
  14. var _extends5 = _interopRequireDefault(_extends4);
  15. var _vcTable = require('../vc-table');
  16. var _vcTable2 = _interopRequireDefault(_vcTable);
  17. var _classnames = require('classnames');
  18. var _classnames2 = _interopRequireDefault(_classnames);
  19. var _shallowequal = require('shallowequal');
  20. var _shallowequal2 = _interopRequireDefault(_shallowequal);
  21. var _filterDropdown = require('./filterDropdown');
  22. var _filterDropdown2 = _interopRequireDefault(_filterDropdown);
  23. var _SelectionBox = require('./SelectionBox');
  24. var _SelectionBox2 = _interopRequireDefault(_SelectionBox);
  25. var _SelectionCheckboxAll = require('./SelectionCheckboxAll');
  26. var _SelectionCheckboxAll2 = _interopRequireDefault(_SelectionCheckboxAll);
  27. var _Column = require('./Column');
  28. var _Column2 = _interopRequireDefault(_Column);
  29. var _ColumnGroup = require('./ColumnGroup');
  30. var _ColumnGroup2 = _interopRequireDefault(_ColumnGroup);
  31. var _createBodyRow = require('./createBodyRow');
  32. var _createBodyRow2 = _interopRequireDefault(_createBodyRow);
  33. var _util = require('./util');
  34. var _propsUtil = require('../_util/props-util');
  35. var _BaseMixin = require('../_util/BaseMixin');
  36. var _BaseMixin2 = _interopRequireDefault(_BaseMixin);
  37. var _configConsumerProps = require('../config-provider/configConsumerProps');
  38. var _interface = require('./interface');
  39. var _pagination = require('../pagination');
  40. var _pagination2 = _interopRequireDefault(_pagination);
  41. var _icon = require('../icon');
  42. var _icon2 = _interopRequireDefault(_icon);
  43. var _spin = require('../spin');
  44. var _spin2 = _interopRequireDefault(_spin);
  45. var _LocaleReceiver = require('../locale-provider/LocaleReceiver');
  46. var _LocaleReceiver2 = _interopRequireDefault(_LocaleReceiver);
  47. var _default2 = require('../locale-provider/default');
  48. var _default3 = _interopRequireDefault(_default2);
  49. var _warning = require('../_util/warning');
  50. var _warning2 = _interopRequireDefault(_warning);
  51. var _scrollTo = require('../_util/scrollTo');
  52. var _scrollTo2 = _interopRequireDefault(_scrollTo);
  53. var _transButton = require('../_util/transButton');
  54. var _transButton2 = _interopRequireDefault(_transButton);
  55. var _vue = require('vue');
  56. var _vue2 = _interopRequireDefault(_vue);
  57. function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
  58. function noop() {}
  59. function stopPropagation(e) {
  60. e.stopPropagation();
  61. }
  62. function getRowSelection(props) {
  63. return props.rowSelection || {};
  64. }
  65. function getColumnKey(column, index) {
  66. return column.key || column.dataIndex || index;
  67. }
  68. function isSameColumn(a, b) {
  69. if (a && b && a.key && a.key === b.key) {
  70. return true;
  71. }
  72. return a === b || (0, _shallowequal2['default'])(a, b, function (value, other) {
  73. // https://github.com/ant-design/ant-design/issues/12737
  74. if (typeof value === 'function' && typeof other === 'function') {
  75. return value === other || value.toString() === other.toString();
  76. }
  77. // https://github.com/ant-design/ant-design/issues/19398
  78. if (Array.isArray(value) && Array.isArray(other)) {
  79. return value === other || (0, _shallowequal2['default'])(value, other);
  80. }
  81. });
  82. }
  83. var defaultPagination = {
  84. onChange: noop,
  85. onShowSizeChange: noop
  86. };
  87. /**
  88. * Avoid creating new object, so that parent component's shouldComponentUpdate
  89. * can works appropriately。
  90. */
  91. var emptyObject = {};
  92. var createComponents = function createComponents() {
  93. var components = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  94. var bodyRow = components && components.body && components.body.row;
  95. return (0, _extends5['default'])({}, components, {
  96. body: (0, _extends5['default'])({}, components.body, {
  97. row: (0, _createBodyRow2['default'])(bodyRow)
  98. })
  99. });
  100. };
  101. function isTheSameComponents() {
  102. var components1 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
  103. var components2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
  104. return components1 === components2 || ['table', 'header', 'body'].every(function (key) {
  105. return (0, _shallowequal2['default'])(components1[key], components2[key]);
  106. });
  107. }
  108. function getFilteredValueColumns(state, columns) {
  109. return (0, _util.flatFilter)(columns || (state || {}).columns || [], function (column) {
  110. return typeof column.filteredValue !== 'undefined';
  111. });
  112. }
  113. function getFiltersFromColumns(state, columns) {
  114. var filters = {};
  115. getFilteredValueColumns(state, columns).forEach(function (col) {
  116. var colKey = getColumnKey(col);
  117. filters[colKey] = col.filteredValue;
  118. });
  119. return filters;
  120. }
  121. function isFiltersChanged(state, filters) {
  122. if (Object.keys(filters).length !== Object.keys(state.filters).length) {
  123. return true;
  124. }
  125. return Object.keys(filters).some(function (columnKey) {
  126. return filters[columnKey] !== state.filters[columnKey];
  127. });
  128. }
  129. exports['default'] = {
  130. name: 'Table',
  131. Column: _Column2['default'],
  132. ColumnGroup: _ColumnGroup2['default'],
  133. mixins: [_BaseMixin2['default']],
  134. inject: {
  135. configProvider: { 'default': function _default() {
  136. return _configConsumerProps.ConfigConsumerProps;
  137. } }
  138. },
  139. provide: function provide() {
  140. return {
  141. store: this.store
  142. };
  143. },
  144. props: (0, _propsUtil.initDefaultProps)(_interface.TableProps, {
  145. dataSource: [],
  146. useFixedHeader: false,
  147. // rowSelection: null,
  148. size: 'default',
  149. loading: false,
  150. bordered: false,
  151. indentSize: 20,
  152. locale: {},
  153. rowKey: 'key',
  154. showHeader: true,
  155. sortDirections: ['ascend', 'descend'],
  156. childrenColumnName: 'children'
  157. }),
  158. data: function data() {
  159. var props = (0, _propsUtil.getOptionProps)(this);
  160. (0, _warning2['default'])(!props.expandedRowRender || !('scroll' in props) || !props.scroll.x, '`expandedRowRender` and `scroll` are not compatible. Please use one of them at one time.');
  161. this.CheckboxPropsCache = {};
  162. this.store = (this.$root.constructor.observable || _vue2['default'].observable)({
  163. selectedRowKeys: getRowSelection(this.$props).selectedRowKeys || [],
  164. selectionDirty: false
  165. });
  166. return (0, _extends5['default'])({}, this.getDefaultSortOrder(props.columns || []), {
  167. // 减少状态
  168. sFilters: this.getDefaultFilters(props.columns),
  169. sPagination: this.getDefaultPagination(this.$props),
  170. pivot: undefined,
  171. sComponents: createComponents(this.components),
  172. filterDataCnt: 0
  173. });
  174. },
  175. watch: {
  176. pagination: {
  177. handler: function handler(val) {
  178. this.setState(function (previousState) {
  179. var newPagination = (0, _extends5['default'])({}, defaultPagination, previousState.sPagination, val);
  180. newPagination.current = newPagination.current || 1;
  181. newPagination.pageSize = newPagination.pageSize || 10;
  182. return { sPagination: val !== false ? newPagination : emptyObject };
  183. });
  184. },
  185. deep: true
  186. },
  187. rowSelection: {
  188. handler: function handler(val, oldVal) {
  189. if (val && 'selectedRowKeys' in val) {
  190. this.store.selectedRowKeys = val.selectedRowKeys || [];
  191. var rowSelection = this.rowSelection;
  192. if (rowSelection && val.getCheckboxProps !== rowSelection.getCheckboxProps) {
  193. this.CheckboxPropsCache = {};
  194. }
  195. } else if (oldVal && !val) {
  196. this.store.selectedRowKeys = [];
  197. }
  198. },
  199. deep: true
  200. },
  201. dataSource: function dataSource() {
  202. this.store.selectionDirty = false;
  203. this.CheckboxPropsCache = {};
  204. },
  205. columns: function columns(val) {
  206. var filteredValueColumns = getFilteredValueColumns({ columns: val }, val);
  207. if (filteredValueColumns.length > 0) {
  208. var filtersFromColumns = getFiltersFromColumns({ columns: val }, val);
  209. var newFilters = (0, _extends5['default'])({}, this.sFilters);
  210. Object.keys(filtersFromColumns).forEach(function (key) {
  211. newFilters[key] = filtersFromColumns[key];
  212. });
  213. if (isFiltersChanged({ filters: this.sFilters }, newFilters)) {
  214. this.setState({ sFilters: newFilters });
  215. }
  216. }
  217. this.$forceUpdate();
  218. },
  219. components: {
  220. handler: function handler(val, oldVal) {
  221. if (!isTheSameComponents(val, oldVal)) {
  222. var components = createComponents(val);
  223. this.setState({ sComponents: components });
  224. }
  225. },
  226. deep: true
  227. }
  228. },
  229. updated: function updated() {
  230. var columns = this.columns,
  231. sortColumn = this.sSortColumn,
  232. sortOrder = this.sSortOrder;
  233. if (this.getSortOrderColumns(columns).length > 0) {
  234. var sortState = this.getSortStateFromColumns(columns);
  235. if (!isSameColumn(sortState.sSortColumn, sortColumn) || sortState.sSortOrder !== sortOrder) {
  236. this.setState(sortState);
  237. }
  238. }
  239. },
  240. methods: {
  241. getCheckboxPropsByItem: function getCheckboxPropsByItem(item, index) {
  242. var rowSelection = getRowSelection(this.$props);
  243. if (!rowSelection.getCheckboxProps) {
  244. return { props: {} };
  245. }
  246. var key = this.getRecordKey(item, index);
  247. // Cache checkboxProps
  248. if (!this.CheckboxPropsCache[key]) {
  249. this.CheckboxPropsCache[key] = rowSelection.getCheckboxProps(item);
  250. }
  251. this.CheckboxPropsCache[key].props = this.CheckboxPropsCache[key].props || {};
  252. return this.CheckboxPropsCache[key];
  253. },
  254. getDefaultSelection: function getDefaultSelection() {
  255. var _this = this;
  256. var rowSelection = getRowSelection(this.$props);
  257. if (!rowSelection.getCheckboxProps) {
  258. return [];
  259. }
  260. return this.getFlatData().filter(function (item, rowIndex) {
  261. return _this.getCheckboxPropsByItem(item, rowIndex).props.defaultChecked;
  262. }).map(function (record, rowIndex) {
  263. return _this.getRecordKey(record, rowIndex);
  264. });
  265. },
  266. getDefaultPagination: function getDefaultPagination(props) {
  267. var pagination = (0, _typeof3['default'])(props.pagination) === 'object' ? props.pagination : {};
  268. var current = void 0;
  269. if ('current' in pagination) {
  270. current = pagination.current;
  271. } else if ('defaultCurrent' in pagination) {
  272. current = pagination.defaultCurrent;
  273. }
  274. var pageSize = void 0;
  275. if ('pageSize' in pagination) {
  276. pageSize = pagination.pageSize;
  277. } else if ('defaultPageSize' in pagination) {
  278. pageSize = pagination.defaultPageSize;
  279. }
  280. return this.hasPagination(props) ? (0, _extends5['default'])({}, defaultPagination, pagination, {
  281. current: current || 1,
  282. pageSize: pageSize || 10
  283. }) : {};
  284. },
  285. getSortOrderColumns: function getSortOrderColumns(columns) {
  286. return (0, _util.flatFilter)(columns || this.columns || [], function (column) {
  287. return 'sortOrder' in column;
  288. });
  289. },
  290. getDefaultFilters: function getDefaultFilters(columns) {
  291. var definedFilters = getFiltersFromColumns({ columns: this.columns }, columns);
  292. var defaultFilteredValueColumns = (0, _util.flatFilter)(columns || [], function (column) {
  293. return typeof column.defaultFilteredValue !== 'undefined';
  294. });
  295. var defaultFilters = defaultFilteredValueColumns.reduce(function (soFar, col) {
  296. var colKey = getColumnKey(col);
  297. soFar[colKey] = col.defaultFilteredValue;
  298. return soFar;
  299. }, {});
  300. return (0, _extends5['default'])({}, defaultFilters, definedFilters);
  301. },
  302. getDefaultSortOrder: function getDefaultSortOrder(columns) {
  303. var definedSortState = this.getSortStateFromColumns(columns);
  304. var defaultSortedColumn = (0, _util.flatFilter)(columns || [], function (column) {
  305. return column.defaultSortOrder != null;
  306. })[0];
  307. if (defaultSortedColumn && !definedSortState.sortColumn) {
  308. return {
  309. sSortColumn: defaultSortedColumn,
  310. sSortOrder: defaultSortedColumn.defaultSortOrder
  311. };
  312. }
  313. return definedSortState;
  314. },
  315. getSortStateFromColumns: function getSortStateFromColumns(columns) {
  316. // return first column which sortOrder is not falsy
  317. var sortedColumn = this.getSortOrderColumns(columns).filter(function (col) {
  318. return col.sortOrder;
  319. })[0];
  320. if (sortedColumn) {
  321. return {
  322. sSortColumn: sortedColumn,
  323. sSortOrder: sortedColumn.sortOrder
  324. };
  325. }
  326. return {
  327. sSortColumn: null,
  328. sSortOrder: null
  329. };
  330. },
  331. getMaxCurrent: function getMaxCurrent(total) {
  332. var _sPagination = this.sPagination,
  333. current = _sPagination.current,
  334. pageSize = _sPagination.pageSize;
  335. if ((current - 1) * pageSize >= total) {
  336. return Math.floor((total - 1) / pageSize) + 1;
  337. }
  338. return current;
  339. },
  340. getRecordKey: function getRecordKey(record, index) {
  341. var rowKey = this.rowKey;
  342. var recordKey = typeof rowKey === 'function' ? rowKey(record, index) : record[rowKey];
  343. (0, _warning2['default'])(recordKey !== undefined, 'Table', 'Each record in dataSource of table should have a unique `key` prop, ' + 'or set `rowKey` of Table to an unique primary key, ');
  344. return recordKey === undefined ? index : recordKey;
  345. },
  346. getSorterFn: function getSorterFn(state) {
  347. var _ref = state || this.$data,
  348. sortOrder = _ref.sSortOrder,
  349. sortColumn = _ref.sSortColumn;
  350. if (!sortOrder || !sortColumn || typeof sortColumn.sorter !== 'function') {
  351. return;
  352. }
  353. return function (a, b) {
  354. var result = sortColumn.sorter(a, b, sortOrder);
  355. if (result !== 0) {
  356. return sortOrder === 'descend' ? -result : result;
  357. }
  358. return 0;
  359. };
  360. },
  361. getCurrentPageData: function getCurrentPageData() {
  362. var data = this.getLocalData();
  363. this.filterDataCnt = data.length;
  364. var current = void 0;
  365. var pageSize = void 0;
  366. var sPagination = this.sPagination;
  367. // 如果没有分页的话,默认全部展示
  368. if (!this.hasPagination()) {
  369. pageSize = Number.MAX_VALUE;
  370. current = 1;
  371. } else {
  372. pageSize = sPagination.pageSize;
  373. current = this.getMaxCurrent(sPagination.total || data.length);
  374. }
  375. // 分页
  376. // ---
  377. // 当数据量少于等于每页数量时,直接设置数据
  378. // 否则进行读取分页数据
  379. if (data.length > pageSize || pageSize === Number.MAX_VALUE) {
  380. data = data.slice((current - 1) * pageSize, current * pageSize);
  381. }
  382. return data;
  383. },
  384. getFlatData: function getFlatData() {
  385. var childrenColumnName = this.$props.childrenColumnName;
  386. return (0, _util.flatArray)(this.getLocalData(null, false), childrenColumnName);
  387. },
  388. getFlatCurrentPageData: function getFlatCurrentPageData() {
  389. var childrenColumnName = this.$props.childrenColumnName;
  390. return (0, _util.flatArray)(this.getCurrentPageData(), childrenColumnName);
  391. },
  392. getLocalData: function getLocalData(state) {
  393. var _this2 = this;
  394. var filter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
  395. var currentState = state || this.$data;
  396. var filters = currentState.sFilters;
  397. var dataSource = this.$props.dataSource;
  398. var data = dataSource || [];
  399. // 优化本地排序
  400. data = data.slice(0);
  401. var sorterFn = this.getSorterFn(currentState);
  402. if (sorterFn) {
  403. // 使用新数组,避免改变原数组导致无限循环更新
  404. // https://github.com/vueComponent/ant-design-vue/issues/2270
  405. data = this.recursiveSort([].concat((0, _toConsumableArray3['default'])(data)), sorterFn);
  406. }
  407. // 筛选
  408. if (filter && filters) {
  409. Object.keys(filters).forEach(function (columnKey) {
  410. var col = _this2.findColumn(columnKey);
  411. if (!col) {
  412. return;
  413. }
  414. var values = filters[columnKey] || [];
  415. if (values.length === 0) {
  416. return;
  417. }
  418. var onFilter = col.onFilter;
  419. data = onFilter ? data.filter(function (record) {
  420. return values.some(function (v) {
  421. return onFilter(v, record);
  422. });
  423. }) : data;
  424. });
  425. }
  426. return data;
  427. },
  428. onRow: function onRow(prefixCls, record, index) {
  429. var customRow = this.customRow;
  430. var custom = customRow ? customRow(record, index) : {};
  431. return (0, _propsUtil.mergeProps)(custom, {
  432. props: {
  433. prefixCls: prefixCls,
  434. store: this.store,
  435. rowKey: this.getRecordKey(record, index)
  436. }
  437. });
  438. },
  439. setSelectedRowKeys: function setSelectedRowKeys(selectedRowKeys, selectionInfo) {
  440. var _this3 = this;
  441. var selectWay = selectionInfo.selectWay,
  442. record = selectionInfo.record,
  443. checked = selectionInfo.checked,
  444. changeRowKeys = selectionInfo.changeRowKeys,
  445. nativeEvent = selectionInfo.nativeEvent;
  446. var rowSelection = getRowSelection(this.$props);
  447. if (rowSelection && !('selectedRowKeys' in rowSelection)) {
  448. this.store.selectedRowKeys = selectedRowKeys;
  449. }
  450. var data = this.getFlatData();
  451. if (!rowSelection.onChange && !rowSelection[selectWay]) {
  452. return;
  453. }
  454. var selectedRows = data.filter(function (row, i) {
  455. return selectedRowKeys.indexOf(_this3.getRecordKey(row, i)) >= 0;
  456. });
  457. if (rowSelection.onChange) {
  458. rowSelection.onChange(selectedRowKeys, selectedRows);
  459. }
  460. if (selectWay === 'onSelect' && rowSelection.onSelect) {
  461. rowSelection.onSelect(record, checked, selectedRows, nativeEvent);
  462. } else if (selectWay === 'onSelectMultiple' && rowSelection.onSelectMultiple) {
  463. var changeRows = data.filter(function (row, i) {
  464. return changeRowKeys.indexOf(_this3.getRecordKey(row, i)) >= 0;
  465. });
  466. rowSelection.onSelectMultiple(checked, selectedRows, changeRows);
  467. } else if (selectWay === 'onSelectAll' && rowSelection.onSelectAll) {
  468. var _changeRows = data.filter(function (row, i) {
  469. return changeRowKeys.indexOf(_this3.getRecordKey(row, i)) >= 0;
  470. });
  471. rowSelection.onSelectAll(checked, selectedRows, _changeRows);
  472. } else if (selectWay === 'onSelectInvert' && rowSelection.onSelectInvert) {
  473. rowSelection.onSelectInvert(selectedRowKeys);
  474. }
  475. },
  476. generatePopupContainerFunc: function generatePopupContainerFunc(getPopupContainer) {
  477. var scroll = this.$props.scroll;
  478. var table = this.$refs.vcTable;
  479. if (getPopupContainer) {
  480. return getPopupContainer;
  481. }
  482. // Use undefined to let rc component use default logic.
  483. return scroll && table ? function () {
  484. return table.getTableNode();
  485. } : undefined;
  486. },
  487. scrollToFirstRow: function scrollToFirstRow() {
  488. var _this4 = this;
  489. var scroll = this.$props.scroll;
  490. if (scroll && scroll.scrollToFirstRowOnChange !== false) {
  491. (0, _scrollTo2['default'])(0, {
  492. getContainer: function getContainer() {
  493. return _this4.$refs.vcTable.getBodyTable();
  494. }
  495. });
  496. }
  497. },
  498. isSameColumn: function isSameColumn(a, b) {
  499. if (a && b && a.key && a.key === b.key) {
  500. return true;
  501. }
  502. return a === b || (0, _shallowequal2['default'])(a, b, function (value, other) {
  503. if (typeof value === 'function' && typeof other === 'function') {
  504. return value === other || value.toString() === other.toString();
  505. }
  506. });
  507. },
  508. handleFilter: function handleFilter(column, nextFilters) {
  509. var _this5 = this;
  510. var props = this.$props;
  511. var pagination = (0, _extends5['default'])({}, this.sPagination);
  512. var filters = (0, _extends5['default'])({}, this.sFilters, (0, _defineProperty3['default'])({}, getColumnKey(column), nextFilters));
  513. // Remove filters not in current columns
  514. var currentColumnKeys = [];
  515. (0, _util.treeMap)(this.columns, function (c) {
  516. if (!c.children) {
  517. currentColumnKeys.push(getColumnKey(c));
  518. }
  519. });
  520. Object.keys(filters).forEach(function (columnKey) {
  521. if (currentColumnKeys.indexOf(columnKey) < 0) {
  522. delete filters[columnKey];
  523. }
  524. });
  525. if (props.pagination) {
  526. // Reset current prop
  527. pagination.current = 1;
  528. pagination.onChange(pagination.current);
  529. }
  530. var newState = {
  531. sPagination: pagination,
  532. sFilters: {}
  533. };
  534. var filtersToSetState = (0, _extends5['default'])({}, filters);
  535. // Remove filters which is controlled
  536. getFilteredValueColumns({ columns: props.columns }).forEach(function (col) {
  537. var columnKey = getColumnKey(col);
  538. if (columnKey) {
  539. delete filtersToSetState[columnKey];
  540. }
  541. });
  542. if (Object.keys(filtersToSetState).length > 0) {
  543. newState.sFilters = filtersToSetState;
  544. }
  545. // Controlled current prop will not respond user interaction
  546. if ((0, _typeof3['default'])(props.pagination) === 'object' && 'current' in props.pagination) {
  547. newState.sPagination = (0, _extends5['default'])({}, pagination, {
  548. current: this.sPagination.current
  549. });
  550. }
  551. this.setState(newState, function () {
  552. _this5.scrollToFirstRow();
  553. _this5.store.selectionDirty = false;
  554. _this5.$emit.apply(_this5, ['change'].concat((0, _toConsumableArray3['default'])(_this5.prepareParamsArguments((0, _extends5['default'])({}, _this5.$data, {
  555. sSelectionDirty: false,
  556. sFilters: filters,
  557. sPagination: pagination
  558. })))));
  559. });
  560. },
  561. handleSelect: function handleSelect(record, rowIndex, e) {
  562. var _this6 = this;
  563. var checked = e.target.checked;
  564. var nativeEvent = e.nativeEvent;
  565. var defaultSelection = this.store.selectionDirty ? [] : this.getDefaultSelection();
  566. var selectedRowKeys = this.store.selectedRowKeys.concat(defaultSelection);
  567. var key = this.getRecordKey(record, rowIndex);
  568. var pivot = this.$data.pivot;
  569. var rows = this.getFlatCurrentPageData();
  570. var realIndex = rowIndex;
  571. if (this.$props.expandedRowRender) {
  572. realIndex = rows.findIndex(function (row) {
  573. return _this6.getRecordKey(row, rowIndex) === key;
  574. });
  575. }
  576. if (nativeEvent.shiftKey && pivot !== undefined && realIndex !== pivot) {
  577. var changeRowKeys = [];
  578. var direction = Math.sign(pivot - realIndex);
  579. var dist = Math.abs(pivot - realIndex);
  580. var step = 0;
  581. var _loop = function _loop() {
  582. var i = realIndex + step * direction;
  583. step += 1;
  584. var row = rows[i];
  585. var rowKey = _this6.getRecordKey(row, i);
  586. var checkboxProps = _this6.getCheckboxPropsByItem(row, i);
  587. if (!checkboxProps.disabled) {
  588. if (selectedRowKeys.includes(rowKey)) {
  589. if (!checked) {
  590. selectedRowKeys = selectedRowKeys.filter(function (j) {
  591. return rowKey !== j;
  592. });
  593. changeRowKeys.push(rowKey);
  594. }
  595. } else if (checked) {
  596. selectedRowKeys.push(rowKey);
  597. changeRowKeys.push(rowKey);
  598. }
  599. }
  600. };
  601. while (step <= dist) {
  602. _loop();
  603. }
  604. this.setState({ pivot: realIndex });
  605. this.store.selectionDirty = true;
  606. this.setSelectedRowKeys(selectedRowKeys, {
  607. selectWay: 'onSelectMultiple',
  608. record: record,
  609. checked: checked,
  610. changeRowKeys: changeRowKeys,
  611. nativeEvent: nativeEvent
  612. });
  613. } else {
  614. if (checked) {
  615. selectedRowKeys.push(this.getRecordKey(record, realIndex));
  616. } else {
  617. selectedRowKeys = selectedRowKeys.filter(function (i) {
  618. return key !== i;
  619. });
  620. }
  621. this.setState({ pivot: realIndex });
  622. this.store.selectionDirty = true;
  623. this.setSelectedRowKeys(selectedRowKeys, {
  624. selectWay: 'onSelect',
  625. record: record,
  626. checked: checked,
  627. changeRowKeys: undefined,
  628. nativeEvent: nativeEvent
  629. });
  630. }
  631. },
  632. handleRadioSelect: function handleRadioSelect(record, rowIndex, e) {
  633. var checked = e.target.checked;
  634. var nativeEvent = e.nativeEvent;
  635. var key = this.getRecordKey(record, rowIndex);
  636. var selectedRowKeys = [key];
  637. this.store.selectionDirty = true;
  638. this.setSelectedRowKeys(selectedRowKeys, {
  639. selectWay: 'onSelect',
  640. record: record,
  641. checked: checked,
  642. changeRowKeys: undefined,
  643. nativeEvent: nativeEvent
  644. });
  645. },
  646. handleSelectRow: function handleSelectRow(selectionKey, index, onSelectFunc) {
  647. var _this7 = this;
  648. var data = this.getFlatCurrentPageData();
  649. var defaultSelection = this.store.selectionDirty ? [] : this.getDefaultSelection();
  650. var selectedRowKeys = this.store.selectedRowKeys.concat(defaultSelection);
  651. var changeableRowKeys = data.filter(function (item, i) {
  652. return !_this7.getCheckboxPropsByItem(item, i).props.disabled;
  653. }).map(function (item, i) {
  654. return _this7.getRecordKey(item, i);
  655. });
  656. var changeRowKeys = [];
  657. var selectWay = 'onSelectAll';
  658. var checked = void 0;
  659. // handle default selection
  660. switch (selectionKey) {
  661. case 'all':
  662. changeableRowKeys.forEach(function (key) {
  663. if (selectedRowKeys.indexOf(key) < 0) {
  664. selectedRowKeys.push(key);
  665. changeRowKeys.push(key);
  666. }
  667. });
  668. selectWay = 'onSelectAll';
  669. checked = true;
  670. break;
  671. case 'removeAll':
  672. changeableRowKeys.forEach(function (key) {
  673. if (selectedRowKeys.indexOf(key) >= 0) {
  674. selectedRowKeys.splice(selectedRowKeys.indexOf(key), 1);
  675. changeRowKeys.push(key);
  676. }
  677. });
  678. selectWay = 'onSelectAll';
  679. checked = false;
  680. break;
  681. case 'invert':
  682. changeableRowKeys.forEach(function (key) {
  683. if (selectedRowKeys.indexOf(key) < 0) {
  684. selectedRowKeys.push(key);
  685. } else {
  686. selectedRowKeys.splice(selectedRowKeys.indexOf(key), 1);
  687. }
  688. changeRowKeys.push(key);
  689. selectWay = 'onSelectInvert';
  690. });
  691. break;
  692. default:
  693. break;
  694. }
  695. this.store.selectionDirty = true;
  696. // when select custom selection, callback selections[n].onSelect
  697. var rowSelection = this.rowSelection;
  698. var customSelectionStartIndex = 2;
  699. if (rowSelection && rowSelection.hideDefaultSelections) {
  700. customSelectionStartIndex = 0;
  701. }
  702. if (index >= customSelectionStartIndex && typeof onSelectFunc === 'function') {
  703. return onSelectFunc(changeableRowKeys);
  704. }
  705. this.setSelectedRowKeys(selectedRowKeys, {
  706. selectWay: selectWay,
  707. checked: checked,
  708. changeRowKeys: changeRowKeys
  709. });
  710. },
  711. handlePageChange: function handlePageChange(current) {
  712. var props = this.$props;
  713. var pagination = (0, _extends5['default'])({}, this.sPagination);
  714. if (current) {
  715. pagination.current = current;
  716. } else {
  717. pagination.current = pagination.current || 1;
  718. }
  719. for (var _len = arguments.length, otherArguments = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {
  720. otherArguments[_key - 1] = arguments[_key];
  721. }
  722. pagination.onChange.apply(pagination, [pagination.current].concat((0, _toConsumableArray3['default'])(otherArguments)));
  723. var newState = {
  724. sPagination: pagination
  725. };
  726. // Controlled current prop will not respond user interaction
  727. if (props.pagination && (0, _typeof3['default'])(props.pagination) === 'object' && 'current' in props.pagination) {
  728. newState.sPagination = (0, _extends5['default'])({}, pagination, {
  729. current: this.sPagination.current
  730. });
  731. }
  732. this.setState(newState, this.scrollToFirstRow);
  733. this.store.selectionDirty = false;
  734. this.$emit.apply(this, ['change'].concat((0, _toConsumableArray3['default'])(this.prepareParamsArguments((0, _extends5['default'])({}, this.$data, {
  735. sSelectionDirty: false,
  736. sPagination: pagination
  737. })))));
  738. },
  739. handleShowSizeChange: function handleShowSizeChange(current, pageSize) {
  740. var pagination = this.sPagination;
  741. pagination.onShowSizeChange(current, pageSize);
  742. var nextPagination = (0, _extends5['default'])({}, pagination, {
  743. pageSize: pageSize,
  744. current: current
  745. });
  746. this.setState({ sPagination: nextPagination }, this.scrollToFirstRow);
  747. this.$emit.apply(this, ['change'].concat((0, _toConsumableArray3['default'])(this.prepareParamsArguments((0, _extends5['default'])({}, this.$data, {
  748. sPagination: nextPagination
  749. })))));
  750. },
  751. toggleSortOrder: function toggleSortOrder(column) {
  752. var sortDirections = column.sortDirections || this.sortDirections;
  753. var sortOrder = this.sSortOrder,
  754. sortColumn = this.sSortColumn;
  755. // 只同时允许一列进行排序,否则会导致排序顺序的逻辑问题
  756. var newSortOrder = void 0;
  757. // 切换另一列时,丢弃 sortOrder 的状态
  758. if (isSameColumn(sortColumn, column) && sortOrder !== undefined) {
  759. // 按照sortDirections的内容依次切换排序状态
  760. var methodIndex = sortDirections.indexOf(sortOrder) + 1;
  761. newSortOrder = methodIndex === sortDirections.length ? undefined : sortDirections[methodIndex];
  762. } else {
  763. newSortOrder = sortDirections[0];
  764. }
  765. var newState = {
  766. sSortOrder: newSortOrder,
  767. sSortColumn: newSortOrder ? column : null
  768. };
  769. // Controlled
  770. if (this.getSortOrderColumns().length === 0) {
  771. this.setState(newState, this.scrollToFirstRow);
  772. }
  773. this.$emit.apply(this, ['change'].concat((0, _toConsumableArray3['default'])(this.prepareParamsArguments((0, _extends5['default'])({}, this.$data, newState), column))));
  774. },
  775. hasPagination: function hasPagination(props) {
  776. return (props || this.$props).pagination !== false;
  777. },
  778. isSortColumn: function isSortColumn(column) {
  779. var sortColumn = this.sSortColumn;
  780. if (!column || !sortColumn) {
  781. return false;
  782. }
  783. return getColumnKey(sortColumn) === getColumnKey(column);
  784. },
  785. // Get pagination, filters, sorter
  786. prepareParamsArguments: function prepareParamsArguments(state, column) {
  787. var pagination = (0, _extends5['default'])({}, state.sPagination);
  788. // remove useless handle function in Table.onChange
  789. delete pagination.onChange;
  790. delete pagination.onShowSizeChange;
  791. var filters = state.sFilters;
  792. var sorter = {};
  793. var currentColumn = column;
  794. if (state.sSortColumn && state.sSortOrder) {
  795. currentColumn = state.sSortColumn;
  796. sorter.column = state.sSortColumn;
  797. sorter.order = state.sSortOrder;
  798. }
  799. if (currentColumn) {
  800. sorter.field = currentColumn.dataIndex;
  801. sorter.columnKey = getColumnKey(currentColumn);
  802. }
  803. var extra = {
  804. currentDataSource: this.getLocalData(state)
  805. };
  806. return [pagination, filters, sorter, extra];
  807. },
  808. findColumn: function findColumn(myKey) {
  809. var column = void 0;
  810. (0, _util.treeMap)(this.columns, function (c) {
  811. if (getColumnKey(c) === myKey) {
  812. column = c;
  813. }
  814. });
  815. return column;
  816. },
  817. recursiveSort: function recursiveSort(data, sorterFn) {
  818. var _this8 = this;
  819. var _childrenColumnName = this.childrenColumnName,
  820. childrenColumnName = _childrenColumnName === undefined ? 'children' : _childrenColumnName;
  821. return data.sort(sorterFn).map(function (item) {
  822. return item[childrenColumnName] ? (0, _extends5['default'])({}, item, (0, _defineProperty3['default'])({}, childrenColumnName, _this8.recursiveSort([].concat((0, _toConsumableArray3['default'])(item[childrenColumnName])), sorterFn))) : item;
  823. });
  824. },
  825. renderExpandIcon: function renderExpandIcon(prefixCls) {
  826. var h = this.$createElement;
  827. return function (_ref2) {
  828. var expandable = _ref2.expandable,
  829. expanded = _ref2.expanded,
  830. needIndentSpaced = _ref2.needIndentSpaced,
  831. record = _ref2.record,
  832. onExpand = _ref2.onExpand;
  833. if (expandable) {
  834. return h(
  835. _LocaleReceiver2['default'],
  836. {
  837. attrs: { componentName: 'Table', defaultLocale: _default3['default'].Table }
  838. },
  839. [function (locale) {
  840. var _classNames;
  841. return h(_transButton2['default'], {
  842. 'class': (0, _classnames2['default'])(prefixCls + '-row-expand-icon', (_classNames = {}, (0, _defineProperty3['default'])(_classNames, prefixCls + '-row-collapsed', !expanded), (0, _defineProperty3['default'])(_classNames, prefixCls + '-row-expanded', expanded), _classNames)),
  843. on: {
  844. 'click': function click(event) {
  845. onExpand(record, event);
  846. }
  847. },
  848. attrs: {
  849. 'aria-label': expanded ? locale.collapse : locale.expand,
  850. noStyle: true
  851. }
  852. });
  853. }]
  854. );
  855. }
  856. if (needIndentSpaced) {
  857. return h('span', { 'class': prefixCls + '-row-expand-icon ' + prefixCls + '-row-spaced' });
  858. }
  859. return null;
  860. };
  861. },
  862. renderPagination: function renderPagination(prefixCls, paginationPosition) {
  863. var h = this.$createElement;
  864. // 强制不需要分页
  865. if (!this.hasPagination()) {
  866. return null;
  867. }
  868. var size = 'default';
  869. var pagination = this.sPagination;
  870. if (pagination.size) {
  871. size = pagination.size;
  872. } else if (this.size === 'middle' || this.size === 'small') {
  873. size = 'small';
  874. }
  875. var position = pagination.position || 'bottom';
  876. var total = pagination.total || this.filterDataCnt;
  877. var cls = pagination['class'],
  878. style = pagination.style,
  879. onChange = pagination.onChange,
  880. onShowSizeChange = pagination.onShowSizeChange,
  881. restProps = (0, _objectWithoutProperties3['default'])(pagination, ['class', 'style', 'onChange', 'onShowSizeChange']); // eslint-disable-line
  882. var paginationProps = (0, _propsUtil.mergeProps)({
  883. key: 'pagination-' + paginationPosition,
  884. 'class': (0, _classnames2['default'])(cls, prefixCls + '-pagination'),
  885. props: (0, _extends5['default'])({}, restProps, {
  886. total: total,
  887. size: size,
  888. current: this.getMaxCurrent(total)
  889. }),
  890. style: style,
  891. on: {
  892. change: this.handlePageChange,
  893. showSizeChange: this.handleShowSizeChange
  894. }
  895. });
  896. return total > 0 && (position === paginationPosition || position === 'both') ? h(_pagination2['default'], paginationProps) : null;
  897. },
  898. renderSelectionBox: function renderSelectionBox(type) {
  899. var _this9 = this;
  900. var h = this.$createElement;
  901. return function (_, record, index) {
  902. var rowKey = _this9.getRecordKey(record, index); // 从 1 开始
  903. var props = _this9.getCheckboxPropsByItem(record, index);
  904. var handleChange = function handleChange(e) {
  905. type === 'radio' ? _this9.handleRadioSelect(record, index, e) : _this9.handleSelect(record, index, e);
  906. };
  907. var selectionBoxProps = (0, _propsUtil.mergeProps)({
  908. props: {
  909. type: type,
  910. store: _this9.store,
  911. rowIndex: rowKey,
  912. defaultSelection: _this9.getDefaultSelection()
  913. },
  914. on: {
  915. change: handleChange
  916. }
  917. }, props);
  918. return h(
  919. 'span',
  920. {
  921. on: {
  922. 'click': stopPropagation
  923. }
  924. },
  925. [h(_SelectionBox2['default'], selectionBoxProps)]
  926. );
  927. };
  928. },
  929. renderRowSelection: function renderRowSelection(_ref3) {
  930. var _this10 = this;
  931. var prefixCls = _ref3.prefixCls,
  932. locale = _ref3.locale,
  933. getPopupContainer = _ref3.getPopupContainer;
  934. var h = this.$createElement;
  935. var rowSelection = this.rowSelection;
  936. var columns = this.columns.concat();
  937. if (rowSelection) {
  938. var data = this.getFlatCurrentPageData().filter(function (item, index) {
  939. if (rowSelection.getCheckboxProps) {
  940. return !_this10.getCheckboxPropsByItem(item, index).props.disabled;
  941. }
  942. return true;
  943. });
  944. var selectionColumnClass = (0, _classnames2['default'])(prefixCls + '-selection-column', (0, _defineProperty3['default'])({}, prefixCls + '-selection-column-custom', rowSelection.selections));
  945. var selectionColumn = (0, _defineProperty3['default'])({
  946. key: 'selection-column',
  947. customRender: this.renderSelectionBox(rowSelection.type),
  948. className: selectionColumnClass,
  949. fixed: rowSelection.fixed,
  950. width: rowSelection.columnWidth,
  951. title: rowSelection.columnTitle
  952. }, _vcTable.INTERNAL_COL_DEFINE, {
  953. 'class': prefixCls + '-selection-col'
  954. });
  955. if (rowSelection.type !== 'radio') {
  956. var checkboxAllDisabled = data.every(function (item, index) {
  957. return _this10.getCheckboxPropsByItem(item, index).props.disabled;
  958. });
  959. selectionColumn.title = selectionColumn.title || h(_SelectionCheckboxAll2['default'], {
  960. attrs: {
  961. store: this.store,
  962. locale: locale,
  963. data: data,
  964. getCheckboxPropsByItem: this.getCheckboxPropsByItem,
  965. getRecordKey: this.getRecordKey,
  966. disabled: checkboxAllDisabled,
  967. prefixCls: prefixCls,
  968. selections: rowSelection.selections,
  969. hideDefaultSelections: rowSelection.hideDefaultSelections,
  970. getPopupContainer: this.generatePopupContainerFunc(getPopupContainer)
  971. },
  972. on: {
  973. 'select': this.handleSelectRow
  974. }
  975. });
  976. }
  977. if ('fixed' in rowSelection) {
  978. selectionColumn.fixed = rowSelection.fixed;
  979. } else if (columns.some(function (column) {
  980. return column.fixed === 'left' || column.fixed === true;
  981. })) {
  982. selectionColumn.fixed = 'left';
  983. }
  984. if (columns[0] && columns[0].key === 'selection-column') {
  985. columns[0] = selectionColumn;
  986. } else {
  987. columns.unshift(selectionColumn);
  988. }
  989. }
  990. return columns;
  991. },
  992. renderColumnsDropdown: function renderColumnsDropdown(_ref4) {
  993. var _this11 = this;
  994. var prefixCls = _ref4.prefixCls,
  995. dropdownPrefixCls = _ref4.dropdownPrefixCls,
  996. columns = _ref4.columns,
  997. locale = _ref4.locale,
  998. getPopupContainer = _ref4.getPopupContainer;
  999. var h = this.$createElement;
  1000. var sortOrder = this.sSortOrder,
  1001. filters = this.sFilters;
  1002. return (0, _util.treeMap)(columns, function (column, i) {
  1003. var _classNames3;
  1004. var key = getColumnKey(column, i);
  1005. var filterDropdown = void 0;
  1006. var sortButton = void 0;
  1007. var customHeaderCell = column.customHeaderCell;
  1008. var isSortColumn = _this11.isSortColumn(column);
  1009. if (column.filters && column.filters.length > 0 || column.filterDropdown) {
  1010. var colFilters = key in filters ? filters[key] : [];
  1011. filterDropdown = h(_filterDropdown2['default'], {
  1012. attrs: {
  1013. _propsSymbol: Symbol(),
  1014. locale: locale,
  1015. column: column,
  1016. selectedKeys: colFilters,
  1017. confirmFilter: _this11.handleFilter,
  1018. prefixCls: prefixCls + '-filter',
  1019. dropdownPrefixCls: dropdownPrefixCls || 'ant-dropdown',
  1020. getPopupContainer: _this11.generatePopupContainerFunc(getPopupContainer)
  1021. },
  1022. key: 'filter-dropdown'
  1023. });
  1024. }
  1025. if (column.sorter) {
  1026. var sortDirections = column.sortDirections || _this11.sortDirections;
  1027. var isAscend = isSortColumn && sortOrder === 'ascend';
  1028. var isDescend = isSortColumn && sortOrder === 'descend';
  1029. var ascend = sortDirections.indexOf('ascend') !== -1 && h(_icon2['default'], {
  1030. 'class': prefixCls + '-column-sorter-up ' + (isAscend ? 'on' : 'off'),
  1031. attrs: { type: 'caret-up',
  1032. theme: 'filled'
  1033. },
  1034. key: 'caret-up'
  1035. });
  1036. var descend = sortDirections.indexOf('descend') !== -1 && h(_icon2['default'], {
  1037. 'class': prefixCls + '-column-sorter-down ' + (isDescend ? 'on' : 'off'),
  1038. attrs: { type: 'caret-down',
  1039. theme: 'filled'
  1040. },
  1041. key: 'caret-down'
  1042. });
  1043. sortButton = h(
  1044. 'div',
  1045. {
  1046. attrs: {
  1047. title: locale.sortTitle
  1048. },
  1049. 'class': (0, _classnames2['default'])(prefixCls + '-column-sorter-inner', ascend && descend && prefixCls + '-column-sorter-inner-full'),
  1050. key: 'sorter'
  1051. },
  1052. [ascend, descend]
  1053. );
  1054. customHeaderCell = function customHeaderCell(col) {
  1055. var colProps = {};
  1056. // Get original first
  1057. if (column.customHeaderCell) {
  1058. colProps = (0, _extends5['default'])({}, column.customHeaderCell(col));
  1059. }
  1060. colProps.on = colProps.on || {};
  1061. // Add sorter logic
  1062. var onHeaderCellClick = colProps.on.click;
  1063. colProps.on.click = function () {
  1064. _this11.toggleSortOrder(column);
  1065. if (onHeaderCellClick) {
  1066. onHeaderCellClick.apply(undefined, arguments);
  1067. }
  1068. };
  1069. return colProps;
  1070. };
  1071. }
  1072. return (0, _extends5['default'])({}, column, {
  1073. className: (0, _classnames2['default'])(column.className, (_classNames3 = {}, (0, _defineProperty3['default'])(_classNames3, prefixCls + '-column-has-actions', sortButton || filterDropdown), (0, _defineProperty3['default'])(_classNames3, prefixCls + '-column-has-filters', filterDropdown), (0, _defineProperty3['default'])(_classNames3, prefixCls + '-column-has-sorters', sortButton), (0, _defineProperty3['default'])(_classNames3, prefixCls + '-column-sort', isSortColumn && sortOrder), _classNames3)),
  1074. title: [h(
  1075. 'span',
  1076. { key: 'title', 'class': prefixCls + '-header-column' },
  1077. [h(
  1078. 'div',
  1079. { 'class': sortButton ? prefixCls + '-column-sorters' : undefined },
  1080. [h(
  1081. 'span',
  1082. { 'class': prefixCls + '-column-title' },
  1083. [_this11.renderColumnTitle(column.title)]
  1084. ), h(
  1085. 'span',
  1086. { 'class': prefixCls + '-column-sorter' },
  1087. [sortButton]
  1088. )]
  1089. )]
  1090. ), filterDropdown],
  1091. customHeaderCell: customHeaderCell
  1092. });
  1093. });
  1094. },
  1095. renderColumnTitle: function renderColumnTitle(title) {
  1096. var _$data = this.$data,
  1097. filters = _$data.sFilters,
  1098. sortOrder = _$data.sSortOrder,
  1099. sortColumn = _$data.sSortColumn;
  1100. // https://github.com/ant-design/ant-design/issues/11246#issuecomment-405009167
  1101. if (title instanceof Function) {
  1102. return title({
  1103. filters: filters,
  1104. sortOrder: sortOrder,
  1105. sortColumn: sortColumn
  1106. });
  1107. }
  1108. return title;
  1109. },
  1110. renderTable: function renderTable(_ref5) {
  1111. var _classNames4,
  1112. _this12 = this;
  1113. var prefixCls = _ref5.prefixCls,
  1114. renderEmpty = _ref5.renderEmpty,
  1115. dropdownPrefixCls = _ref5.dropdownPrefixCls,
  1116. contextLocale = _ref5.contextLocale,
  1117. contextGetPopupContainer = _ref5.getPopupContainer,
  1118. transformCellText = _ref5.transformCellText;
  1119. var h = this.$createElement;
  1120. var _getOptionProps = (0, _propsUtil.getOptionProps)(this),
  1121. showHeader = _getOptionProps.showHeader,
  1122. locale = _getOptionProps.locale,
  1123. getPopupContainer = _getOptionProps.getPopupContainer,
  1124. expandIcon = _getOptionProps.expandIcon,
  1125. restProps = (0, _objectWithoutProperties3['default'])(_getOptionProps, ['showHeader', 'locale', 'getPopupContainer', 'expandIcon']);
  1126. var data = this.getCurrentPageData();
  1127. var expandIconAsCell = this.expandedRowRender && this.expandIconAsCell !== false;
  1128. // use props.getPopupContainer first
  1129. var realGetPopupContainer = getPopupContainer || contextGetPopupContainer;
  1130. // Merge too locales
  1131. var mergedLocale = (0, _extends5['default'])({}, contextLocale, locale);
  1132. if (!locale || !locale.emptyText) {
  1133. mergedLocale.emptyText = renderEmpty(h, 'Table');
  1134. }
  1135. var classString = (0, _classnames2['default'])((_classNames4 = {}, (0, _defineProperty3['default'])(_classNames4, prefixCls + '-' + this.size, true), (0, _defineProperty3['default'])(_classNames4, prefixCls + '-bordered', this.bordered), (0, _defineProperty3['default'])(_classNames4, prefixCls + '-empty', !data.length), (0, _defineProperty3['default'])(_classNames4, prefixCls + '-without-column-header', !showHeader), _classNames4));
  1136. var columnsWithRowSelection = this.renderRowSelection({
  1137. prefixCls: prefixCls,
  1138. locale: mergedLocale,
  1139. getPopupContainer: realGetPopupContainer
  1140. });
  1141. var columns = this.renderColumnsDropdown({
  1142. columns: columnsWithRowSelection,
  1143. prefixCls: prefixCls,
  1144. dropdownPrefixCls: dropdownPrefixCls,
  1145. locale: mergedLocale,
  1146. getPopupContainer: realGetPopupContainer
  1147. }).map(function (column, i) {
  1148. var newColumn = (0, _extends5['default'])({}, column);
  1149. newColumn.key = getColumnKey(newColumn, i);
  1150. return newColumn;
  1151. });
  1152. var expandIconColumnIndex = columns[0] && columns[0].key === 'selection-column' ? 1 : 0;
  1153. if ('expandIconColumnIndex' in restProps) {
  1154. expandIconColumnIndex = restProps.expandIconColumnIndex;
  1155. }
  1156. var vcTableProps = {
  1157. key: 'table',
  1158. props: (0, _extends5['default'])({
  1159. expandIcon: expandIcon || this.renderExpandIcon(prefixCls)
  1160. }, restProps, {
  1161. customRow: function customRow(record, index) {
  1162. return _this12.onRow(prefixCls, record, index);
  1163. },
  1164. components: this.sComponents,
  1165. prefixCls: prefixCls,
  1166. data: data,
  1167. columns: columns,
  1168. showHeader: showHeader,
  1169. expandIconColumnIndex: expandIconColumnIndex,
  1170. expandIconAsCell: expandIconAsCell,
  1171. emptyText: mergedLocale.emptyText,
  1172. transformCellText: transformCellText
  1173. }),
  1174. on: (0, _propsUtil.getListeners)(this),
  1175. 'class': classString,
  1176. ref: 'vcTable'
  1177. };
  1178. return h(_vcTable2['default'], vcTableProps);
  1179. }
  1180. },
  1181. render: function render() {
  1182. var _this13 = this;
  1183. var h = arguments[0];
  1184. var customizePrefixCls = this.prefixCls,
  1185. customizeDropdownPrefixCls = this.dropdownPrefixCls,
  1186. customizeTransformCellText = this.transformCellText;
  1187. var data = this.getCurrentPageData();
  1188. var _configProvider = this.configProvider,
  1189. getContextPopupContainer = _configProvider.getPopupContainer,
  1190. tct = _configProvider.transformCellText;
  1191. var getPopupContainer = this.getPopupContainer || getContextPopupContainer;
  1192. var transformCellText = customizeTransformCellText || tct;
  1193. var loading = this.loading;
  1194. if (typeof loading === 'boolean') {
  1195. loading = {
  1196. props: {
  1197. spinning: loading
  1198. }
  1199. };
  1200. } else {
  1201. loading = {
  1202. props: (0, _extends5['default'])({}, loading)
  1203. };
  1204. }
  1205. var getPrefixCls = this.configProvider.getPrefixCls;
  1206. var renderEmpty = this.configProvider.renderEmpty;
  1207. var prefixCls = getPrefixCls('table', customizePrefixCls);
  1208. var dropdownPrefixCls = getPrefixCls('dropdown', customizeDropdownPrefixCls);
  1209. var table = h(_LocaleReceiver2['default'], {
  1210. attrs: {
  1211. componentName: 'Table',
  1212. defaultLocale: _default3['default'].Table,
  1213. children: function children(locale) {
  1214. return _this13.renderTable({
  1215. prefixCls: prefixCls,
  1216. renderEmpty: renderEmpty,
  1217. dropdownPrefixCls: dropdownPrefixCls,
  1218. contextLocale: locale,
  1219. getPopupContainer: getPopupContainer,
  1220. transformCellText: transformCellText
  1221. });
  1222. }
  1223. }
  1224. });
  1225. // if there is no pagination or no data,
  1226. // the height of spin should decrease by half of pagination
  1227. var paginationPatchClass = this.hasPagination() && data && data.length !== 0 ? prefixCls + '-with-pagination' : prefixCls + '-without-pagination';
  1228. var spinProps = (0, _extends5['default'])({}, loading, {
  1229. 'class': loading.props && loading.props.spinning ? paginationPatchClass + ' ' + prefixCls + '-spin-holder' : ''
  1230. });
  1231. return h(
  1232. 'div',
  1233. { 'class': (0, _classnames2['default'])(prefixCls + '-wrapper') },
  1234. [h(
  1235. _spin2['default'],
  1236. spinProps,
  1237. [this.renderPagination(prefixCls, 'top'), table, this.renderPagination(prefixCls, 'bottom')]
  1238. )]
  1239. );
  1240. }
  1241. };