linkmore-design
Version:
🌈 🚀lm组件库。🚀
177 lines (169 loc) • 5.54 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/esm/slicedToArray";
import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
// 根文件 => 参数聚合
import React, { useReducer, useMemo, forwardRef, useImperativeHandle } from 'react';
import LmFilterWrapper from "./FilterWrapper";
import useCoreOptions, { initLocalization } from "../filterFns";
var reducer = function reducer(state, action) {
var searchFilter = action.searchFilter,
searchQuery = action.searchQuery,
basicFilter = action.basicFilter,
basicQuery = action.basicQuery,
customFilter = action.customFilter,
customQuery = action.customQuery,
resize = action.resize,
rows = action.rows,
complexDrawer = action.complexDrawer,
valueDrawer = action.valueDrawer,
complexFilter = action.complexFilter,
customDrawer = action.customDrawer,
saveModal = action.saveModal;
switch (action.type) {
case 'changeSearchFilter':
// 模糊查询
return _objectSpread(_objectSpread({}, state), {}, {
searchFilter: searchFilter
});
case 'changeSearchQuery':
// 模糊查询
return _objectSpread(_objectSpread({}, state), {}, {
searchQuery: searchQuery
});
case 'changeBasicFilter':
// 基础筛选数据改变
return _objectSpread(_objectSpread({}, state), {}, {
basicFilter: basicFilter
});
case 'changeBasicQuery':
// 基础筛选数据改变
return _objectSpread(_objectSpread({}, state), {}, {
basicQuery: basicQuery
});
case 'changeCustomFilter':
// 自定义筛选数据改变
return _objectSpread(_objectSpread({}, state), {}, {
customFilter: _objectSpread(_objectSpread({}, state.customFilter), customFilter)
});
case 'changeCustomQuery':
// 自定义筛选数据改变
return _objectSpread(_objectSpread({}, state), {}, {
customQuery: customQuery
});
case 'changeRows':
return _objectSpread(_objectSpread({}, state), {}, {
rows: rows
});
case 'windowResize':
return _objectSpread(_objectSpread({}, state), {}, {
resize: resize
});
// 高级筛选
case 'changeComplexFilter':
return _objectSpread(_objectSpread({}, state), {}, {
complexFilter: complexFilter
});
case 'changeComplexDrawer':
return _objectSpread(_objectSpread({}, state), {}, {
complexDrawer: complexDrawer
});
case 'changeValueDrawer':
return _objectSpread(_objectSpread({}, state), {}, {
valueDrawer: valueDrawer
});
// 自定义筛选
case 'changeCustomDrawer':
return _objectSpread(_objectSpread({}, state), {}, {
customDrawer: customDrawer
});
case 'changeSaveModal':
return _objectSpread(_objectSpread({}, state), {}, {
saveModal: saveModal
});
case 'reset':
// 一键清空
return _objectSpread(_objectSpread({}, state), {}, {
searchFilter: {},
searchQuery: {},
basicFilter: {},
basicQuery: {},
complexFilter: {}
});
default:
throw new Error();
}
};
// 仅在初始化时触发一次
var getInitialState = function getInitialState(props) {
var _props$locale;
var _initLocalization = initLocalization(props),
searchFilter = _initLocalization.searchFilter,
searchQuery = _initLocalization.searchQuery,
basicFilter = _initLocalization.basicFilter,
basicQuery = _initLocalization.basicQuery,
customQuery = _initLocalization.customQuery,
customFilter = _initLocalization.customFilter;
// 字段对应关系 basicQuery => filterQuery; customQuery => globalQuery; searchQuery => fuzzyQuery
return {
searchFilter: searchFilter,
searchQuery: searchQuery,
// 模糊查询
basicFilter: basicFilter,
basicQuery: basicQuery,
customFilter: _objectSpread({
value: '',
label: (props === null || props === void 0 ? void 0 : (_props$locale = props.locale) === null || _props$locale === void 0 ? void 0 : _props$locale.unlimited) || '不限',
data: {}
}, customFilter),
// 选中的自定义筛选项
customQuery: customQuery,
complexFilter: {},
complexDrawer: {
visible: false,
data: {}
},
valueDrawer: {
visible: false,
type: 'complex',
data: {}
},
customDrawer: {
visible: false,
type: 'edit',
data: {}
},
saveModal: {
visible: false,
data: {}
}
};
};
var LmFilterRoot = function LmFilterRoot(props, ref) {
var initialState = useMemo(function () {
return getInitialState(props);
}, []);
var _useReducer = useReducer(reducer, initialState),
_useReducer2 = _slicedToArray(_useReducer, 2),
state = _useReducer2[0],
dispatch = _useReducer2[1];
// 获取核心Methods
var _useCoreOptions = useCoreOptions({
state: state,
dispatch: dispatch,
props: props
}),
CoreMethods = _useCoreOptions.CoreMethods,
RefMethods = _useCoreOptions.RefMethods;
// 组件实例
var instance = _objectSpread(_objectSpread(_objectSpread(_objectSpread({}, props), CoreMethods), RefMethods), {}, {
state: state,
dispatch: dispatch
});
// 向外暴露出的方法
useImperativeHandle(ref, function () {
return _objectSpread({}, RefMethods);
});
return /*#__PURE__*/React.createElement(LmFilterWrapper, {
instance: instance
});
};
export default /*#__PURE__*/forwardRef(LmFilterRoot);