fastlion-amis
Version:
一种MIS页面生成工具
138 lines (137 loc) • 8.96 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.QuickFilter = void 0;
var tslib_1 = require("tslib");
var react_1 = tslib_1.__importStar(require("react"));
var crudFilter_1 = require("../../../templateSchema/crudFilter");
var lodash_1 = require("lodash");
var icons_1 = require("../../../components/icons");
var helper_1 = require("../../../utils/helper");
var QuickFilter = function (_a) {
var props = _a.props, filterExist = _a.filterExist, filtercont = _a.filtercont, filtertpl = _a.filtertpl, useMobileUI = _a.useMobileUI, isFilter = _a.isFilter, handleFilterReset = _a.handleFilterReset, handleFilterSubmit = _a.handleFilterSubmit, handleFilterInit = _a.handleFilterInit, defaultAdvancedQuery = _a.defaultAdvancedQuery, search = _a.search, afterSearchFn = _a.afterSearchFn, getFilterForm = _a.getFilterForm, handleFilterAdvanced = _a.handleFilterAdvanced, handleFilterOptions = _a.handleFilterOptions, handledelVisible = _a.handledelVisible, handleReset = _a.handleReset;
var _filter = props.filter, store = props.store, render = props.render, __ = props.translate, cx = props.classnames, _b = props.advancedFilter, advancedFilter = _b === void 0 ? {} : _b, CRUDName = props.name, advancedFilterApi = props.advancedFilterApi, globalFilter = props.globalFilter;
var filter = (0, react_1.useMemo)(function () {
var _a;
return (_filter ||
(0, crudFilter_1.defaultFilterSchma)(CRUDName || '', !!((_a = advancedFilter === null || advancedFilter === void 0 ? void 0 : advancedFilter.body) === null || _a === void 0 ? void 0 : _a.length)));
}, [_filter, CRUDName, advancedFilter]);
// 高级查询条件
var columns = (0, react_1.useMemo)(function () {
var _a, _b, _c;
return ((_c = (_b = (_a = advancedFilter === null || advancedFilter === void 0 ? void 0 : advancedFilter.body) === null || _a === void 0 ? void 0 : _a.find(function (item) { return item.name == 'advancedFilter'; })) === null || _b === void 0 ? void 0 : _b.body) !== null && _c !== void 0 ? _c : []);
}, []);
var advancedFilters = (0, react_1.useMemo)(function () {
return advancedFilter
? (0, lodash_1.flatMap)(filtertpl, function (item, index) {
var _a, _b, _c, _d;
var val;
if (typeof (item === null || item === void 0 ? void 0 : item.value) === 'number') {
if ((_a = item === null || item === void 0 ? void 0 : item.labelName) === null || _a === void 0 ? void 0 : _a.includes(',')) {
val = (item === null || item === void 0 ? void 0 : item.labelName).split(',')[0] + '...';
}
else {
val = item === null || item === void 0 ? void 0 : item.labelName;
}
}
var values = item.value;
if (values &&
typeof values == 'string' &&
values.includes('(') &&
values.includes(')') &&
columns) {
// 做一个从小到大的排序
var compareField = (_b = columns
.filter(function (item) {
return values.includes(item.name.split('.').pop());
})
.map(function (item) { return item.name.split('.').pop(); })) === null || _b === void 0 ? void 0 : _b.sort(function (cur, next) { return next.length - cur.length; });
var result_1 = values.substring(1, values.length - 1);
compareField.forEach(function (item) {
var match = item;
var regex = new RegExp(match, 'g');
var content = columns.find(function (item) { return item.name.split('.').pop() == match; });
if (content) {
result_1 = result_1.replace(regex, "[".concat(content.label, "]"));
}
});
val = result_1;
}
if (!(val ? val : (item === null || item === void 0 ? void 0 : item.valuesAlia) || (item === null || item === void 0 ? void 0 : item.value)))
return [];
return {
key: (_c = item.keyName) !== null && _c !== void 0 ? _c : index,
name: item.name,
label: (_d = item.label) !== null && _d !== void 0 ? _d : '',
value: val !== null && val !== void 0 ? val : ((item === null || item === void 0 ? void 0 : item.labelName) || (item === null || item === void 0 ? void 0 : item.valuesAlia) || (item === null || item === void 0 ? void 0 : item.value) || '')
};
})
: undefined;
}, [advancedFilter, filtertpl, columns]);
var onAdvancedFilterRemove = function (name) {
if (name == 'all') {
handledelVisible(undefined, true);
}
else {
var item = filtertpl.find(function (item) { return item.keyName === name; });
item &&
handledelVisible(item, false, undefined, item.advancedFilterIndex);
}
};
var onGlobalFilterChange = (0, react_1.useCallback)(function (values) {
var query = tslib_1.__assign(tslib_1.__assign({}, store.query), { globalFilterParam: values });
store.updateQuery(query);
search(undefined, undefined, undefined, true, afterSearchFn);
}, [store]);
var panelClassName = (0, react_1.useMemo)(function () { return cx('Crud-filter', (filter === null || filter === void 0 ? void 0 : filter.panelClassName) || 'Panel--default'); }, [filter === null || filter === void 0 ? void 0 : filter.panelClassName]);
var className = (0, react_1.useMemo)(function () { return (!!filter ? undefined : cx('Form--hidden')); }, [!!filter]);
// 提取关键条件为有明确业务含义的变量
var hasFilters = !!(filter || (advancedFilters === null || advancedFilters === void 0 ? void 0 : advancedFilters.length) || globalFilter);
var shouldShowFilterPanel = !!(!store.filterTogggable || store.filterVisible);
var isFilterActive = !!(filterExist || isFilter); // 假设 filterExist 和 isIsFilter 已定义
var mobileUI = useMobileUI && (0, helper_1.isMobile)();
// 提取渲染函数,减少重复代码
var renderMobileFilterTrigger = function () { return (react_1.default.createElement("div", { className: cx('Mobile-filter'), onClick: handleFilterAdvanced },
react_1.default.createElement(icons_1.Icon, { icon: "#icon-tooltool_filter", style: { fill: isFilterActive ? '#3574ee' : undefined } }),
react_1.default.createElement("span", { className: "filter-text ".concat(isFilterActive ? 'has-filter' : '') }, __('CRUD.filter')))); };
// 如果没有过滤器或不应显示面板,则返回null
if (hasFilters && shouldShowFilterPanel) {
if (!mobileUI) {
return (react_1.default.createElement(react_1.default.Fragment, null, render(
//默认
'filter', tslib_1.__assign(tslib_1.__assign({ title: __('CRUD.filter'), mode: 'grid', submitText: __('search'), wrapWithPanel: false }, filter), { type: 'form', api: null, showHeader: true, sortable: true }), {
key: 'filter',
CRUDName: CRUDName,
className: className,
panelClassName: panelClassName,
data: store.filterData,
formStore: undefined,
advancedFilterVisible: false,
advancedFilterApi: advancedFilterApi,
advancedFilter: advancedFilter,
filtercont: filtercont,
advancedFilters: advancedFilters,
onAdvancedFilterRemove: onAdvancedFilterRemove,
globalFilters: globalFilter ? globalFilter.body : null,
onGlobalFilterChange: onGlobalFilterChange,
onReset: handleFilterReset,
onSubmit: handleFilterSubmit,
onInit: _filter ? handleFilterInit : undefined,
defaultAdvancedQuery: defaultAdvancedQuery,
getFilterForm: getFilterForm,
handleFilterAdvanced: handleFilterAdvanced,
handleFilterOptions: handleFilterOptions,
handledelVisible: handledelVisible,
handleReset: handleReset
})));
}
else {
return renderMobileFilterTrigger();
}
}
else if (mobileUI && advancedFilter) {
return renderMobileFilterTrigger();
}
return null;
};
exports.QuickFilter = QuickFilter;
//# sourceMappingURL=./renderers/CRUD/components/Filter.js.map