UNPKG

linkmore-design

Version:

🌈 🚀lm组件库。🚀

76 lines (68 loc) 2.67 kB
"use strict"; 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;