UNPKG

@arco-vue-pro-components/pro-components

Version:
476 lines (475 loc) 13.1 kB
"use strict"; Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } }); var vue = require("vue"); var webVue = require("@arco-design/web-vue"); var getValueByPath = require("../../_utils/get-value-by-path.js"); var is = require("../../_utils/is.js"); var index = require("../default-render/index.js"); var index$2 = require("../status/index.js"); var index$1 = require("../my-tool-tip/index.js"); function _isSlot(s) { return typeof s === "function" || Object.prototype.toString.call(s) === "[object Object]" && !vue.isVNode(s); } function useActionType(actionRef, action, props) { const userAction = { pageInfo: action.pageInfo, reload: async (resetPageIndex) => { if (resetPageIndex) { await props.onCleanSelected(); } action == null ? void 0 : action.reload(); }, getSelected: props.getSelected, reloadAndRest: async () => { props.onCleanSelected(); await action.setPageInfo({ current: 1 }); await (action == null ? void 0 : action.reload()); }, reset: async () => { var _a; await props.resetAll(); await ((_a = action == null ? void 0 : action.reset) == null ? void 0 : _a.call(action)); await (action == null ? void 0 : action.reload()); }, fullScreen: () => props.fullScreen(), getPopupContainer: () => action == null ? void 0 : action.getPopupContainer(), clearSelected: () => props.onCleanSelected(), setPageInfo: (rest) => action.setPageInfo(rest) }; actionRef.value = userAction; } const genColumnKey = (key, index2) => { if (key) { return Array.isArray(key) ? key.join("-") : key.toString(); } return `${index2}`; }; const reduceWidth = (width) => { if (width === void 0) { return width; } if (typeof width === "string") { if (!width.includes("calc")) { return `calc(100% - ${width})`; } return width; } if (typeof width === "number") { return width - 32; } return width; }; const genEllipsis = (dom, item, text) => { if (!item.ellipsis) { return dom; } return vue.createVNode(index$1, { "position": "bottom", "content": text }, { default: () => [vue.createVNode("span", null, [dom])] }); }; const genCopyable = (dom, item) => { if (item.copyable || item.ellipsis) { return vue.createVNode(webVue.TypographyParagraph, { "style": { width: reduceWidth(item.width), margin: 0, padding: 0 }, "copyable": item.copyable, "ellipsis": item.ellipsis }, _isSlot(dom) ? dom : { default: () => [dom] }); } return dom; }; function genProColumnToColumn(props) { const { columns, type, columnEmptyText, action, slots, parentColumnKey } = props; return columns.map((item, columnsIndex) => { const { key, dataIndex, valueType = "text", valueEnum, title, children } = item; const columnKey = genColumnKey(key || (dataIndex == null ? void 0 : dataIndex.toString()), [parentColumnKey, columnsIndex].filter(Boolean).join("-")); const noNeedPro = !valueType && !valueEnum && !children; if (noNeedPro) { return { ...item, key: columnKey, index: columnsIndex }; } const config = { fixed: item.fixed }; const tempColumns = { ellipsis: false, ...item, index: columnsIndex, key: columnKey, title: title && typeof title === "function" ? title(item, "table") : title, fixed: config.fixed, sortable: item.sortable || (item.sorter ? { sortDirections: ["ascend", "descend"], defaultSortOrder: item.defaultSortOrder } : void 0), filterable: item.filterable || (item.filters === true && item.valueEnum ? { filters: parsingValueEnumToArray(ObjToMap(runFunction(valueEnum, void 0))).filter((valueItem) => valueItem && valueItem.value !== "all"), multiple: true, defaultFilteredValue: item.defaultFilteredValue, filter: item.onFilter === true ? (value, record) => { return value.includes(record[item.dataIndex]); } : item.onFilter } : void 0), width: item.width || (item.fixed ? 200 : void 0), children: item.children ? genProColumnToColumn({ ...props, columns: item == null ? void 0 : item.children, parentColumnKey: columnKey }) : void 0, render: (data) => columRender({ item, record: data.record, rowIndex: data.rowIndex, columnEmptyText, action, slots, columnKey }) }; return omitUndefinedAndEmptyArr(tempColumns); }).filter((item) => !item.hideInTable); } function getType(obj) { const type = Object.prototype.toString.call(obj).match(/^\[object (.*)\]$/)[1].toLowerCase(); if (type === "string" && typeof obj === "object") return "object"; if (obj === null) return "null"; if (obj === void 0) return "undefined"; return type; } const ObjToMap = (value) => { if (!value) { return value; } if (getType(value) === "map") { return value; } return new Map(Object.entries(value)); }; const parsingText = (text, valueEnum, pure) => { if (!valueEnum) { return text; } if (!valueEnum.has(text) && !valueEnum.has(`${text}`)) { return text; } const domText = valueEnum.get(text) || valueEnum.get(`${text}`); if (domText.status) { if (pure) { return domText.text; } const { status } = domText; const Status = index$2[status || "Default"]; if (Status) { return Status({ text: domText.text }); } } return domText.text || domText; }; const checkUndefinedOrNull = (value) => value !== void 0 && value !== null; const columRender = ({ item, record, rowIndex, columnEmptyText, action, slots, columnKey }) => { var _a; if (!action.value) { return null; } const text = (_a = getValueByPath.getValueByPath(record, item.dataIndex)) != null ? _a : ""; const { renderText = (val) => val, valueEnum = {} } = item; const renderTextStr = renderText(parsingText(text, ObjToMap(valueEnum)), { record, rowIndex, action: action.value }); const textDom = index["default"](renderTextStr, item.valueType || "text", rowIndex, record, columnEmptyText, item, columnKey); const dom = genEllipsis(genCopyable(textDom, item), item, renderText(parsingText(text, ObjToMap(valueEnum), true), { record, rowIndex, action: action.value })); const data = { dom, column: item, record, rowIndex, action: action.value }; if (item.render) { const renderDom = item.render(data); if (renderDom && item.valueType === "option" && Array.isArray(renderDom)) { return vue.createVNode(webVue.Space, { "class": "pro-table-options" }, { split: () => vue.createVNode(webVue.Divider, { "direction": "vertical" }, null), default: () => renderDom.map((optionDom) => optionDom) }); } return renderDom; } if (!item.slotName && (item.valueType === "index" || item.valueType === "indexBorder")) { return slots.index(data); } if (item.slotName && slots[item.slotName]) { return slots[item.slotName](data); } return checkUndefinedOrNull(dom) ? dom : null; }; const omitUndefinedAndEmptyArr = (obj) => { const newObj = {}; Object.keys(obj || {}).forEach((key) => { var _a; if (Array.isArray(obj[key]) && ((_a = obj[key]) == null ? void 0 : _a.length) === 0) { return; } if (obj[key] === void 0) { return; } newObj[key] = obj[key]; }); return newObj; }; function mergePagination(pagination, pageInfo, setPageInfo, emit) { if (pagination === false) { return false; } const { current, pageSize } = pageInfo.value; const defaultPagination = typeof pagination === "object" ? pagination : {}; return { showTotal: true, showJumper: true, showPageSize: true, hideOnSinglePage: false, pageSizeOptions: [5, 10, 20, 30, 40, 50], ...defaultPagination, ...pageInfo.value, onChange: (page) => { if (current !== page) { setPageInfo({ current: page }); } emit("pageChange", page); }, onPageSizeChange: (newPageSize) => { if (newPageSize !== pageSize) { setPageInfo({ pageSize: newPageSize }); } emit("pageSizeChange", newPageSize); } }; } const columnFixedSort = (a, b) => { const { fixed: aFixed } = a; const { fixed: bFixed } = b; if (aFixed === "left" && bFixed !== "left" || bFixed === "right" && aFixed !== "right") { return -2; } if (bFixed === "left" && aFixed !== "left" || aFixed === "right" && bFixed !== "right") { return 2; } return 0; }; const columnSortOrderSort = (a, b) => { return a.sortOrder - b.sortOrder; }; function loopFilter(column, parentFixed = void 0, columnsMap = {}, isTable = true) { return column.map((item) => { const config = columnsMap.value[item.key] || { fixed: item.fixed }; if (isTable && config && config.show === false) { return false; } const fixed = config.fixed || parentFixed; const sortOrder = config.order === void 0 ? item.index : config.order; if (item.children) { return { ...item, fixed, sortOrder, children: loopFilter(item.children, fixed, columnsMap, isTable) }; } return { ...item, sortOrder, fixed }; }).filter(Boolean).sort(columnFixedSort).sort(columnSortOrderSort); } function formatFormFields(data) { if (!is.isObject(data) || !Object.keys(data).length) { return {}; } const fields = {}; Object.keys(data).forEach((key) => { fields[key] = { value: data[key] }; }); return fields; } const setFields = (defaultFormData, form) => { const fieldsData = formatFormFields(defaultFormData); form.setFields(fieldsData); }; const parsingValueEnumToArray = (valueEnum = /* @__PURE__ */ new Map()) => { const enumArray = []; valueEnum.forEach((_, key) => { if (!valueEnum.has(key) && !valueEnum.has(`${key}`)) { return; } const value = valueEnum.get(key) || valueEnum.get(`${key}`); if (!value) { return; } if (typeof value === "object" && (value == null ? void 0 : value.text)) { enumArray.push({ text: value == null ? void 0 : value.text, label: value == null ? void 0 : value.text, value: key }); return; } enumArray.push({ text: value || "", label: value || "", value: key }); }); return enumArray; }; function runFunction(valueEnum, ...rest) { if (typeof valueEnum === "function") { return valueEnum(...rest); } return valueEnum; } function flattenChildren(arr = [], rowKey) { if (!is.isArray(arr) || !arr.length) { return {}; } let data = {}; for (let item of arr) { if (!item || item[rowKey] == void 0) { continue; } data[item[rowKey]] = item; if (!is.isArray(item.children) || !item.children.length) { continue; } data = { ...data, ...flattenChildren(item.children, rowKey) }; } return data; } typeof process !== "undefined" && process.versions != null && process.versions.node != null; function getArrDiff(distArr, ...rest) { if (!distArr || !is.isArray(distArr) || !distArr.length) { return []; } let restArr = []; for (let i = 0; i < rest.length; i++) { restArr.push(...rest[i]); } const data = [...new Set(restArr)]; return distArr.filter((item) => !data.includes(item)); } function deepClone(obj, map = /* @__PURE__ */ new WeakMap()) { if (typeof obj !== "object" || obj === null) { return obj; } if (obj instanceof Date) { return new Date(obj); } if (obj instanceof RegExp) { return new RegExp(obj); } if (map.has(obj)) { return map.get(obj); } if (vue.isVNode(obj)) { return vue.cloneVNode(obj); } let cloneObj = new obj.constructor(); map.set(obj, cloneObj); for (let key in obj) { if (obj.hasOwnProperty(key)) { cloneObj[key] = deepClone(obj[key], map); } } return cloneObj; } exports.ObjToMap = ObjToMap; exports.checkUndefinedOrNull = checkUndefinedOrNull; exports.columnFixedSort = columnFixedSort; exports.columnSortOrderSort = columnSortOrderSort; exports.deepClone = deepClone; exports.flattenChildren = flattenChildren; exports.formatFormFields = formatFormFields; exports.genColumnKey = genColumnKey; exports.genProColumnToColumn = genProColumnToColumn; exports.getArrDiff = getArrDiff; exports.loopFilter = loopFilter; exports.mergePagination = mergePagination; exports.parsingText = parsingText; exports.parsingValueEnumToArray = parsingValueEnumToArray; exports.reduceWidth = reduceWidth; exports.runFunction = runFunction; exports.setFields = setFields; exports.useActionType = useActionType;