UNPKG

plus-pro-components

Version:

Page level components developed based on Element Plus.

121 lines (118 loc) 4.13 kB
import { version } from 'element-plus/es/version'; import { get, set } from 'lodash-es'; import { unref, isRef } from 'vue'; import { isBoolean, isString, isPlainObject, toRawType, isFunction, isPromise, isEmptyObject } from './is.mjs'; export { isArray, isDate, isMap, isObject, isRegExp, isSVGElement, isSet, isSymbol, isUrl, objectToString, toTypeString } from './is.mjs'; export { formatDate, formatMoney } from './format.mjs'; const getTableKey = (item, hasEditable = false) => hasEditable && isBoolean(item.editable) ? item.label + item.prop + item.editable : item.label + item.prop; const getTooltip = (tooltip) => { const tooltipData = unref(tooltip); if (isString(tooltipData)) { return { content: tooltipData }; } if (isPlainObject(tooltipData)) { return tooltipData; } return { content: "" }; }; const throwError = (data, type) => { if (!isPlainObject(data)) { throw new Error(`${type} expected Object but got ${toRawType(data)}`); } }; const getCustomProps = async (props, value, row, index, type) => { try { let data = {}; const params = { row, index }; if (!props) { data = {}; } else if (isRef(props)) { data = props.value; } else if (isPlainObject(props)) { data = { ...props }; } else if (isFunction(props)) { data = await props(value, params); } else if (isPromise(props)) { data = await props; } else { data = props; } throwError(data, type); return data; } catch (error) { return Promise.reject(error); } }; const handleSlots = (slots, value, params) => { if (!slots || !isPlainObject(slots) || isEmptyObject(slots)) { return {}; } const slotsRes = {}; if (slots && !isEmptyObject(slots)) { Object.keys(slots).forEach((key) => { const temp = (...arg) => { return () => slots[key](...arg); }; slotsRes[key] = temp(value, params); }); } return slotsRes; }; const getSlotName = (type, prop) => { return prop ? `plus-${type}-${prop}` : `plus-${type}`; }; const getFieldSlotName = (prop) => { return `${getSlotName("field", prop)}`; }; const getLabelSlotName = (prop) => { return `${getSlotName("label", prop)}`; }; const getExtraSlotName = (prop) => { return `${getSlotName("extra", prop)}`; }; const getTableHeaderSlotName = (prop) => { return `${getSlotName("header", prop)}`; }; const getTableCellSlotName = (prop) => { return `${getSlotName("cell", prop)}`; }; const getDescSlotName = (prop) => { return `${getSlotName("desc", prop)}`; }; const getDescLabelSlotName = (prop) => { return `${getSlotName("desc-label", prop)}`; }; const filterSlots = (slots, name) => { const data = {}; Object.keys(slots || {}).forEach((key) => { if (key.startsWith(name)) { data[key] = slots[key]; } }); return data; }; const getValue = (target, key) => { return get(target, key); }; const setValue = (target, key, value) => { return set(target, key, value); }; const compareVersion = (version1, version2) => { const arr1 = version1.split(".").map((item) => Number(item)); const arr2 = version2.split(".").map((item) => Number(item)); const length = Math.max(arr1.length, arr2.length); for (let i = 0; i < length; i++) { if ((arr1[i] || 0) > (arr2[i] || 0)) return 1; if ((arr1[i] || 0) < (arr2[i] || 0)) return -1; } return 0; }; const versionIsLessThan260 = compareVersion(version, "2.6.0") < 0; const versionIsLessThan299 = compareVersion(version, "2.9.9") < 0; const getLabel = (label) => label ? unref(label) : ""; const removeChildrenField = (item) => { const { children, ...rest } = item; const data = { ...rest, __children: children }; return data; }; export { compareVersion, filterSlots, getCustomProps, getDescLabelSlotName, getDescSlotName, getExtraSlotName, getFieldSlotName, getLabel, getLabelSlotName, getSlotName, getTableCellSlotName, getTableHeaderSlotName, getTableKey, getTooltip, getValue, handleSlots, isBoolean, isEmptyObject, isFunction, isPlainObject, isPromise, isString, removeChildrenField, setValue, toRawType, versionIsLessThan260, versionIsLessThan299 };