UNPKG

@cainiaofe/cn-ui-m

Version:
147 lines (146 loc) 6.96 kB
import * as React from 'react'; // 从children中找出快捷筛选的项 export var useSplitFilter = function (filter) { var _a = React.useState([null, null, null, null]), result = _a[0], setResult = _a[1]; React.useEffect(function () { if (!filter) { setResult([null, null, null, null]); return; } var normalFilterChild = []; var searchChild = []; var quickFilterChild = []; var quickNoWrapFilterChild = []; filter.forEach(function (child) { var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q; if (React.isValidElement(child)) { var childProps = (child.props || {}); var isQuickFilter = childProps.quick || ((_a = childProps.mobileProps) === null || _a === void 0 ? void 0 : _a.quick); // 黑名单模式,解决不支持快捷筛选的组件配置quick后不显示的问题 if (isQuickFilter) { if ([ 'CnInput', 'CnSwitch', 'CnInputTextArea', 'CnNumberPicker', ].includes((_c = (_b = child.props.children) === null || _b === void 0 ? void 0 : _b.type) === null || _c === void 0 ? void 0 : _c.displayName)) { normalFilterChild.push(child); return; } if (((_e = (_d = child.props.children) === null || _d === void 0 ? void 0 : _d.type) === null || _e === void 0 ? void 0 : _e.displayName) === 'CnSelector') { quickNoWrapFilterChild.push(cnSelectorQuickItemRender(child)); } else if (((_g = (_f = child.props.children) === null || _f === void 0 ? void 0 : _f.type) === null || _g === void 0 ? void 0 : _g.displayName) === 'CnCheckboxGroup') { quickNoWrapFilterChild.push(cnCheckboxGroupQuickItemRender(child)); } else if (((_j = (_h = child.props.children) === null || _h === void 0 ? void 0 : _h.type) === null || _j === void 0 ? void 0 : _j.displayName) === 'CnRadioGroup') { quickNoWrapFilterChild.push(cnRadioGroupQuickItemRender(child)); } else if ([ 'CnDatePicker', 'CnDatePickerPro', 'CnMonthPickerPro', 'CnYearPickerPro', 'CnWeekPickerPro', ].includes((_l = (_k = child.props.children) === null || _k === void 0 ? void 0 : _k.type) === null || _l === void 0 ? void 0 : _l.displayName)) { quickFilterChild.push(cnDatePickerQuickItemRender(child)); } else if (['CnRangeDatePickerPro', 'CnDateRangePickerPro'].includes((_o = (_m = child.props.children) === null || _m === void 0 ? void 0 : _m.type) === null || _o === void 0 ? void 0 : _o.displayName)) { quickFilterChild.push(cnDateRangePickerQuickItemRender(child)); } else { quickFilterChild.push(cnSelectQuickItemRender(child)); } } else if (((_q = (_p = child.props.children) === null || _p === void 0 ? void 0 : _p.type) === null || _q === void 0 ? void 0 : _q.displayName) === 'CnSearch') { searchChild.push(cnSelectorQuickItemRender(child)); } else { normalFilterChild.push(child); } } }); setResult([ quickFilterChild.map(function (item, i) { var _a; return (React.createElement("div", { key: "".concat(Date.now() + i), className: "cn-ui-m-filter-quick-filter-wrapper" }, React.createElement("div", { className: "cn-ui-m-filter-quick-filter", style: (_a = item === null || item === void 0 ? void 0 : item.props) === null || _a === void 0 ? void 0 : _a.style }, item))); }), quickNoWrapFilterChild, normalFilterChild, searchChild.map(function (item, i) { return (React.createElement("div", { key: "".concat(Date.now() + i), className: "cn-ui-m-filter-search" }, item)); }), ]); }, [filter.length]); return result; }; var cnSelectQuickItemRender = function (child) { // CnSelect 实例 var itemChildren = child.props.children; // const newSelectField = React.useMemo(() => { return React.cloneElement(child, { name: child.props.name, decorator: [], children: React.cloneElement(itemChildren, { placeholder: child.props.label || child.props.title, insideFilter: true, }), }); // }, [child, itemChildren]); // 依赖项 // return newSelectField; }; var cnSelectorQuickItemRender = function (child) { var itemChildren = child.props.children; return React.cloneElement(child, { name: child.props.name, decorator: [], children: React.cloneElement(itemChildren, { cnBoxProps: { wrap: false }, }), }); }; var cnCheckboxGroupQuickItemRender = function (child) { var itemChildren = child.props.children; return React.cloneElement(child, { name: child.props.name, decorator: [], children: React.cloneElement(itemChildren, { shape: 'tag', direction: 'hoz', }), }); }; var cnRadioGroupQuickItemRender = function (child) { var _a, _b, _c; var itemChildren = child.props.children; return React.cloneElement(child, { name: child.props.name, decorator: [], children: React.cloneElement(itemChildren, { shape: ((_c = (_b = (_a = child.props) === null || _a === void 0 ? void 0 : _a.children) === null || _b === void 0 ? void 0 : _b.props) === null || _c === void 0 ? void 0 : _c.shape) || 'tag', direction: 'hoz', className: 'cn-ui-m-filter-quick-filter-radio-group--max-width', }), }); }; var cnDatePickerQuickItemRender = function (child) { var itemChildren = child.props.children; return React.cloneElement(child, { name: child.props.name, decorator: [], children: React.cloneElement(itemChildren, { placeholder: child.props.label || child.props.title, insideFilter: true, }), }); }; var cnDateRangePickerQuickItemRender = function (child) { var itemChildren = child.props.children; return React.cloneElement(child, { name: child.props.name, decorator: [], children: React.cloneElement(itemChildren, { placeholder: child.props.label || child.props.title, insideFilter: true, }), }); };