plus-pro-components
Version:
Page level components developed based on Element Plus.
121 lines (118 loc) • 4.13 kB
JavaScript
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 };