UNPKG

linkmore-design

Version:

🌈 🚀lm组件库。🚀

604 lines (582 loc) 22.9 kB
import _defineProperty from "@babel/runtime/helpers/esm/defineProperty"; import _toConsumableArray from "@babel/runtime/helpers/esm/toConsumableArray"; import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2"; import { useCallback } from 'react'; import { getFilterShow, getIsHas, getValueForType } from "../utils"; // 初始化查询结构 export var initLocalization = function initLocalization(props) { var _globalQuery$filters, _globalQuery$filters$, _fuzzyQuery$filters, _fuzzyQuery$filters$, _filterQuery$filters, _filterQuery$filters$; var localization = props.localization, dataSource = props.dataSource, searchKey = props.searchKey, searchConfig = props.searchConfig, customOptions = props.customOptions; var globalQuery = localization.globalQuery, filterQuery = localization.filterQuery, fuzzyQuery = localization.fuzzyQuery; var basicFilter = (localization === null || localization === void 0 ? void 0 : localization.basicFilter) || {}; var basicQuery = {}; // 存储查询结构 var isFuzzy = Array.isArray(searchKey); // 数组时为模糊搜索结构 var searchFilter = (localization === null || localization === void 0 ? void 0 : localization.fuzzyFilter) || {}; var searchQuery = {}; // 模糊查询结构 var customFilter = (customOptions === null || customOptions === void 0 ? void 0 : customOptions.find(function (v) { var _localization$customF; return (v === null || v === void 0 ? void 0 : v.value) === (localization === null || localization === void 0 ? void 0 : (_localization$customF = localization.customFilter) === null || _localization$customF === void 0 ? void 0 : _localization$customF.value); })) || {}; var customQuery = {}; // 自定义筛选存储结构 // 一级查询 if (globalQuery !== null && globalQuery !== void 0 && (_globalQuery$filters = globalQuery.filters) !== null && _globalQuery$filters !== void 0 && (_globalQuery$filters$ = _globalQuery$filters[0]) !== null && _globalQuery$filters$ !== void 0 && _globalQuery$filters$.conditions) { var _globalQuery$filters2, _globalQuery$filters3; var globalQueryArr = (globalQuery === null || globalQuery === void 0 ? void 0 : (_globalQuery$filters2 = globalQuery.filters) === null || _globalQuery$filters2 === void 0 ? void 0 : (_globalQuery$filters3 = _globalQuery$filters2[0]) === null || _globalQuery$filters3 === void 0 ? void 0 : _globalQuery$filters3.conditions) || []; customQuery = globalQueryArr.reduce(function (pre, cur) { var checkedValue = cur.value; // 选中的数据 // 查找该数据是否展示 if (getIsHas(checkedValue)) { pre[cur.fieldName] = cur; } return pre; }, {}); } // 模糊查询 if (getIsHas(searchFilter)) { var _Object$keys; searchQuery = (_Object$keys = Object.keys(searchFilter)) === null || _Object$keys === void 0 ? void 0 : _Object$keys.reduce(function (pre, cur) { if (getIsHas(searchFilter[cur])) { pre[cur] = _objectSpread(_objectSpread({}, searchConfig), {}, { fieldName: cur, value: [searchFilter[cur]] }); } return pre; }, {}); } else if (fuzzyQuery !== null && fuzzyQuery !== void 0 && (_fuzzyQuery$filters = fuzzyQuery.filters) !== null && _fuzzyQuery$filters !== void 0 && (_fuzzyQuery$filters$ = _fuzzyQuery$filters[0]) !== null && _fuzzyQuery$filters$ !== void 0 && _fuzzyQuery$filters$.conditions) { var _fuzzyQuery$filters2, _fuzzyQuery$filters2$; var fuzzyQueryArr = (fuzzyQuery === null || fuzzyQuery === void 0 ? void 0 : (_fuzzyQuery$filters2 = fuzzyQuery.filters) === null || _fuzzyQuery$filters2 === void 0 ? void 0 : (_fuzzyQuery$filters2$ = _fuzzyQuery$filters2[0]) === null || _fuzzyQuery$filters2$ === void 0 ? void 0 : _fuzzyQuery$filters2$.conditions) || []; // 初始化基础查询缓存 searchFilter = fuzzyQueryArr.reduce(function (pre, cur) { var checkedValue = cur.value; // 选中的数据 if (getIsHas(checkedValue)) { searchQuery[cur.fieldName] = cur; pre[cur.fieldName] = checkedValue[0]; } return pre; }, {}); } // 二级查询 if (getIsHas(basicFilter)) { var _Object$keys2; basicQuery = (_Object$keys2 = Object.keys(basicFilter)) === null || _Object$keys2 === void 0 ? void 0 : _Object$keys2.reduce(function (pre, cur) { var item = dataSource.find(function (v) { if (cur === v.field) { return v.show || typeof v.show !== 'boolean'; } return false; }); if (!isFuzzy && cur === searchKey) { item = { field: searchKey, operator: 'contains', fieldType: 'string' }; } if (getIsHas(basicFilter[cur]) && !!item) { var _item, _item2; pre[cur] = { fieldName: cur, fieldType: ((_item = item) === null || _item === void 0 ? void 0 : _item.valueType) || 'string', value: Array.isArray(basicFilter[cur]) ? basicFilter[cur] : [basicFilter[cur]], operator: ((_item2 = item) === null || _item2 === void 0 ? void 0 : _item2.operator) || 'equal' }; } return pre; }, {}); } else if (filterQuery !== null && filterQuery !== void 0 && (_filterQuery$filters = filterQuery.filters) !== null && _filterQuery$filters !== void 0 && (_filterQuery$filters$ = _filterQuery$filters[0]) !== null && _filterQuery$filters$ !== void 0 && _filterQuery$filters$.conditions) { var _filterQuery$filters2, _filterQuery$filters3; var filterQueryArr = (filterQuery === null || filterQuery === void 0 ? void 0 : (_filterQuery$filters2 = filterQuery.filters) === null || _filterQuery$filters2 === void 0 ? void 0 : (_filterQuery$filters3 = _filterQuery$filters2[0]) === null || _filterQuery$filters3 === void 0 ? void 0 : _filterQuery$filters3.conditions) || []; // 初始化基础查询缓存 basicFilter = filterQueryArr.reduce(function (pre, cur) { var checkedValue = cur.value; // 选中的数据 // 是否搜索框 var isSearchInput = cur.fieldName === searchKey; // 查找该数据是否展示 var someData = dataSource.some(function (v) { if (cur.fieldName === v.field) { return v.show || typeof v.show !== 'boolean'; } return false; }); if (getIsHas(checkedValue) && someData || isSearchInput) { basicQuery[cur.fieldName] = cur; // 复选/级联/日期区间 if (!['checkbox', 'cascader'].includes(cur.type) && checkedValue.length < 2) { checkedValue = checkedValue[0]; } pre[cur.fieldName] = checkedValue; } return pre; }, {}); } return { searchFilter: searchFilter, searchQuery: searchQuery, basicFilter: basicFilter, basicQuery: basicQuery, customFilter: customFilter, customQuery: customQuery }; }; // 核心参数集合 var useCoreOptions = function useCoreOptions(_ref) { var state = _ref.state, dispatch = _ref.dispatch, props = _ref.props; var onChange = props.onChange, dataSource = props.dataSource, searchKey = props.searchKey, searchConfig = props.searchConfig, customOptions = props.customOptions, enableAutoString = props.enableAutoString; // 获取是否存在过滤值 var getHasFilter = useCallback(function () { return getIsHas(state.basicFilter) || getIsHas(state.searchFilter); }, [state.basicFilter, state.searchFilter]); // 转换一级查询结构 object => array var tranformGlobalQuery = useCallback(function (obj) { var _Object$keys3; var nArr = ((_Object$keys3 = Object.keys(obj)) === null || _Object$keys3 === void 0 ? void 0 : _Object$keys3.reduce(function (pre, cur) { var item = dataSource.find(function (v) { return cur === v.field; }); var itemValue = obj[cur].value; if (getIsHas(itemValue) && !!item) { return [].concat(_toConsumableArray(pre), [{ relation: obj[cur].mode || 'and', fieldName: cur, fieldType: (item === null || item === void 0 ? void 0 : item.valueType) || 'string', type: item.type, value: Array.isArray(itemValue) ? itemValue : [itemValue], /** * and 等同于逻辑关系contains: 选中的值包含所有值 * or 等同于逻辑关系in: 选中的值存在于所有值之中 */ operator: 'in' }]); } return pre; }, [])) || []; return nArr; }, [dataSource]); // 转行查询结构 var tranformQuery = useCallback(function (_ref2) { var _Object$keys4, _Object$keys5; var customFilter = _ref2.customFilter, _ref2$searchQuery = _ref2.searchQuery, searchQuery = _ref2$searchQuery === void 0 ? {} : _ref2$searchQuery, _ref2$basicQuery = _ref2.basicQuery, basicQuery = _ref2$basicQuery === void 0 ? {} : _ref2$basicQuery; var globalQuery = { filters: [{ conditions: tranformGlobalQuery(customFilter === null || customFilter === void 0 ? void 0 : customFilter.data) }] }; var fuzzyQuery = { filters: [{ conditions: (_Object$keys4 = Object.keys(searchQuery)) === null || _Object$keys4 === void 0 ? void 0 : _Object$keys4.map(function (k) { return searchQuery[k]; }) }] }; var filterQuery = { filters: [{ conditions: (_Object$keys5 = Object.keys(basicQuery)) === null || _Object$keys5 === void 0 ? void 0 : _Object$keys5.map(function (k) { return basicQuery[k]; }) }] }; return { globalQuery: globalQuery, fuzzyQuery: fuzzyQuery, filterQuery: filterQuery }; }, [tranformGlobalQuery]); // 触发查询 type basic基础筛选 | complex高级筛选 var onQuery = useCallback(function () { var _ref3 = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, _ref3$complexFilter = _ref3.complexFilter, complexFilter = _ref3$complexFilter === void 0 ? {} : _ref3$complexFilter, _ref3$type = _ref3.type, type = _ref3$type === void 0 ? 'basic' : _ref3$type, _ref3$basicFilter = _ref3.basicFilter, basicFilter = _ref3$basicFilter === void 0 ? state.basicFilter || {} : _ref3$basicFilter, _ref3$basicQuery = _ref3.basicQuery, basicQuery = _ref3$basicQuery === void 0 ? state.basicQuery || {} : _ref3$basicQuery, _ref3$searchFilter = _ref3.searchFilter, searchFilter = _ref3$searchFilter === void 0 ? state.searchFilter || {} : _ref3$searchFilter, _ref3$searchQuery = _ref3.searchQuery, searchQuery = _ref3$searchQuery === void 0 ? state.searchQuery || {} : _ref3$searchQuery, _ref3$customFilter = _ref3.customFilter, customFilter = _ref3$customFilter === void 0 ? state.customFilter || {} : _ref3$customFilter; if (type === 'custom') { dispatch({ type: 'changeCustomFilter', customFilter: customFilter }); var _tranformQuery = tranformQuery({ customFilter: customFilter, searchQuery: searchQuery, basicQuery: basicQuery }), globalQuery = _tranformQuery.globalQuery, fuzzyQuery = _tranformQuery.fuzzyQuery, filterQuery = _tranformQuery.filterQuery; onChange === null || onChange === void 0 ? void 0 : onChange({ fuzzyFilter: searchFilter, fuzzyQuery: fuzzyQuery, basicFilter: basicFilter, globalQuery: globalQuery, filterQuery: filterQuery, type: 'custom' }); } if (type === 'search') { dispatch({ type: 'changeSearchFilter', searchFilter: searchFilter }); dispatch({ type: 'changeSearchQuery', searchQuery: searchQuery }); dispatch({ type: 'changeComplexFilter', complexFilter: {} }); // 基础筛选清空高级筛选 // 抛出给外部查询 var _tranformQuery2 = tranformQuery({ customFilter: customFilter, searchQuery: searchQuery, basicQuery: basicQuery }), _globalQuery = _tranformQuery2.globalQuery, _fuzzyQuery = _tranformQuery2.fuzzyQuery, _filterQuery = _tranformQuery2.filterQuery; onChange === null || onChange === void 0 ? void 0 : onChange({ fuzzyFilter: searchFilter, basicFilter: basicFilter, fuzzyQuery: _fuzzyQuery, globalQuery: _globalQuery, filterQuery: _filterQuery, type: 'search' }); } if (type === 'basic') { dispatch({ type: 'changeBasicFilter', basicFilter: basicFilter }); dispatch({ type: 'changeBasicQuery', basicQuery: basicQuery }); dispatch({ type: 'changeComplexFilter', complexFilter: {} }); // 基础筛选清空高级筛选 // 抛出给外部查询 var _tranformQuery3 = tranformQuery({ customFilter: customFilter, searchQuery: searchQuery, basicQuery: basicQuery }), _globalQuery2 = _tranformQuery3.globalQuery, _fuzzyQuery2 = _tranformQuery3.fuzzyQuery, _filterQuery2 = _tranformQuery3.filterQuery; onChange === null || onChange === void 0 ? void 0 : onChange({ fuzzyFilter: searchFilter, basicFilter: basicFilter, fuzzyQuery: _fuzzyQuery2, globalQuery: _globalQuery2, filterQuery: _filterQuery2, type: 'basic' }); } if (type === 'complex') { var _Object$keys6; // eslint-disable-next-line no-shadow var _basicQuery = (_Object$keys6 = Object.keys(complexFilter)) === null || _Object$keys6 === void 0 ? void 0 : _Object$keys6.reduce(function (pre, cur) { var item = dataSource.find(function (v) { return cur === v.field; }); var itemValue = complexFilter[cur].value; if (getIsHas(itemValue) && !!item) { // eslint-disable-next-line no-param-reassign pre[cur] = { relation: complexFilter[cur].mode || 'and', fieldName: cur, fieldType: (item === null || item === void 0 ? void 0 : item.valueType) || 'string', type: item.type, value: Array.isArray(itemValue) ? itemValue : [itemValue], operator: 'in' }; } return pre; }, {}); dispatch({ type: 'changeSearchFilter', searchFilter: {} }); dispatch({ type: 'changeSearchQuery', searchQuery: {} }); dispatch({ type: 'changeBasicFilter', basicFilter: {} }); dispatch({ type: 'changeComplexFilter', complexFilter: complexFilter }); dispatch({ type: 'changeComplexDrawer', complexDrawer: { data: {}, visible: false } }); dispatch({ type: 'changeBasicQuery', basicQuery: _basicQuery }); var _tranformQuery4 = tranformQuery({ customFilter: customFilter, basicQuery: _basicQuery }), _globalQuery3 = _tranformQuery4.globalQuery, _filterQuery3 = _tranformQuery4.filterQuery; onChange === null || onChange === void 0 ? void 0 : onChange({ complexFilter: complexFilter, globalQuery: _globalQuery3, filterQuery: _filterQuery3, type: type }); } if (type === 'clear') { dispatch({ type: 'reset' }); var _tranformQuery5 = tranformQuery({ customFilter: customFilter, searchQuery: searchQuery, basicQuery: basicQuery }), _globalQuery4 = _tranformQuery5.globalQuery, _fuzzyQuery3 = _tranformQuery5.fuzzyQuery, _filterQuery4 = _tranformQuery5.filterQuery; onChange === null || onChange === void 0 ? void 0 : onChange({ fuzzyFilter: searchFilter, basicFilter: basicFilter, fuzzyQuery: _fuzzyQuery3, globalQuery: _globalQuery4, filterQuery: _filterQuery4, type: 'clear' }); } }, [tranformQuery, state]); // 清除事件 var onClearChange = useCallback(function () { var _props$onClearChange; var params = { searchFilter: {}, searchQuery: {}, basicFilter: {}, complexFilter: {}, basicQuery: {}, type: 'clear' }; (_props$onClearChange = props.onClearChange) === null || _props$onClearChange === void 0 ? void 0 : _props$onClearChange.call(props, params); onQuery(params); }, [onQuery]); // 根据字段查找过滤的数据, 不存在时返回默认值 var getFilterValue = useCallback(function (_ref4) { var field = _ref4.field, type = _ref4.type; if (getIsHas(state.basicFilter[field])) { return state.basicFilter[field]; } var defaultValue = getValueForType(type); return state.basicFilter[field] || defaultValue; }, [state.basicFilter]); // 获取查询结构 var getFilterQuery = useCallback(function () { var originData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : dataSource; var basicFilter = getFilterShow(state.basicFilter, originData); var basicQuery = getFilterShow(state.basicQuery, originData); dispatch({ type: 'changeBasicFilter', basicFilter: basicFilter }); dispatch({ type: 'changeBasicQuery', basicQuery: basicQuery }); var _tranformQuery6 = tranformQuery({ customFilter: state.customFilter, searchQuery: state.searchQuery, basicQuery: basicQuery }), globalQuery = _tranformQuery6.globalQuery, fuzzyQuery = _tranformQuery6.fuzzyQuery, filterQuery = _tranformQuery6.filterQuery; return { fuzzyFilter: state.searchFilter, basicFilter: basicFilter, fuzzyQuery: fuzzyQuery, globalQuery: globalQuery, filterQuery: filterQuery, type: 'basic' }; }, [state, dataSource]); /* * 设置筛选的值 itemValue => String || Array => ['', '', ...] * 后端仅接受数组包字符串形式, 不接受数值及布尔值 */ var setFilterValue = useCallback(function (itemValue, item) { var field = item.field; if (field) { // 将结果转换为字符串(级联数据需要递归) var transformString = function transformString(val) { return Array.isArray(val) ? val.map(function (v) { return transformString(v); }) : String(val); }; var stringValue = enableAutoString ? transformString(itemValue) : itemValue; // 基础查询数据(受控数据) var basicFilter = _objectSpread(_objectSpread({}, state.basicFilter), {}, _defineProperty({}, field, stringValue)); // 外部查询数据结构 var basicQuery = _objectSpread(_objectSpread({}, state.basicQuery), {}, _defineProperty({}, field, { fieldName: field, fieldType: item.valueType || 'string', type: item.type, value: Array.isArray(itemValue) ? stringValue : [stringValue], operator: item.operator || 'equal' })); // 数据清除时不返回结构体 if (!getIsHas(itemValue)) { delete basicFilter[field]; delete basicQuery[field]; } // 触发外部事件 onQuery === null || onQuery === void 0 ? void 0 : onQuery({ basicFilter: basicFilter, basicQuery: basicQuery, type: 'basic' }); } }, [state]); // 单个设置过滤字段值, 会触发onChange事件, 多个字段时使用setLocalization var setFilterFieldValue = useCallback(function (field, value) { var item = dataSource.find(function (v) { return v.fidld === field; }) || {}; setFilterValue === null || setFilterValue === void 0 ? void 0 : setFilterValue(value, item); }, [dataSource]); // 读取缓存 var setLocalization = useCallback(function () { var localization = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : props.localization; var _initLocalization = initLocalization(_objectSpread(_objectSpread({}, props), {}, { localization: localization })), searchFilter = _initLocalization.searchFilter, searchQuery = _initLocalization.searchQuery, basicFilter = _initLocalization.basicFilter, basicQuery = _initLocalization.basicQuery, customFilter = _initLocalization.customFilter, customQuery = _initLocalization.customQuery; dispatch({ type: 'changeSearchFilter', searchFilter: searchFilter }); dispatch({ type: 'changeSearchQuery', searchQuery: searchQuery }); dispatch({ type: 'changeBasicFilter', basicFilter: basicFilter }); dispatch({ type: 'changeBasicQuery', basicQuery: basicQuery }); dispatch({ type: 'changeCustomFilter', customFilter: customFilter }); dispatch({ type: 'changeCustomQuery', customQuery: customQuery }); }, [props]); // 模糊查询结构 var setSearchFilter = useCallback(function (itemValue) { var searchFilter = searchKey === null || searchKey === void 0 ? void 0 : searchKey.reduce(function (pre, cur) { pre[cur] = itemValue; return pre; }, _objectSpread({}, state.searchFilter)); var searchQuery = searchKey === null || searchKey === void 0 ? void 0 : searchKey.reduce(function (pre, cur) { pre[cur] = _objectSpread(_objectSpread({}, searchConfig), {}, { fieldName: cur, value: [itemValue] }); return pre; }, _objectSpread({}, state.searchQuery)); // 数据清除时不返回结构体 if (!getIsHas(itemValue)) { searchFilter = {}; searchQuery = {}; } onQuery({ searchFilter: searchFilter, searchQuery: searchQuery, type: 'search' }); }, [searchKey, state]); // 自定义筛选查询 var setCustomFilter = useCallback(function (val) { var customFilter = customOptions.find(function (v) { return v.value === val; }); onQuery({ customFilter: customFilter, type: 'custom' }); }, [customOptions, state.basicFilter]); // 组件内部使用 var CoreMethods = { onQuery: onQuery, setCustomFilter: setCustomFilter, setSearchFilter: setSearchFilter }; // 参与Ref转发 var RefMethods = { getState: function getState() { return state; }, getBasicFilter: function getBasicFilter() { return state.basicFilter; }, getFilterValue: getFilterValue, getFilterQuery: getFilterQuery, getHasFilter: getHasFilter, setFilterValue: setFilterValue, setFilterFieldValue: setFilterFieldValue, setLocalization: setLocalization, onClearChange: onClearChange }; return { CoreMethods: CoreMethods, RefMethods: RefMethods }; }; export default useCoreOptions;