| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477 |
- "use strict";
- var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- exports.tableProps = exports.default = void 0;
- var _vue = require("vue");
- var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
- var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
- var _vcTable = _interopRequireDefault(require("../vc-table"));
- var _Table = require("../vc-table/Table");
- var _spin = _interopRequireDefault(require("../spin"));
- var _pagination = _interopRequireDefault(require("../pagination"));
- var _usePagination = _interopRequireWildcard(require("./hooks/usePagination"));
- var _useLazyKVMap = _interopRequireDefault(require("./hooks/useLazyKVMap"));
- var _useSelection = _interopRequireDefault(require("./hooks/useSelection"));
- var _useSorter = _interopRequireWildcard(require("./hooks/useSorter"));
- var _useFilter = _interopRequireWildcard(require("./hooks/useFilter"));
- var _useTitleColumns = _interopRequireDefault(require("./hooks/useTitleColumns"));
- var _ExpandIcon = _interopRequireDefault(require("./ExpandIcon"));
- var _scrollTo = _interopRequireDefault(require("../_util/scrollTo"));
- var _en_US = _interopRequireDefault(require("../locale/en_US"));
- var _devWarning = _interopRequireDefault(require("../vc-util/devWarning"));
- var _useBreakpoint = _interopRequireDefault(require("../_util/hooks/useBreakpoint"));
- var _useConfigInject = _interopRequireDefault(require("../config-provider/hooks/useConfigInject"));
- var _LocaleReceiver = require("../locale-provider/LocaleReceiver");
- var _classNames = _interopRequireDefault(require("../_util/classNames"));
- var _omit = _interopRequireDefault(require("../_util/omit"));
- var _propsUtil = require("../_util/props-util");
- var _context = require("./context");
- var _useColumns = _interopRequireDefault(require("./hooks/useColumns"));
- var _util = require("./util");
- var _type = require("../_util/type");
- var _style = _interopRequireDefault(require("./style"));
- function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
- function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
- // CSSINJS
- const EMPTY_LIST = [];
- const tableProps = () => {
- return {
- prefixCls: (0, _type.stringType)(),
- columns: (0, _type.arrayType)(),
- rowKey: (0, _type.someType)([String, Function]),
- tableLayout: (0, _type.stringType)(),
- rowClassName: (0, _type.someType)([String, Function]),
- title: (0, _type.functionType)(),
- footer: (0, _type.functionType)(),
- id: (0, _type.stringType)(),
- showHeader: (0, _type.booleanType)(),
- components: (0, _type.objectType)(),
- customRow: (0, _type.functionType)(),
- customHeaderRow: (0, _type.functionType)(),
- direction: (0, _type.stringType)(),
- expandFixed: (0, _type.someType)([Boolean, String]),
- expandColumnWidth: Number,
- expandedRowKeys: (0, _type.arrayType)(),
- defaultExpandedRowKeys: (0, _type.arrayType)(),
- expandedRowRender: (0, _type.functionType)(),
- expandRowByClick: (0, _type.booleanType)(),
- expandIcon: (0, _type.functionType)(),
- onExpand: (0, _type.functionType)(),
- onExpandedRowsChange: (0, _type.functionType)(),
- 'onUpdate:expandedRowKeys': (0, _type.functionType)(),
- defaultExpandAllRows: (0, _type.booleanType)(),
- indentSize: Number,
- /** @deprecated Please use `EXPAND_COLUMN` in `columns` directly */
- expandIconColumnIndex: Number,
- showExpandColumn: (0, _type.booleanType)(),
- expandedRowClassName: (0, _type.functionType)(),
- childrenColumnName: (0, _type.stringType)(),
- rowExpandable: (0, _type.functionType)(),
- sticky: (0, _type.someType)([Boolean, Object]),
- dropdownPrefixCls: String,
- dataSource: (0, _type.arrayType)(),
- pagination: (0, _type.someType)([Boolean, Object]),
- loading: (0, _type.someType)([Boolean, Object]),
- size: (0, _type.stringType)(),
- bordered: (0, _type.booleanType)(),
- locale: (0, _type.objectType)(),
- onChange: (0, _type.functionType)(),
- onResizeColumn: (0, _type.functionType)(),
- rowSelection: (0, _type.objectType)(),
- getPopupContainer: (0, _type.functionType)(),
- scroll: (0, _type.objectType)(),
- sortDirections: (0, _type.arrayType)(),
- showSorterTooltip: (0, _type.someType)([Boolean, Object], true),
- transformCellText: (0, _type.functionType)()
- };
- };
- exports.tableProps = tableProps;
- const InternalTable = (0, _vue.defineComponent)({
- name: 'InternalTable',
- inheritAttrs: false,
- props: (0, _propsUtil.initDefaultProps)((0, _extends2.default)((0, _extends2.default)({}, tableProps()), {
- contextSlots: (0, _type.objectType)()
- }), {
- rowKey: 'key'
- }),
- setup(props, _ref) {
- let {
- attrs,
- slots,
- expose,
- emit
- } = _ref;
- (0, _devWarning.default)(!(typeof props.rowKey === 'function' && props.rowKey.length > 1), 'Table', '`index` parameter of `rowKey` function is deprecated. There is no guarantee that it will work as expected.');
- (0, _context.useProvideSlots)((0, _vue.computed)(() => props.contextSlots));
- (0, _context.useProvideTableContext)({
- onResizeColumn: (w, col) => {
- emit('resizeColumn', w, col);
- }
- });
- const screens = (0, _useBreakpoint.default)();
- const mergedColumns = (0, _vue.computed)(() => {
- const matched = new Set(Object.keys(screens.value).filter(m => screens.value[m]));
- return props.columns.filter(c => !c.responsive || c.responsive.some(r => matched.has(r)));
- });
- const {
- size: mergedSize,
- renderEmpty,
- direction,
- prefixCls,
- configProvider
- } = (0, _useConfigInject.default)('table', props);
- // Style
- const [wrapSSR, hashId] = (0, _style.default)(prefixCls);
- const transformCellText = (0, _vue.computed)(() => {
- var _a;
- return props.transformCellText || ((_a = configProvider.transformCellText) === null || _a === void 0 ? void 0 : _a.value);
- });
- const [tableLocale] = (0, _LocaleReceiver.useLocaleReceiver)('Table', _en_US.default.Table, (0, _vue.toRef)(props, 'locale'));
- const rawData = (0, _vue.computed)(() => props.dataSource || EMPTY_LIST);
- const dropdownPrefixCls = (0, _vue.computed)(() => configProvider.getPrefixCls('dropdown', props.dropdownPrefixCls));
- const childrenColumnName = (0, _vue.computed)(() => props.childrenColumnName || 'children');
- const expandType = (0, _vue.computed)(() => {
- if (rawData.value.some(item => item === null || item === void 0 ? void 0 : item[childrenColumnName.value])) {
- return 'nest';
- }
- if (props.expandedRowRender) {
- return 'row';
- }
- return null;
- });
- const internalRefs = (0, _vue.reactive)({
- body: null
- });
- const updateInternalRefs = refs => {
- (0, _extends2.default)(internalRefs, refs);
- };
- // ============================ RowKey ============================
- const getRowKey = (0, _vue.computed)(() => {
- if (typeof props.rowKey === 'function') {
- return props.rowKey;
- }
- return record => record === null || record === void 0 ? void 0 : record[props.rowKey];
- });
- const [getRecordByKey] = (0, _useLazyKVMap.default)(rawData, childrenColumnName, getRowKey);
- // ============================ Events =============================
- const changeEventInfo = {};
- const triggerOnChange = function (info, action) {
- let reset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
- const {
- pagination,
- scroll,
- onChange
- } = props;
- const changeInfo = (0, _extends2.default)((0, _extends2.default)({}, changeEventInfo), info);
- if (reset) {
- changeEventInfo.resetPagination();
- // Reset event param
- if (changeInfo.pagination.current) {
- changeInfo.pagination.current = 1;
- }
- // Trigger pagination events
- if (pagination && pagination.onChange) {
- pagination.onChange(1, changeInfo.pagination.pageSize);
- }
- }
- if (scroll && scroll.scrollToFirstRowOnChange !== false && internalRefs.body) {
- (0, _scrollTo.default)(0, {
- getContainer: () => internalRefs.body
- });
- }
- onChange === null || onChange === void 0 ? void 0 : onChange(changeInfo.pagination, changeInfo.filters, changeInfo.sorter, {
- currentDataSource: (0, _useFilter.getFilterData)((0, _useSorter.getSortData)(rawData.value, changeInfo.sorterStates, childrenColumnName.value), changeInfo.filterStates),
- action
- });
- };
- /**
- * Controlled state in `columns` is not a good idea that makes too many code (1000+ line?) to read
- * state out and then put it back to title render. Move these code into `hooks` but still too
- * complex. We should provides Table props like `sorter` & `filter` to handle control in next big version.
- */
- // ============================ Sorter =============================
- const onSorterChange = (sorter, sorterStates) => {
- triggerOnChange({
- sorter,
- sorterStates
- }, 'sort', false);
- };
- const [transformSorterColumns, sortStates, sorterTitleProps, sorters] = (0, _useSorter.default)({
- prefixCls,
- mergedColumns,
- onSorterChange,
- sortDirections: (0, _vue.computed)(() => props.sortDirections || ['ascend', 'descend']),
- tableLocale,
- showSorterTooltip: (0, _vue.toRef)(props, 'showSorterTooltip')
- });
- const sortedData = (0, _vue.computed)(() => (0, _useSorter.getSortData)(rawData.value, sortStates.value, childrenColumnName.value));
- // ============================ Filter ============================
- const onFilterChange = (filters, filterStates) => {
- triggerOnChange({
- filters,
- filterStates
- }, 'filter', true);
- };
- const [transformFilterColumns, filterStates, filters] = (0, _useFilter.default)({
- prefixCls,
- locale: tableLocale,
- dropdownPrefixCls,
- mergedColumns,
- onFilterChange,
- getPopupContainer: (0, _vue.toRef)(props, 'getPopupContainer')
- });
- const mergedData = (0, _vue.computed)(() => (0, _useFilter.getFilterData)(sortedData.value, filterStates.value));
- // ============================ Column ============================
- const [transformBasicColumns] = (0, _useColumns.default)((0, _vue.toRef)(props, 'contextSlots'));
- const columnTitleProps = (0, _vue.computed)(() => {
- const mergedFilters = {};
- const filtersValue = filters.value;
- Object.keys(filtersValue).forEach(filterKey => {
- if (filtersValue[filterKey] !== null) {
- mergedFilters[filterKey] = filtersValue[filterKey];
- }
- });
- return (0, _extends2.default)((0, _extends2.default)({}, sorterTitleProps.value), {
- filters: mergedFilters
- });
- });
- const [transformTitleColumns] = (0, _useTitleColumns.default)(columnTitleProps);
- // ========================== Pagination ==========================
- const onPaginationChange = (current, pageSize) => {
- triggerOnChange({
- pagination: (0, _extends2.default)((0, _extends2.default)({}, changeEventInfo.pagination), {
- current,
- pageSize
- })
- }, 'paginate');
- };
- const [mergedPagination, resetPagination] = (0, _usePagination.default)((0, _vue.computed)(() => mergedData.value.length), (0, _vue.toRef)(props, 'pagination'), onPaginationChange);
- (0, _vue.watchEffect)(() => {
- changeEventInfo.sorter = sorters.value;
- changeEventInfo.sorterStates = sortStates.value;
- changeEventInfo.filters = filters.value;
- changeEventInfo.filterStates = filterStates.value;
- changeEventInfo.pagination = props.pagination === false ? {} : (0, _usePagination.getPaginationParam)(mergedPagination.value, props.pagination);
- changeEventInfo.resetPagination = resetPagination;
- });
- // ============================= Data =============================
- const pageData = (0, _vue.computed)(() => {
- if (props.pagination === false || !mergedPagination.value.pageSize) {
- return mergedData.value;
- }
- const {
- current = 1,
- total,
- pageSize = _usePagination.DEFAULT_PAGE_SIZE
- } = mergedPagination.value;
- (0, _devWarning.default)(current > 0, 'Table', '`current` should be positive number.');
- // Dynamic table data
- if (mergedData.value.length < total) {
- if (mergedData.value.length > pageSize) {
- return mergedData.value.slice((current - 1) * pageSize, current * pageSize);
- }
- return mergedData.value;
- }
- return mergedData.value.slice((current - 1) * pageSize, current * pageSize);
- });
- (0, _vue.watchEffect)(() => {
- (0, _vue.nextTick)(() => {
- const {
- total,
- pageSize = _usePagination.DEFAULT_PAGE_SIZE
- } = mergedPagination.value;
- // Dynamic table data
- if (mergedData.value.length < total) {
- if (mergedData.value.length > pageSize) {
- (0, _devWarning.default)(false, 'Table', '`dataSource` length is less than `pagination.total` but large than `pagination.pageSize`. Please make sure your config correct data with async mode.');
- }
- }
- });
- }, {
- flush: 'post'
- });
- const expandIconColumnIndex = (0, _vue.computed)(() => {
- if (props.showExpandColumn === false) return -1;
- // Adjust expand icon index, no overwrite expandIconColumnIndex if set.
- if (expandType.value === 'nest' && props.expandIconColumnIndex === undefined) {
- return props.rowSelection ? 1 : 0;
- } else if (props.expandIconColumnIndex > 0 && props.rowSelection) {
- return props.expandIconColumnIndex - 1;
- }
- return props.expandIconColumnIndex;
- });
- const rowSelection = (0, _vue.ref)();
- (0, _vue.watch)(() => props.rowSelection, () => {
- rowSelection.value = props.rowSelection ? (0, _extends2.default)({}, props.rowSelection) : props.rowSelection;
- }, {
- deep: true,
- immediate: true
- });
- // ========================== Selections ==========================
- const [transformSelectionColumns, selectedKeySet] = (0, _useSelection.default)(rowSelection, {
- prefixCls,
- data: mergedData,
- pageData,
- getRowKey,
- getRecordByKey,
- expandType,
- childrenColumnName,
- locale: tableLocale,
- getPopupContainer: (0, _vue.computed)(() => props.getPopupContainer)
- });
- const internalRowClassName = (record, index, indent) => {
- let mergedRowClassName;
- const {
- rowClassName
- } = props;
- if (typeof rowClassName === 'function') {
- mergedRowClassName = (0, _classNames.default)(rowClassName(record, index, indent));
- } else {
- mergedRowClassName = (0, _classNames.default)(rowClassName);
- }
- return (0, _classNames.default)({
- [`${prefixCls.value}-row-selected`]: selectedKeySet.value.has(getRowKey.value(record, index))
- }, mergedRowClassName);
- };
- expose({
- selectedKeySet
- });
- const indentSize = (0, _vue.computed)(() => {
- // Indent size
- return typeof props.indentSize === 'number' ? props.indentSize : 15;
- });
- const transformColumns = innerColumns => {
- const res = transformTitleColumns(transformSelectionColumns(transformFilterColumns(transformSorterColumns(transformBasicColumns(innerColumns)))));
- return res;
- };
- return () => {
- var _a;
- const {
- expandIcon = slots.expandIcon || (0, _ExpandIcon.default)(tableLocale.value),
- pagination,
- loading,
- bordered
- } = props;
- let topPaginationNode;
- let bottomPaginationNode;
- if (pagination !== false && ((_a = mergedPagination.value) === null || _a === void 0 ? void 0 : _a.total)) {
- let paginationSize;
- if (mergedPagination.value.size) {
- paginationSize = mergedPagination.value.size;
- } else {
- paginationSize = mergedSize.value === 'small' || mergedSize.value === 'middle' ? 'small' : undefined;
- }
- const renderPagination = position => (0, _vue.createVNode)(_pagination.default, (0, _objectSpread2.default)((0, _objectSpread2.default)({}, mergedPagination.value), {}, {
- "class": [`${prefixCls.value}-pagination ${prefixCls.value}-pagination-${position}`, mergedPagination.value.class],
- "size": paginationSize
- }), null);
- const defaultPosition = direction.value === 'rtl' ? 'left' : 'right';
- const {
- position
- } = mergedPagination.value;
- if (position !== null && Array.isArray(position)) {
- const topPos = position.find(p => p.includes('top'));
- const bottomPos = position.find(p => p.includes('bottom'));
- const isDisable = position.every(p => `${p}` === 'none');
- if (!topPos && !bottomPos && !isDisable) {
- bottomPaginationNode = renderPagination(defaultPosition);
- }
- if (topPos) {
- topPaginationNode = renderPagination(topPos.toLowerCase().replace('top', ''));
- }
- if (bottomPos) {
- bottomPaginationNode = renderPagination(bottomPos.toLowerCase().replace('bottom', ''));
- }
- } else {
- bottomPaginationNode = renderPagination(defaultPosition);
- }
- }
- // >>>>>>>>> Spinning
- let spinProps;
- if (typeof loading === 'boolean') {
- spinProps = {
- spinning: loading
- };
- } else if (typeof loading === 'object') {
- spinProps = (0, _extends2.default)({
- spinning: true
- }, loading);
- }
- const wrapperClassNames = (0, _classNames.default)(`${prefixCls.value}-wrapper`, {
- [`${prefixCls.value}-wrapper-rtl`]: direction.value === 'rtl'
- }, attrs.class, hashId.value);
- const tableProps = (0, _omit.default)(props, ['columns']);
- return wrapSSR((0, _vue.createVNode)("div", {
- "class": wrapperClassNames,
- "style": attrs.style
- }, [(0, _vue.createVNode)(_spin.default, (0, _objectSpread2.default)({
- "spinning": false
- }, spinProps), {
- default: () => [topPaginationNode, (0, _vue.createVNode)(_vcTable.default, (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({}, attrs), tableProps), {}, {
- "expandedRowKeys": props.expandedRowKeys,
- "defaultExpandedRowKeys": props.defaultExpandedRowKeys,
- "expandIconColumnIndex": expandIconColumnIndex.value,
- "indentSize": indentSize.value,
- "expandIcon": expandIcon,
- "columns": mergedColumns.value,
- "direction": direction.value,
- "prefixCls": prefixCls.value,
- "class": (0, _classNames.default)({
- [`${prefixCls.value}-middle`]: mergedSize.value === 'middle',
- [`${prefixCls.value}-small`]: mergedSize.value === 'small',
- [`${prefixCls.value}-bordered`]: bordered,
- [`${prefixCls.value}-empty`]: rawData.value.length === 0
- }),
- "data": pageData.value,
- "rowKey": getRowKey.value,
- "rowClassName": internalRowClassName,
- "internalHooks": _Table.INTERNAL_HOOKS,
- "internalRefs": internalRefs,
- "onUpdateInternalRefs": updateInternalRefs,
- "transformColumns": transformColumns,
- "transformCellText": transformCellText.value
- }), (0, _extends2.default)((0, _extends2.default)({}, slots), {
- emptyText: () => {
- var _a, _b;
- return ((_a = slots.emptyText) === null || _a === void 0 ? void 0 : _a.call(slots)) || ((_b = props.locale) === null || _b === void 0 ? void 0 : _b.emptyText) || renderEmpty('Table');
- }
- })), bottomPaginationNode]
- })]));
- };
- }
- });
- const Table = (0, _vue.defineComponent)({
- name: 'ATable',
- inheritAttrs: false,
- props: (0, _propsUtil.initDefaultProps)(tableProps(), {
- rowKey: 'key'
- }),
- slots: Object,
- setup(props, _ref2) {
- let {
- attrs,
- slots,
- expose
- } = _ref2;
- const table = (0, _vue.ref)();
- expose({
- table
- });
- return () => {
- var _a;
- const columns = props.columns || (0, _util.convertChildrenToColumns)((_a = slots.default) === null || _a === void 0 ? void 0 : _a.call(slots));
- return (0, _vue.createVNode)(InternalTable, (0, _objectSpread2.default)((0, _objectSpread2.default)((0, _objectSpread2.default)({
- "ref": table
- }, attrs), props), {}, {
- "columns": columns || [],
- "expandedRowRender": slots.expandedRowRender || props.expandedRowRender,
- "contextSlots": (0, _extends2.default)({}, slots)
- }), slots);
- };
- }
- });
- var _default = exports.default = Table;
|