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