UNPKG

linkmore-design

Version:

🌈 🚀lm组件库。🚀

231 lines (224 loc) 9.65 kB
"use strict"; var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard").default; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault").default; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _ahooks = require("ahooks"); var _classnames = _interopRequireDefault(require("classnames")); var _isEmpty = _interopRequireDefault(require("lodash/isEmpty")); var _isNil = _interopRequireDefault(require("lodash/isNil")); var _pick = _interopRequireDefault(require("lodash/pick")); var _react = _interopRequireWildcard(require("react")); var _form = _interopRequireDefault(require("../form")); var _LocaleReceiver = _interopRequireDefault(require("../locale-provider/LocaleReceiver")); var _Basic = _interopRequireDefault(require("./components/Basic")); var _Complex = _interopRequireDefault(require("./components/Complex")); var _Custom = _interopRequireDefault(require("./components/Custom")); var _FuzzySearch = _interopRequireDefault(require("./components/FuzzySearch")); var _constants = require("./constants"); var _controls = _interopRequireDefault(require("./controls")); const initialProps = { dataSource: [], // 数据源 enableSearch: true, // 是否启用模糊查询 enableBasic: true, // 是否启用基础筛选 enableComplex: false, // 是否启用高级筛选 enableCustom: false, // 是否启用自定义筛选 customOptions: [], // 自定义筛选下拉项 enableClear: true, // 是否展示一件清空 enableAutoString: true, // 是否自动将筛选结构值转换为字符串 enableUnLimitedPlaceholder: true, // 默认展示不限自定义筛选选项 size: 'middle', // 尺寸 searchConfig: { [_constants.DYNAMIC_ENUM.RELATION]: 'or', [_constants.DYNAMIC_ENUM.OPERATOR]: 'contains', [_constants.DYNAMIC_ENUM.FIELD_TYPE]: 'string' }, placeholder: '', // 搜索占位符 customRender: null // 自定义一级筛选Dom }; const Wrapper = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => { const { enableSearch, enableBasic, dataSource, searchKey, searchConfig, colon, addonBefore, onChange, onValuesChange, onClearChange, onSelect, size } = props; const [form] = _form.default.useForm(); const fuzzyRef = (0, _react.useRef)(); const [isChange, setIsChange] = (0, _react.useState)(false); /** 触发查询 */ const onSearch = (0, _ahooks.useMemoizedFn)(async () => { const values = await form.getFieldsValue(true); /** 重组返回数据 */ const basicFilter = { ...values?.[_constants.FIELD_ENUM.BASIC], conditions: (values?.[_constants.FIELD_ENUM.BASIC]?.[_constants.FIELD_ENUM.CONDITIONS] || [])?.filter(item => !(0, _isNil.default)(item?.[_constants.DYNAMIC_ENUM.VALUE])) }; const searchFilter = { ...values?.[_constants.FIELD_ENUM.SEARCH], conditions: (values?.[_constants.FIELD_ENUM.SEARCH]?.[_constants.FIELD_ENUM.CONDITIONS] || [])?.filter(item => !(0, _isNil.default)(item?.[_constants.DYNAMIC_ENUM.VALUE])) }; const complexFilter = { ...values?.[_constants.FIELD_ENUM.COMPLEX], conditions: (values?.[_constants.FIELD_ENUM.COMPLEX]?.[_constants.FIELD_ENUM.CONDITIONS] || [])?.map(item => { return { ...item, relation: values?.[_constants.FIELD_ENUM.COMPLEX]?.[_constants.FIELD_ENUM.RELATION] }; }) }; const resetValues = { [_constants.FIELD_ENUM.SEARCH]: searchFilter, [_constants.FIELD_ENUM.BASIC]: basicFilter, [_constants.FIELD_ENUM.COMPLEX]: complexFilter, [_constants.FIELD_ENUM.CUSTOM]: values[_constants.FIELD_ENUM.CUSTOM] }; fuzzyRef.current?.setValue?.(resetValues[_constants.FIELD_ENUM.SEARCH]?.[_constants.FIELD_ENUM.CONDITIONS]?.[0]?.[_constants.DYNAMIC_ENUM.VALUE]); await onChange?.(resetValues); }); //若为基础筛选则直接触发查询 const handleValuesChange = (0, _ahooks.useMemoizedFn)((changedValues, values) => { onValuesChange?.(changedValues, values); const isBasic = (_constants.FIELD_ENUM.BASIC in changedValues); const isSearch = (_constants.FIELD_ENUM.SEARCH in changedValues); const isComplex = (_constants.FIELD_ENUM.COMPLEX in changedValues); const isCustom = (_constants.FIELD_ENUM.CUSTOM in changedValues); if (isBasic || isSearch || isCustom) { onSearch(); } if (isBasic || isComplex) { setIsChange(true); } if (isCustom) { setIsChange(false); } }); /** 重组dataSource */ const resetDataSource = (0, _react.useMemo)(() => { if (!Array.isArray(dataSource)) return []; return dataSource.map(item => ({ ...(0, _pick.default)(item, ['title', 'show', 'type', _constants.SOURCE_ENUM.TABLE_OBJ, 'multiple', 'fieldNames', 'placeholder', 'showSearch', 'showAllChecked']), // cascader ...(0, _pick.default)(item, ['showCheckedStrategy']), // datePicker ...(0, _pick.default)(item, ['onOpenChange', 'picker', 'showTime', 'format']), ...(0, _pick.default)(item, ['dependencies']), [_constants.DYNAMIC_ENUM.FIELD_NAME]: item[_constants.SOURCE_ENUM.FIELD_NAME] || item[_constants.DYNAMIC_ENUM.FIELD_NAME], [_constants.DYNAMIC_ENUM.FIELD_TYPE]: item[_constants.SOURCE_ENUM.FIELD_TYPE] || item[_constants.DYNAMIC_ENUM.FIELD_TYPE] || _constants.initialFieldsValue[_constants.DYNAMIC_ENUM.FIELD_TYPE], [_constants.DYNAMIC_ENUM.OPERATOR]: item[_constants.SOURCE_ENUM.OPERATOR] || _constants.initialFieldsValue[_constants.DYNAMIC_ENUM.OPERATOR], [_constants.DYNAMIC_ENUM.RELATION]: item[_constants.SOURCE_ENUM.RELATION] || _constants.initialFieldsValue[_constants.DYNAMIC_ENUM.RELATION], options: item[_constants.SOURCE_ENUM.OPTIONS], colon: item.colon ?? colon })); }, [dataSource]); const initialBasicConditions = (0, _react.useMemo)(() => resetDataSource.filter(item => item.show !== false), [resetDataSource]); const initialFuzzyConditions = (0, _react.useMemo)(() => { const keys = Array.isArray(searchKey) ? searchKey : typeof searchKey === 'string' ? [searchKey] : []; return keys.reduce((pre, cur) => cur ? pre.concat({ ...searchConfig, [_constants.DYNAMIC_ENUM.FIELD_NAME]: cur }) : pre, []); }, [searchKey]); const isEnableSearch = enableSearch && !(0, _isEmpty.default)(searchKey); /** 自定义重置方法 (使用resetFields重置时页面会闪一下) */ const onReset = (0, _ahooks.useMemoizedFn)(async () => { await form.setFieldsValue({ [_constants.FIELD_ENUM.SEARCH]: { relation: _constants.initialFieldsValue[_constants.DYNAMIC_ENUM.RELATION], conditions: initialFuzzyConditions }, [_constants.FIELD_ENUM.BASIC]: { relation: _constants.initialFieldsValue[_constants.DYNAMIC_ENUM.RELATION], conditions: initialBasicConditions }, [_constants.FIELD_ENUM.COMPLEX]: { relation: _constants.initialFieldsValue[_constants.DYNAMIC_ENUM.RELATION], conditions: undefined }, [_constants.FIELD_ENUM.CUSTOM]: undefined }); }); const onClear = (0, _ahooks.useMemoizedFn)(async () => { await onReset(); onClearChange?.(); onSearch?.(); }); // 向外暴露出的方法 (0, _react.useImperativeHandle)(ref, () => ({ ...form, reset: onReset })); return /*#__PURE__*/_react.default.createElement(_form.default, { form: form, component: false, initialValues: { [_constants.FIELD_ENUM.SEARCH]: { [_constants.FIELD_ENUM.RELATION]: _constants.initialFieldsValue[_constants.DYNAMIC_ENUM.RELATION], [_constants.FIELD_ENUM.CONDITIONS]: initialFuzzyConditions }, [_constants.FIELD_ENUM.BASIC]: { [_constants.FIELD_ENUM.RELATION]: _constants.initialFieldsValue[_constants.DYNAMIC_ENUM.RELATION], [_constants.FIELD_ENUM.CONDITIONS]: initialBasicConditions }, [_constants.FIELD_ENUM.COMPLEX]: { [_constants.FIELD_ENUM.RELATION]: _constants.initialFieldsValue[_constants.DYNAMIC_ENUM.RELATION] } }, onValuesChange: handleValuesChange }, /*#__PURE__*/_react.default.createElement("div", { className: (0, _classnames.default)('lm_adv_filter', { [`lm_adv_filter_${size}`]: size }) }, addonBefore, /*#__PURE__*/_react.default.createElement(_Custom.default, (0, _extends2.default)({}, props, { onSelect: onSelect, isChange: isChange, dataSource: resetDataSource })), isEnableSearch && /*#__PURE__*/_react.default.createElement(_FuzzySearch.default, (0, _extends2.default)({}, props, { ref: fuzzyRef })), enableBasic && /*#__PURE__*/_react.default.createElement(_Basic.default, { dataSource: resetDataSource }), /*#__PURE__*/_react.default.createElement(_Complex.default, (0, _extends2.default)({}, props, { onSearch: onSearch, onClear: onClear, dataSource: resetDataSource })))); }); const AdvancedFilter = /*#__PURE__*/(0, _react.forwardRef)((props, ref) => { const defaultRef = (0, _react.useRef)(null); const resetProps = { ...initialProps, ...props }; return /*#__PURE__*/_react.default.createElement(_LocaleReceiver.default, { componentName: "AdvancedFilter" }, contextLocale => /*#__PURE__*/_react.default.createElement(Wrapper, (0, _extends2.default)({ ref: ref || defaultRef }, resetProps, { locale: contextLocale }))); }); AdvancedFilter.Control = _controls.default; var _default = AdvancedFilter; exports.default = _default;