linkmore-design
Version:
🌈 🚀lm组件库。🚀
72 lines (64 loc) • 2.58 kB
JavaScript
import _typeof from "@babel/runtime/helpers/esm/typeof";
import React, { useMemo } from 'react';
// 获取数组
export function getArray(val) {
if (!val) return [];
return Array.isArray(val) ? val : [val];
}
// 判断是否符合options格式
export var isOptions = function isOptions(key) {
return ['label', 'value'].includes(key);
};
// 查询搜索, 都转成小写用于匹配
export var onStringSearch = function onStringSearch() {
var key = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';
var str = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
return str.toLowerCase().includes(key.toLowerCase());
};
// 将options和children都转成options
export function getOptions(children) {
var array = getArray(children);
return array.map(function (item) {
if (Object.keys(item).every(isOptions)) return item;
return {
label: item.props.children,
value: item.props.value,
disabled: !!item.props.disabled
};
});
}
// 检查是否存在内容
export function getIsHas(val) {
// 检查是否数字类型, 是否布尔类型
var flag = !!val || typeof val === 'number' || typeof val === 'boolean';
// 检查空对象和空数组
if (!!val && _typeof(val) === 'object') {
var _Object$keys;
flag = Array.isArray(val) ? !!val.length : !!((_Object$keys = Object.keys(val)) !== null && _Object$keys !== void 0 && _Object$keys.length);
}
return flag;
}
// 检查是否类组件
export function isClassComponent(component) {
return typeof component === 'function' && function () {
var proto = Object.getPrototypeOf(component);
return proto.prototype && proto.prototype.isReactComponent;
}();
}
// 检查是否自定义组件
export function isExoticComponent(component) {
return _typeof(component) === 'object' && _typeof(component.$$typeof) === 'symbol' && ['react.memo', 'react.forward_ref'].includes(component.$$typeof.description);
}
// 检查是否React组件
export function isReactComponent(component) {
return isClassComponent(component) || typeof component === 'function' || isExoticComponent(component);
}
export var render = function render(Comp) {
var props = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return !Comp ? null : isReactComponent(Comp) ? /*#__PURE__*/React.createElement(Comp, props) : Comp;
};
export var useSearch = function useSearch(showSearch, renderOptions) {
return useMemo(function () {
return showSearch || renderOptions.length > 8;
}, [renderOptions.length, showSearch]);
};