UNPKG

xdesign-vue-next

Version:

XDesign Component for vue-next

494 lines (490 loc) 22.1 kB
/** * xdesign v1.0.6 * (c) 2023 xdesign * @license MIT */ import _defineProperty from '@babel/runtime/helpers/defineProperty'; import { defineComponent, toRefs, ref, computed, onMounted, createVNode, mergeProps, h } from 'vue'; import get from 'lodash/get'; import omit from 'lodash/omit'; import baseTableProps from './base-table-props.js'; import primaryTableProps from './primary-table-props.js'; import _BaseTable from './base-table.js'; export { BASE_TABLE_ALL_EVENTS } from './base-table.js'; import { useTNodeJSX } from '../hooks/tnode.js'; import useColumnController from './hooks/useColumnController.js'; import useRowExpand from './hooks/useRowExpand.js'; import useTableHeader, { renderTitle } from './hooks/useTableHeader.js'; import useRowSelect from './hooks/useRowSelect.js'; import useSorter from './hooks/useSorter.js'; import useFilter from './hooks/useFilter.js'; import useDragSort from './hooks/useDragSort.js'; import useAsyncLoading from './hooks/useAsyncLoading.js'; import EditableCell from './editable-cell.js'; import useClassName from './hooks/useClassName.js'; import useRowEdit from './hooks/useEditableRow.js'; import useStyle from './hooks/useStyle.js'; import 'lodash/pick'; import './hooks/useColumnResize.js'; import 'lodash/isNumber'; import '../utils/dom.js'; import '../_chunks/dep-3a1cce9f.js'; import 'lodash/isString'; import 'lodash/isFunction'; import 'lodash/isArray'; import '../utils/easing.js'; import './hooks/useFixed.js'; import '@babel/runtime/helpers/slicedToArray'; import 'lodash/debounce'; import 'lodash/xorWith'; import '../_common/js/log/log.js'; import '../_common/js/utils/getScrollbarWidth.js'; import '../_common/js/utils/helper.js'; import '@babel/runtime/helpers/toConsumableArray'; import '@babel/runtime/helpers/objectWithoutProperties'; import 'lodash/isNull'; import 'lodash/isUndefined'; import './hooks/usePagination.js'; import '../config-provider/useConfig.js'; import 'lodash/cloneDeep'; import '../config-provider/context.js'; import 'lodash/mergeWith'; import 'lodash/merge'; import '../_common/js/global-config/default-config.js'; import '../_common/js/global-config/locale/en_US.js'; import '../pagination/index.js'; import '../pagination/pagination.js'; import '../_chunks/dep-17236cae.js'; import '../_chunks/dep-9beabfae.js'; import 'lodash/isNaN'; import '../hooks/useConfig.js'; import '../input-number/index.js'; import '../input-number/input-number.js'; import '../_chunks/dep-36abe4f1.js'; import '../_chunks/dep-05bc6eb4.js'; import '../_chunks/dep-6c2da407.js'; import '../button/index.js'; import '../button/button.js'; import '../loading/index.js'; import '../loading/directive.js'; import '../loading/plugin.js'; import '../loading/loading.js'; import '../loading/icon/gradient.js'; import '../_common/js/loading/circle-adapter.js'; import '../_common/js/utils/set-style.js'; import '../utils/render-tnode.js'; import 'lodash/isEmpty'; import 'lodash/isObject'; import 'lodash/camelCase'; import 'lodash/kebabCase'; import '../loading/props.js'; import '../hooks/useTeleport.js'; import '../utils/withInstall.js'; import '../button/props.js'; import '../hooks/useRipple.js'; import '../hooks/useKeepAnimation.js'; import '../utils/set-style.js'; import '../hooks/useDisabled.js'; import 'lodash/isBoolean'; import '../input/index.js'; import '../input/input.js'; import '../_chunks/dep-fb0628ce.js'; import '../_chunks/dep-eade0dcf.js'; import '../input/props.js'; import '../form/hooks.js'; import '../input/useInput.js'; import '../form/const.js'; import '../hooks/useVModel.js'; import '../input/useLengthLimit.js'; import '../input/useInputEventHandler.js'; import '../input/useInputWidth.js'; import '../input/input-group.js'; import '../input/input-group-props.js'; import '../input-number/props.js'; import '../input-number/useInputNumber.js'; import '../hooks/useCommonClassName.js'; import '../_common/js/input-number/number.js'; import '../_common/js/input-number/large-number.js'; import '../select/index.js'; import '../select/select.js'; import 'lodash/intersection'; import '../common-components/fake-arrow.js'; import '../select-input/index.js'; import '../select-input/select-input.js'; import '../popup/index.js'; import '../popup/popup.js'; import '@popperjs/core'; import '../popup/container.js'; import '../popup/props.js'; import '../hooks/useResizeObserver.js'; import '../select-input/props.js'; import '../select-input/useSingle.js'; import '../hooks/useDefaultValue.js'; import '../select-input/useMultiple.js'; import '../tag-input/index.js'; import '../tag-input/tag-input.js'; import '../tag-input/props.js'; import '../tag-input/hooks/useTagScroll.js'; import '../tag-input/useTagList.js'; import '../tag/index.js'; import '../tag/tag.js'; import '../_chunks/dep-ae5efda0.js'; import '../tag/props.js'; import '../tag/check-tag.js'; import '../tag/check-tag-props.js'; import '../tag-input/hooks/useHover.js'; import '../tag-input/hooks/useDragSorter.js'; import '../select-input/useOverlayInnerStyle.js'; import '@babel/runtime/helpers/typeof'; import '../select/select-panel.js'; import '../select/option.js'; import '../select/option-props.js'; import '../checkbox/index.js'; import '../checkbox/checkbox.js'; import '../checkbox/props.js'; import '../checkbox/constants.js'; import '../checkbox/hooks/useCheckboxLazyLoad.js'; import '../_common/js/utils/observe.js'; import '../checkbox/hooks/useKeyboard.js'; import '../checkbox/group.js'; import '../checkbox/checkbox-group-props.js'; import '../hooks/slot.js'; import '../select/helper.js'; import '../select/optionGroup.js'; import '../select/option-group-props.js'; import '../select/props.js'; import '../select/hooks/usePanelVirtualScroll.js'; import '../hooks/useVirtualScroll.js'; import '../select/hooks/useSelectOptions.js'; import '../input-adornment/index.js'; import '../input-adornment/input-adornment.js'; import '../input-adornment/props.js'; import '../pagination/props.js'; import '../pagination/usePaginationClasses.js'; import '../pagination/useMoreAction.js'; import '../pagination/pagination-mini.js'; import '../pagination/pagination-mini-props.js'; import '../hooks/useVirtualScrollNew.js'; import './hooks/useAffix.js'; import './tbody.js'; import './tr.js'; import 'lodash/upperFirst'; import './utils.js'; import './ellipsis.js'; import '../tooltip/index.js'; import '../tooltip/tooltip.js'; import '../tooltip/props.js'; import '../tooltip/util.js'; import './hooks/useLazyLoad.js'; import './hooks/useRowspanAndColspan.js'; import '../affix/index.js'; import '../affix/affix.js'; import '@babel/runtime/helpers/asyncToGenerator'; import '@babel/runtime/regenerator'; import '../affix/props.js'; import './thead.js'; import './tfoot.js'; import './hooks/useMultiHeader.js'; import '../dialog/plugin.js'; import '../dialog/dialog.js'; import '../_chunks/dep-b09ff084.js'; import '../_chunks/dep-8eef0183.js'; import '../_chunks/dep-2f5ed418.js'; import '../dialog/props.js'; import '../dialog/hooks.js'; import '../hooks/useDestroyOnClose.js'; import '../dialog/stack.js'; import '../_common/js/table/utils.js'; import '../radio/index.js'; import '../radio/radio.js'; import '../utils/helper.js'; import '../radio/props.js'; import '../radio/constants.js'; import '../radio/group.js'; import 'lodash/isNil'; import 'lodash/throttle'; import '../radio/radio-group-props.js'; import '../radio/useKeyboard.js'; import '../watermark/hooks.js'; import '../radio/radio-button.js'; import './sorter-button.js'; import './filter-controller.js'; import 'sortablejs'; import '../_common/js/utils/swapDragArrayElement.js'; import '@babel/runtime/helpers/toArray'; import 'lodash/set'; import '../form/form-model.js'; function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } var OMIT_PROPS = ["hideSortTips", "dragSort", "defaultExpandedRowKeys", "defaultSelectedRowKeys", "columnController", "filterRow", "sortOnRowDraggable", "expandOnRowClick", "multipleSort", "expandIcon", "reserveSelectedRowOnPaginate", "selectOnRowClick", "onChange", "onAsyncLoadingClick", "onColumnChange", "onColumnControllerVisibleChange", "onDataChange", "onDisplayColumnsChange", "onDragSort", "onExpandChange", "onFilterChange", "onSelectChange", "onSortChange"]; var _PrimaryTable = defineComponent({ name: "XPrimaryTable", props: _objectSpread(_objectSpread({}, baseTableProps), primaryTableProps), setup: function setup(props, context) { var renderTNode = useTNodeJSX(); var _toRefs = toRefs(props), columns = _toRefs.columns, columnController = _toRefs.columnController; var primaryTableRef = ref(null); var _useClassName = useClassName(), classPrefix = _useClassName.classPrefix, tableDraggableClasses = _useClassName.tableDraggableClasses, tableBaseClass = _useClassName.tableBaseClass, tableSelectedClasses = _useClassName.tableSelectedClasses, tableSortClasses = _useClassName.tableSortClasses; var _useStyle = useStyle(props), sizeClassNames = _useStyle.sizeClassNames; var _useColumnController = useColumnController(props, context), tDisplayColumns = _useColumnController.tDisplayColumns, renderColumnController = _useColumnController.renderColumnController; var _useRowExpand = useRowExpand(props, context), showExpandedRow = _useRowExpand.showExpandedRow, showExpandIconColumn = _useRowExpand.showExpandIconColumn, getExpandColumn = _useRowExpand.getExpandColumn, renderExpandedRow = _useRowExpand.renderExpandedRow, onInnerExpandRowClick = _useRowExpand.onInnerExpandRowClick; var _useSorter = useSorter(props, context), renderSortIcon = _useSorter.renderSortIcon; var _useRowSelect = useRowSelect(props, tableSelectedClasses), selectedRowClassNames = _useRowSelect.selectedRowClassNames, currentPaginateData = _useRowSelect.currentPaginateData, formatToRowSelectColumn = _useRowSelect.formatToRowSelectColumn, setTSelectedRowKeys = _useRowSelect.setTSelectedRowKeys, onInnerSelectRowClick = _useRowSelect.onInnerSelectRowClick; var _useFilter = useFilter(props, context), hasEmptyCondition = _useFilter.hasEmptyCondition, isTableOverflowHidden = _useFilter.isTableOverflowHidden, renderFilterIcon = _useFilter.renderFilterIcon, renderFirstFilterRow = _useFilter.renderFirstFilterRow, setFilterPrimaryTableRef = _useFilter.setFilterPrimaryTableRef; var _useDragSort = useDragSort(props, context), isRowHandlerDraggable = _useDragSort.isRowHandlerDraggable, isRowDraggable = _useDragSort.isRowDraggable, isColDraggable = _useDragSort.isColDraggable, setDragSortPrimaryTableRef = _useDragSort.setDragSortPrimaryTableRef, setDragSortColumns = _useDragSort.setDragSortColumns; var _useTableHeader = useTableHeader(props), renderTitleWidthIcon = _useTableHeader.renderTitleWidthIcon; var _useAsyncLoading = useAsyncLoading(props), renderAsyncLoading = _useAsyncLoading.renderAsyncLoading; var _useEditableRow = useRowEdit(props), errorListMap = _useEditableRow.errorListMap, editableKeysMap = _useEditableRow.editableKeysMap, validateRowData = _useEditableRow.validateRowData, validateTableData = _useEditableRow.validateTableData, onRuleChange = _useEditableRow.onRuleChange, clearValidateData = _useEditableRow.clearValidateData, onPrimaryTableCellEditChange = _useEditableRow.onPrimaryTableCellEditChange; var primaryTableClasses = computed(function () { var _ref; return _ref = {}, _defineProperty(_ref, tableDraggableClasses.colDraggable, isColDraggable.value), _defineProperty(_ref, tableDraggableClasses.rowHandlerDraggable, isRowHandlerDraggable.value), _defineProperty(_ref, tableDraggableClasses.rowDraggable, isRowDraggable.value), _defineProperty(_ref, tableBaseClass.overflowVisible, isTableOverflowHidden.value === false), _defineProperty(_ref, tableBaseClass.tableRowEdit, props.editableRowKeys), _ref; }); var tRowClassNames = computed(function () { var tClassNames = [props.rowClassName, selectedRowClassNames.value]; return tClassNames.filter(function (v) { return v; }); }); var tRowAttributes = computed(function () { var tAttributes = [props.rowAttributes]; if (isRowHandlerDraggable.value || isRowDraggable.value) { tAttributes.push(function (_ref2) { var row = _ref2.row; return { "data-id": get(row, props.rowKey || "id") }; }); } return tAttributes.filter(function (v) { return v; }); }); onMounted(function () { setFilterPrimaryTableRef(primaryTableRef.value); setDragSortPrimaryTableRef(primaryTableRef.value); }); context.expose({ validateRowData: validateRowData, validateTableData: validateTableData, clearValidateData: clearValidateData, refreshTable: function refreshTable() { primaryTableRef.value.refreshTable(); }, scrollToElement: function scrollToElement(data) { primaryTableRef.value.virtualConfig.scrollToElement(data); }, scrollColumnIntoView: function scrollColumnIntoView(colKey) { primaryTableRef.value.scrollColumnIntoView(colKey); }, baseTableRef: primaryTableRef }); var getColumns = function getColumns(columns2) { var arr = []; var _loop = function _loop() { var _item$children, _tDisplayColumns$valu, _item$edit, _item$children2, _item$children3; var item = _objectSpread({}, columns2[i]); var isDisplayColumn = ((_item$children = item.children) === null || _item$children === void 0 ? void 0 : _item$children.length) || ((_tDisplayColumns$valu = tDisplayColumns.value) === null || _tDisplayColumns$valu === void 0 ? void 0 : _tDisplayColumns$valu.includes(item.colKey)); if (!isDisplayColumn && props.columnController) return 1; // continue item = formatToRowSelectColumn(item); var sort = props.sort; if (item.sorter && props.showSortColumnBgColor) { var sorts = sort instanceof Array ? sort : [sort]; var sortedColumn = sorts.find(function (sort2) { return sort2 && sort2.sortBy === item.colKey && sort2.descending !== void 0; }); if (sortedColumn) { item.className = item.className instanceof Array ? item.className.concat(tableSortClasses.sortColumn) : [item.className, tableSortClasses.sortColumn]; } } if (item.sorter || item.filter) { var titleContent = renderTitle(context.slots, item, i); var _item = item, ellipsisTitle = _item.ellipsisTitle; item.title = function (h2, p) { var _primaryTableRef$valu; var sortIcon = item.sorter ? renderSortIcon(p) : null; var filterIcon = item.filter ? renderFilterIcon(p) : null; var attach = (_primaryTableRef$valu = primaryTableRef.value) === null || _primaryTableRef$valu === void 0 ? void 0 : _primaryTableRef$valu.tableContentRef; return renderTitleWidthIcon([titleContent, sortIcon, filterIcon], p.col, p.colIndex, ellipsisTitle, attach, { classPrefix: classPrefix, ellipsisOverlayClassName: props.size !== "medium" ? sizeClassNames[props.size] : "" }); }; item.ellipsisTitle = false; } if ((_item$edit = item.edit) !== null && _item$edit !== void 0 && _item$edit.component) { var oldCell = item.cell; item.cell = function (h2, p) { var cellProps = _objectSpread(_objectSpread({}, p), {}, { oldCell: oldCell, tableBaseClass: tableBaseClass, cellEmptyContent: props.cellEmptyContent, onChange: props.onRowEdit, onValidate: props.onRowValidate, onRuleChange: onRuleChange, onEditableChange: onPrimaryTableCellEditChange }); if (props.editableRowKeys) { var _errorListMap$value; var rowValue = get(p.row, props.rowKey || "id"); cellProps.editable = editableKeysMap.value[rowValue] || false; var key = [rowValue, p.col.colKey].join("__"); var errorList = (_errorListMap$value = errorListMap.value) === null || _errorListMap$value === void 0 ? void 0 : _errorListMap$value[key]; errorList && (cellProps.errors = errorList); } if (props.editableCellState) { cellProps.readonly = !props.editableCellState(p); } return createVNode(EditableCell, cellProps, context.slots); }; } if ((_item$children2 = item.children) !== null && _item$children2 !== void 0 && _item$children2.length) { item.children = getColumns(item.children); } if (!item.children || (_item$children3 = item.children) !== null && _item$children3 !== void 0 && _item$children3.length) { arr.push(item); } }; for (var i = 0, len = columns2.length; i < len; i++) { if (_loop()) continue; } return arr; }; var tColumns = computed(function () { var cols = getColumns(columns.value); if (showExpandIconColumn.value) { cols.unshift(getExpandColumn()); } return cols; }); var onInnerPageChange = function onInnerPageChange(pageInfo, newData) { var _props$onPageChange, _props$onChange; currentPaginateData.value = newData; (_props$onPageChange = props.onPageChange) === null || _props$onPageChange === void 0 ? void 0 : _props$onPageChange.call(props, pageInfo, newData); var changeParams = [{ pagination: pageInfo }, { trigger: "pagination", currentData: newData }]; (_props$onChange = props.onChange) === null || _props$onChange === void 0 ? void 0 : _props$onChange.call.apply(_props$onChange, [props].concat(changeParams)); if (!props.reserveSelectedRowOnPaginate) { setTSelectedRowKeys([], { selectedRowData: [], type: "uncheck", currentRowKey: "CLEAR_ON_PAGINATE" }); } }; var timer; var DURATION = 250; var onInnerRowClick = function onInnerRowClick(params) { if (!props.onRowDblclick) { onInnerExpandRowClick(params); onInnerSelectRowClick(params); return; } if (timer) { clearTimeout(timer); timer = void 0; } else { timer = setTimeout(function () { onInnerExpandRowClick(params); onInnerSelectRowClick(params); timer = void 0; }, DURATION); } }; return function () { var formatNode = function formatNode(api, renderInnerNode, condition, extra) { if (!condition) return props[api]; var innerNode = renderInnerNode(h); var propsNode = renderTNode(api); if (innerNode && !propsNode) return function () { return innerNode; }; if (propsNode && !innerNode) return function () { return propsNode; }; if (innerNode && propsNode) { return function () { return extra !== null && extra !== void 0 && extra.reverse ? createVNode("div", null, [innerNode, propsNode]) : createVNode("div", null, [propsNode, innerNode]); }; } return null; }; var isColumnController = !!(columnController.value && Object.keys(columnController.value).length); var placement = isColumnController ? columnController.value.placement || "top-right" : ""; var isBottomController = isColumnController && (placement === null || placement === void 0 ? void 0 : placement.indexOf("bottom")) !== -1; var topContent = formatNode("topContent", renderColumnController, isColumnController && !isBottomController); var bottomContent = formatNode("bottomContent", renderColumnController, isBottomController, { reverse: true }); var firstFullRow = formatNode("firstFullRow", renderFirstFilterRow, !hasEmptyCondition.value); var lastFullRow = formatNode("lastFullRow", renderAsyncLoading, !!props.asyncLoading); var baseTableProps2 = _objectSpread(_objectSpread({}, omit(props, OMIT_PROPS)), {}, { rowClassName: tRowClassNames.value, rowAttributes: tRowAttributes.value, columns: tColumns.value, topContent: topContent, bottomContent: bottomContent, firstFullRow: firstFullRow, lastFullRow: lastFullRow, thDraggable: ["col", "row-handler-col"].includes(props.dragSort), onPageChange: onInnerPageChange, renderExpandedRow: showExpandedRow.value ? renderExpandedRow : void 0 }); if (props.expandOnRowClick || props.selectOnRowClick) { baseTableProps2.onRowClick = onInnerRowClick; } return createVNode(_BaseTable, mergeProps({ "ref": primaryTableRef }, baseTableProps2, { "class": primaryTableClasses.value, "onLeafColumnsChange": setDragSortColumns }), context.slots); }; } }); export { _PrimaryTable as default }; //# sourceMappingURL=primary-table.js.map