choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
1,423 lines (1,205 loc) • 102 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import _createForOfIteratorHelper from "@babel/runtime/helpers/createForOfIteratorHelper";
import _extends from "@babel/runtime/helpers/extends";
import _objectWithoutProperties from "@babel/runtime/helpers/objectWithoutProperties";
import _defineProperty from "@babel/runtime/helpers/defineProperty";
import _objectSpread from "@babel/runtime/helpers/objectSpread2";
import _asyncToGenerator from "@babel/runtime/helpers/asyncToGenerator";
import _toConsumableArray from "@babel/runtime/helpers/toConsumableArray";
import _classCallCheck from "@babel/runtime/helpers/classCallCheck";
import _createClass from "@babel/runtime/helpers/createClass";
import _inherits from "@babel/runtime/helpers/inherits";
import _createSuper from "@babel/runtime/helpers/createSuper";
import _typeof from "@babel/runtime/helpers/typeof";
var _excluded = ["fieldName", "value", "conditionType", "comparator"];
import _regeneratorRuntime from "@babel/runtime/regenerator";
import { __decorate } from "tslib";
import React, { cloneElement, Component, isValidElement } from 'react';
import { observer } from 'mobx-react';
import { action, autorun, isArrayLike, observable, runInAction, toJS } from 'mobx';
import uniq from 'lodash/uniq';
import pull from 'lodash/pull';
import noop from 'lodash/noop';
import map from 'lodash/map';
import isObject from 'lodash/isObject';
import isEnumEmpty from 'lodash/isEmpty';
import isNumber from 'lodash/isNumber';
import isFunction from 'lodash/isFunction';
import isEqual from 'lodash/isEqual';
import isArray from 'lodash/isArray';
import isString from 'lodash/isString';
import omit from 'lodash/omit';
import defer from 'lodash/defer';
import difference from 'lodash/difference';
import isUndefined from 'lodash/isUndefined';
import isNil from 'lodash/isNil';
import classNames from 'classnames';
import ConfigContext from '../../../../es/config-provider/ConfigContext';
import { getProPrefixCls as getProPrefixClsDefault } from '../../../../es/configure/utils';
import { pxToRem } from '../../../../es/_util/UnitConvertor';
import Icon from '../../../../es/icon';
import { Action } from '../../../../es/trigger/enum';
import Popover from '../../../../es/popover';
import Tag from '../../../../es/tag';
import DataSet from '../../data-set/DataSet';
import { DataSetEvents, DataSetSelection, DataSetStatus, FieldIgnore, FieldType, RecordStatus } from '../../data-set/enum';
import Button from '../../button';
import Dropdown from '../../dropdown';
import TextField from '../../text-field';
import { ValueChangeAction } from '../../text-field/enum';
import Tooltip from '../../tooltip';
import { WaitType, Tooltip as OptionTooltip } from '../../core/enum';
import { $l } from '../../locale-context';
import autobind from '../../_util/autobind';
import _isEmpty from '../../_util/isEmpty';
import FieldList from './FieldList';
import TableButtons from './TableButtons';
import ColumnFilter from './ColumnFilter';
import QuickFilterMenu from './quick-filter/QuickFilterMenu';
import QuickFilterMenuContext from './quick-filter/QuickFilterMenuContext';
import { ConditionDataSet, QuickFilterDataSet, NewFilterDataSet, AdvancedFieldSet } from './quick-filter/QuickFilterDataSet';
import { hide, show } from '../../tooltip/singleton';
import { ShowHelp } from '../../field/enum';
import { renderValidationMessage as utilRenderValidationMessage } from '../../field/utils';
import Select from '../../select';
import Tree from '../../tree';
import { ButtonColor, FuncType } from '../../button/enum';
import { OPERATOR, OPERATOR_TYPE } from './quick-filter/Operator';
import { getEditorByField } from '../utils';
import { ShowValidation } from '../../form/enum';
import { TriggerViewMode } from '../../trigger-field/enum';
import CombineSort from './CombineSort';
/**
* 当前数据是否有值并需要选中
* @param data
*/
export function isSelect(data) {
if (isObject(data[1])) {
return !isEnumEmpty(data[1]);
}
return data[0] !== '__dirty' && !_isEmpty(data[1]);
}
export function isEqualDynamicProps(originalValue, newValue, dataSet, record, name) {
if (isEqual(newValue, originalValue)) {
return true;
}
if (isObject(newValue) && isObject(originalValue) && Object.keys(newValue).length) {
var combineKeys = uniq(Object.keys(newValue).concat(Object.keys(originalValue)));
return combineKeys.every(function (key) {
var value = toJS(newValue[key]);
var oldValue = toJS(originalValue[key]);
if (oldValue === value) {
return true;
}
if (_isEmpty(oldValue) && _isEmpty(value)) {
return true;
}
if (name && name.includes('.')) {
return _isEmpty(oldValue) && _isEmpty(record.get(name));
}
if (isNumber(oldValue) || isNumber(value)) {
var oEp = isNumber(oldValue) ? _isEmpty(oldValue) : isEnumEmpty(oldValue);
var nEp = isNumber(value) ? _isEmpty(value) : isEnumEmpty(value);
if (oEp && nEp) {
return true;
}
return String(oldValue) === String(value);
}
var field = dataSet.getField(key);
if (field && field.get('range', record)) {
var rangeValue = value ? isArray(value) ? value.join('') : Object.values(value).join('') : '';
var rangeOldValue = oldValue ? isArray(oldValue) ? oldValue.join('') : Object.values(oldValue).join('') : '';
return rangeValue === rangeOldValue;
}
if (field && field.get('lovCode') && oldValue && value) {
var valueField = dataSet.getField(key).get('valueField', record);
var textField = dataSet.getField(key).get('textField', record);
return value[valueField] === oldValue[valueField] && value[textField] === oldValue[textField];
}
return isEqual(oldValue, value);
});
}
return isEqual(newValue, originalValue);
}
/**
* 提交副本数据
* @param data
*/
export function omitData(data) {
return omit(data, 'creationDate', 'createdBy', 'lastUpdateDate', 'lastUpdatedBy', 'objectVersionNumber', '_token', 'searchId', 'searchConditionId', 'searchQueryId', 'searchOrderId');
}
/**
* obj 值使用 JSON 保存、获取赋值转化
* @param value
*/
export function parseValue(value) {
try {
var res = JSON.parse(value);
if (_typeof(res) === 'object') {
return res;
}
return value;
} catch (e) {
return value;
}
}
export function stringifyValue(value) {
if (_typeof(value) === 'object') {
return JSON.stringify(value);
}
return value;
}
/**
* 处理查询过滤条件
* @params
*/
export function processFilterParam(dataSet) {
var newFilterDataSet = dataSet.getState(NEWFILTERDATASET); // 处理公式参数
var searchExp = '';
var expType = dataSet.getState(EXPTYPE);
if (expType !== 'customize') {
var joinStr = expType === 'all' || expType === undefined ? 'AND' : 'OR';
for (var i = 1; i <= newFilterDataSet.length; i++) {
if (i === newFilterDataSet.length) {
searchExp += i;
} else {
searchExp += i + joinStr;
}
}
} else {
searchExp = dataSet.getState(SEARCHEXP).toLocaleUpperCase().replace(/\s+/g, '');
}
dataSet.setQueryParameter('search.exp', searchExp); // 处理字段参数
var searchFld = [];
newFilterDataSet.map(function (record, index) {
var dataObj = record.toData();
var name = dataObj[AdvancedFieldSet.fieldName];
var comparator = dataObj[AdvancedFieldSet.comparator];
var tableName = newFilterDataSet.getField(name).get('help', record);
var value = '';
if (isObject(dataObj[name])) {
if (!isArray(dataObj[name])) {
value = dataObj[name][name];
} else {
value = dataObj[name].map(function (arr) {
return isObject(arr) ? arr[name] : arr;
});
}
} else {
value = dataObj[name];
}
var paramFieldName = tableName ? "".concat(tableName, ".").concat(name) : name;
var searchValue = [];
if ([OPERATOR.IS_NULL.value, OPERATOR.IS_NOT_NULL.value].includes(comparator) || value) {
var enCodeValue = isNumber(value) ? value : value ? encodeURIComponent(value) : value;
searchValue = [index + 1, paramFieldName, dataObj[AdvancedFieldSet.comparator], enCodeValue].filter(Boolean);
}
if (searchValue && searchValue.length) {
searchFld.push(searchValue.join('@'));
}
return null;
});
var searchFilParam = searchFld.join(',');
dataSet.setQueryParameter('search.fld', searchFilParam);
}
/**
* 查询字段是否禁用
* @param field 查询字段
* @param queryDataSet 查询dataSet
* @returns
*/
export function fieldIsDisabled(field, queryDataSet) {
var record = queryDataSet.current;
if (field) {
var disabled = field.get('disabled', record);
if (disabled) {
return true;
}
var cascadeMap = field.get('cascadeMap', record);
if (cascadeMap && (!record || Object.keys(cascadeMap).some(function (cascade) {
if (isObject(record.get(cascadeMap[cascade]))) {
return isEnumEmpty(record.get(cascadeMap[cascade]));
}
return isNil(record.get(cascadeMap[cascade]));
}))) {
return true;
}
}
return false;
}
export var CONDITIONSTATUS = '__CONDITIONSTATUS__';
export var SELECTFIELDS = '__SELECTFIELDS__';
export var MENUDATASET = '__MENUDATASET__';
export var CONDITIONDATASET = '__CONDITIONDATASET__';
export var OPTIONDATASET = '__OPTIONDATASET__';
export var FILTERMENUDATASET = '__FILTERMENUDATASET__';
export var MENURESULT = '__MENURESULT__';
export var SEARCHTEXT = '__SEARCHTEXT__';
export var SELECTCHANGE = '__SELECTCHANGE__';
export var EXPTYPE = '__EXPTYPE__';
export var SEARCHEXP = '__SEARCHEXP__';
export var NEWFILTERDATASET = '__NEWFILTERDATASET__';
export var ORIGINALVALUEOBJ = '__ORIGINALVALUEOBJ__';
var TableDynamicFilterBar = /*#__PURE__*/function (_Component) {
_inherits(TableDynamicFilterBar, _Component);
var _super = _createSuper(TableDynamicFilterBar);
function TableDynamicFilterBar(props, context) {
var _this;
_classCallCheck(this, TableDynamicFilterBar);
_this = _super.call(this, props, context);
_this.refAdvancedFilterContainer = null;
_this.refDropdown = null;
_this.refSingleWrapper = null;
_this.refEditors = new Map();
_this.refFilterItems = new Map();
_this.refCustomizeExpTypeEditor = null;
_this.originalConditionFields = [];
_this.handleMouseDownOut = function (e) {
if (_this.refDropdown && !_this.refDropdown.contains(e.target)) {
_this.fieldSelectHidden = true;
}
};
_this.setOriginalConditionFields = function (code) {
var _this$props = _this.props,
queryDataSet = _this$props.queryDataSet,
dataSet = _this$props.dataSet;
if (!code) {
if (queryDataSet) {
_this.initConditionFields({
dataSet: queryDataSet,
record: queryDataSet.get(0)
});
}
} else {
_this.originalConditionFields = Array.isArray(code) ? code : [code];
}
dataSet.setState(SELECTFIELDS, _toConsumableArray(_this.originalConditionFields));
};
/**
* 勾选
* @param code
* @param record
*/
_this.handleSelect = function (code, record) {
var dataSet = _this.props.dataSet;
var codes = Array.isArray(code) ? code : [code];
var selectFields = dataSet.getState(SELECTFIELDS) || [];
dataSet.setState(SELECTFIELDS, uniq([].concat(_toConsumableArray(selectFields), _toConsumableArray(codes))));
var shouldUpdate = dataSet.getState(SELECTFIELDS).length !== _this.originalConditionFields.length || !!difference(toJS(dataSet.getState(SELECTFIELDS)), toJS(_this.originalConditionFields)).length;
var isDirty = record ? record.dirty : false;
_this.setConditionStatus(shouldUpdate || isDirty ? RecordStatus.update : RecordStatus.sync);
dataSet.setState(SELECTCHANGE, shouldUpdate);
};
/**
* 取消勾选
* @param code
*/
_this.handleUnSelect = function (code) {
var _this$props2 = _this.props,
queryDataSet = _this$props2.queryDataSet,
dataSet = _this$props2.dataSet;
var codes = Array.isArray(code) ? code : [code];
var isDirty = false;
if (queryDataSet) {
var current = queryDataSet.current;
if (current) {
codes.forEach(function (name) {
return current.set(name, undefined);
});
isDirty = current.dirty;
}
}
var selectFields = dataSet.getState(SELECTFIELDS) || [];
dataSet.setState(SELECTFIELDS, pull.apply(void 0, [_toConsumableArray(selectFields)].concat(_toConsumableArray(codes))));
var shouldUpdate = dataSet.getState(SELECTFIELDS).length !== _this.originalConditionFields.length || !!difference(toJS(dataSet.getState(SELECTFIELDS)), toJS(_this.originalConditionFields)).length;
_this.setConditionStatus(shouldUpdate || isDirty ? RecordStatus.update : RecordStatus.sync);
dataSet.setState(SELECTCHANGE, shouldUpdate);
};
runInAction(function () {
_this.fieldSelectHidden = true;
_this.expand = true;
});
return _this;
}
_createClass(TableDynamicFilterBar, [{
key: "prefixCls",
get: function get() {
var prefixCls = this.props.prefixCls;
var _this$context$getProP = this.context.getProPrefixCls,
getProPrefixCls = _this$context$getProP === void 0 ? getProPrefixClsDefault : _this$context$getProP;
return getProPrefixCls('table', prefixCls);
}
}, {
key: "queryFields",
get: function get() {
var _this$props3 = this.props,
queryFields = _this$props3.queryFields,
queryDataSet = _this$props3.queryDataSet,
dataSet = _this$props3.dataSet;
var menuDataSet = dataSet.getState(MENUDATASET);
var isTenant = menuDataSet && menuDataSet.current && menuDataSet.current.get('isTenant');
return queryFields.filter(function (component) {
if (component.props.hidden) {
return !component.props.hidden;
}
if (isTenant && queryDataSet && queryDataSet.getField(component.props.name)) {
return queryDataSet.getField(component.props.name).get('fieldVisible') !== 0;
}
return !component.props.hidden;
});
}
}, {
key: "componentDidMount",
value: function componentDidMount() {
var _this2 = this;
var _this$props4 = this.props,
fuzzyQueryOnly = _this$props4.fuzzyQueryOnly,
queryDataSet = _this$props4.queryDataSet,
dataSet = _this$props4.dataSet;
if (!fuzzyQueryOnly) {
this.processDataSetListener(true);
document.addEventListener('mousedown', this.handleMouseDownOut);
if (this.isSingleLineOpt() && this.refSingleWrapper) {
var _this$refSingleWrappe = this.refSingleWrapper.getBoundingClientRect(),
height = _this$refSingleWrappe.height;
var _this$refSingleWrappe2 = this.refSingleWrapper.children[0].children[0].getBoundingClientRect(),
childHeight = _this$refSingleWrappe2.height;
runInAction(function () {
_this2.showExpandIcon = height > childHeight + 18;
});
}
var autoQuery = dataSet.props.autoQuery;
if (!autoQuery || autoQuery && dataSet.status === DataSetStatus.ready) {
this.handleDataSetQuery({
dataSet: dataSet
});
}
}
var shouldInit = dataSet.getState(ORIGINALVALUEOBJ) ? dataSet.getState(ORIGINALVALUEOBJ).query === undefined : true;
if (shouldInit && queryDataSet && queryDataSet.current) {
this.initConditionFields({
dataSet: queryDataSet,
record: queryDataSet.current
});
}
if (queryDataSet && queryDataSet.current && !this.tableFilterAdapter) {
dataSet.setState(CONDITIONSTATUS, queryDataSet.current.dirty ? RecordStatus.update : RecordStatus.sync);
}
this.setFilterVisiable();
}
}, {
key: "componentWillUnmount",
value: function componentWillUnmount() {
var fuzzyQueryOnly = this.props.fuzzyQueryOnly;
if (!fuzzyQueryOnly) {
document.removeEventListener('mousedown', this.handleMouseDownOut);
this.processDataSetListener(false);
}
if (this.isTooltipShown) {
hide();
delete this.isTooltipShown;
}
}
}, {
key: "componentWillReceiveProps",
value: function componentWillReceiveProps(nextProps) {
var _this3 = this;
var dataSet = nextProps.dataSet,
fuzzyQueryOnly = nextProps.fuzzyQueryOnly,
queryDataSet = nextProps.queryDataSet; // eslint-disable-next-line react/destructuring-assignment
if (dataSet !== this.props.dataSet || fuzzyQueryOnly !== this.props.fuzzyQueryOnly) {
runInAction(function () {
_this3.fieldSelectHidden = true;
_this3.expand = true;
});
if (!fuzzyQueryOnly) {
// 移除原有实例监听
this.processDataSetListener(false);
this.processDataSetListener(true, nextProps);
if (this.isSingleLineOpt() && this.refSingleWrapper) {
var _this$refSingleWrappe3 = this.refSingleWrapper.getBoundingClientRect(),
height = _this$refSingleWrappe3.height;
var _this$refSingleWrappe4 = this.refSingleWrapper.children[0].children[0].getBoundingClientRect(),
childHeight = _this$refSingleWrappe4.height;
runInAction(function () {
_this3.showExpandIcon = height > childHeight + 18;
});
}
}
var shouldInit = dataSet.getState(ORIGINALVALUEOBJ) ? dataSet.getState(ORIGINALVALUEOBJ).query === undefined : true;
if (shouldInit && queryDataSet && queryDataSet.current) {
this.initConditionFields({
dataSet: queryDataSet,
record: queryDataSet.current,
tableDs: dataSet
});
}
if (queryDataSet && queryDataSet.current && !this.tableFilterAdapter) {
dataSet.setState(CONDITIONSTATUS, queryDataSet.current.dirty ? RecordStatus.update : RecordStatus.sync);
}
}
}
}, {
key: "processDataSetListener",
value: function processDataSetListener(flag, nextProps) {
var _ref = nextProps || this.props,
queryDataSet = _ref.queryDataSet,
dataSet = _ref.dataSet;
if (queryDataSet) {
var handler = flag ? queryDataSet.addEventListener : queryDataSet.removeEventListener;
var dsHandler = flag ? dataSet.addEventListener : dataSet.removeEventListener;
handler.call(queryDataSet, DataSetEvents.validate, this.handleDataSetValidate);
handler.call(queryDataSet, DataSetEvents.update, this.handleDataSetUpdate);
handler.call(queryDataSet, DataSetEvents.create, this.handleDataSetCreate);
handler.call(queryDataSet, DataSetEvents.reset, this.handleDataSetReset);
handler.call(queryDataSet, DataSetEvents.load, this.handleDataSetLoad);
dsHandler.call(dataSet, DataSetEvents.query, this.handleDataSetQuery);
}
}
}, {
key: "handleDataSetQuery",
value: function () {
var _handleDataSetQuery = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee(_ref2) {
var dataSet, res, defaultMenus, _ref3, conditionList, initQueryData, queryDataSet;
return _regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
dataSet = _ref2.dataSet;
if (!(!dataSet.getState(MENURESULT) && this.tableFilterAdapter)) {
_context.next = 16;
break;
}
_context.next = 4;
return this.initMenuDataSet();
case 4:
res = dataSet.getState(MENURESULT);
if (!(res && res.length && res.filter(function (menu) {
return menu.defaultFlag;
}).length)) {
_context.next = 16;
break;
}
defaultMenus = res.filter(function (menu) {
return menu.defaultFlag;
});
_ref3 = defaultMenus.length > 1 ? defaultMenus.find(function (menu) {
return menu.isTenant !== 1;
}) : defaultMenus[0], conditionList = _ref3.conditionList;
initQueryData = {};
if (!(conditionList && conditionList.length)) {
_context.next = 16;
break;
}
map(conditionList, function (condition) {
if (condition.comparator === 'EQUAL') {
var fieldName = condition.fieldName,
value = condition.value;
initQueryData[fieldName] = parseValue(value);
}
});
queryDataSet = this.props.queryDataSet;
if (!(queryDataSet && queryDataSet.current && dataSet.props.autoQuery)) {
_context.next = 16;
break;
}
if (!Object.keys(initQueryData).length) {
_context.next = 16;
break;
}
dataSet.query();
return _context.abrupt("return", false);
case 16:
case "end":
return _context.stop();
}
}
}, _callee, this);
}));
function handleDataSetQuery(_x) {
return _handleDataSetQuery.apply(this, arguments);
}
return handleDataSetQuery;
}()
/**
* queryDataSet 查询前校验事件 触发展开动态字段
* @param dataSet 查询DS
* @param result
*/
}, {
key: "handleDataSetValidate",
value: function () {
var _handleDataSetValidate = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee2(_ref4) {
var _this4 = this;
var dataSet, result, refSingleWrapper;
return _regeneratorRuntime.wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
dataSet = _ref4.dataSet, result = _ref4.result;
_context2.next = 3;
return result;
case 3:
if (_context2.sent) {
_context2.next = 7;
break;
}
runInAction(function () {
var current = dataSet.current;
dataSet.fields.forEach(function (field, key) {
if (!field.isValid(current)) {
_this4.handleSelect(key);
}
});
_this4.expand = true;
});
refSingleWrapper = this.refSingleWrapper;
if (refSingleWrapper) {
refSingleWrapper.style.height = '';
refSingleWrapper.style.overflow = '';
}
case 7:
case "end":
return _context2.stop();
}
}
}, _callee2, this);
}));
function handleDataSetValidate(_x2) {
return _handleDataSetValidate.apply(this, arguments);
}
return handleDataSetValidate;
}()
}, {
key: "setConditionStatus",
value: function setConditionStatus(value, orglValue) {
var dataSet = this.props.dataSet;
dataSet.setState(CONDITIONSTATUS, value);
if (value === RecordStatus.sync && orglValue) {
var oriObj = dataSet.getState(ORIGINALVALUEOBJ);
dataSet.setState(ORIGINALVALUEOBJ, _objectSpread(_objectSpread({}, oriObj), {}, {
query: orglValue
}));
}
}
/**
* 筛选条件更新 触发表格查询
*/
}, {
key: "handleDataSetUpdate",
value: function () {
var _handleDataSetUpdate = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee3(_ref5) {
var record, name, oldValue, value, _this$props5, dataSet, queryDataSet, _this$props5$onQuery, onQuery, autoQuery, field, shouldQuery, rangeKeys, _record$set, _record$set2, rangeValue, rangeOldValue, status, hasFocus, i, queryField, editor;
return _regeneratorRuntime.wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
record = _ref5.record, name = _ref5.name, oldValue = _ref5.oldValue, value = _ref5.value;
_this$props5 = this.props, dataSet = _this$props5.dataSet, queryDataSet = _this$props5.queryDataSet, _this$props5$onQuery = _this$props5.onQuery, onQuery = _this$props5$onQuery === void 0 ? noop : _this$props5$onQuery, autoQuery = _this$props5.autoQuery;
field = queryDataSet && queryDataSet.getField(name);
shouldQuery = true;
if (field && field.get('range', record)) {
// 处理 range 失焦对象 undefined,bind 字段无处理的情况
if (value) {
rangeKeys = Object.keys(value);
if (rangeKeys.length) {
if (value[rangeKeys[0]] === undefined && value[rangeKeys[1]] === undefined) {
record.set(name, null);
} else if (value[rangeKeys[1]] === undefined) {
record.set(name, (_record$set = {}, _defineProperty(_record$set, rangeKeys[0], value[rangeKeys[0]]), _defineProperty(_record$set, rangeKeys[1], null), _record$set));
} else if (value[rangeKeys[0]] === undefined) {
record.set(name, (_record$set2 = {}, _defineProperty(_record$set2, rangeKeys[0], null), _defineProperty(_record$set2, rangeKeys[1], value[rangeKeys[1]]), _record$set2));
}
}
}
rangeValue = value ? isArray(value) ? value.join('') : Object.values(value).join('') : '';
rangeOldValue = oldValue ? isArray(oldValue) ? oldValue.join('') : Object.values(oldValue).join('') : '';
shouldQuery = rangeValue !== rangeOldValue;
}
status = RecordStatus.update;
if (record) {
this.handleSelect(name, record);
status = isEqualDynamicProps(dataSet.getState(ORIGINALVALUEOBJ).query, omit(record.toData(), ['__dirty']), queryDataSet, record, name) ? RecordStatus.sync : RecordStatus.update;
}
this.setConditionStatus(status);
if (!(autoQuery && shouldQuery)) {
_context3.next = 27;
break;
}
_context3.next = 11;
return dataSet.modifiedCheck(undefined, dataSet, 'query');
case 11:
if (!_context3.sent) {
_context3.next = 26;
break;
}
_context3.t0 = queryDataSet && queryDataSet.current;
if (!_context3.t0) {
_context3.next = 17;
break;
}
_context3.next = 16;
return queryDataSet.current.validate();
case 16:
_context3.t0 = _context3.sent;
case 17:
if (!_context3.t0) {
_context3.next = 22;
break;
}
dataSet.query();
onQuery();
_context3.next = 24;
break;
case 22:
hasFocus = false;
for (i = 0; i < this.queryFields.length; i++) {
queryField = this.queryFields[i];
editor = this.refEditors.get(String(queryField.key));
if (editor && !editor.valid && !hasFocus && field && !field.get('multiple', record) && isFunction(editor.focus)) {
editor.focus();
hasFocus = true;
}
}
case 24:
_context3.next = 27;
break;
case 26:
record.init(name, oldValue);
case 27:
case "end":
return _context3.stop();
}
}
}, _callee3, this);
}));
function handleDataSetUpdate(_x3) {
return _handleDataSetUpdate.apply(this, arguments);
}
return handleDataSetUpdate;
}()
/**
* queryDS 新建,初始勾选值
*/
}, {
key: "handleDataSetCreate",
value: function handleDataSetCreate() {
var queryDataSet = this.props.queryDataSet;
if (queryDataSet) {
this.initConditionFields({
dataSet: queryDataSet,
record: queryDataSet.current
});
}
}
/**
* queryDS reset,初始记录
*/
}, {
key: "handleDataSetReset",
value: function handleDataSetReset() {
var queryDataSet = this.props.queryDataSet;
if (queryDataSet && !this.tableFilterAdapter) {
queryDataSet.create();
}
}
/**
* queryDS load,兼容项目loadData([])的处理,初始化记录
*/
}, {
key: "handleDataSetLoad",
value: function handleDataSetLoad(_ref6) {
var dataSet = _ref6.dataSet;
if (!this.tableFilterAdapter && !dataSet.length) {
dataSet.create();
}
}
/**
* 初始化勾选值、条件字段
* @param props
*/
}, {
key: "initConditionFields",
value: function initConditionFields(props) {
var _this5 = this;
var tableDS = this.props.dataSet;
var dataSet = props.dataSet,
record = props.record,
_props$tableDs = props.tableDs,
tableDs = _props$tableDs === void 0 ? tableDS : _props$tableDs;
var originalValue = omit(record.toData(), ['__dirty']);
var conditionData = Object.entries(originalValue);
var newObj = tableDs.getState(ORIGINALVALUEOBJ) || {};
tableDs.setState(ORIGINALVALUEOBJ, _objectSpread(_objectSpread({}, newObj), {}, {
query: originalValue
}));
this.originalConditionFields = [];
var fields = dataSet.fields;
map(conditionData, function (data) {
var name = data[0];
if (!fields.has(data[0]) && isObject(data[1]) && !isEnumEmpty(data[1]) && !isArray(data[1])) {
name = "".concat(data[0], ".").concat(Object.keys(data[1])[0]);
}
if (isSelect(data) && !(dataSet.getState(SELECTFIELDS) || []).includes(name)) {
var field = dataSet.getField(name);
if (!field || !field.get('bind', record) || field.get('usedFlag')) {
_this5.originalConditionFields.push(name);
_this5.handleSelect(name, record);
}
}
});
}
/**
* 高级搜索字段集
*/
}, {
key: "advancedSearchFieldProps",
get: function get() {
var _this$props6 = this.props,
queryDataSet = _this$props6.queryDataSet,
dataSet = _this$props6.dataSet,
advancedSearchFields = _this$props6.advancedSearchFields;
if (advancedSearchFields && advancedSearchFields.length) {
var omitPropsArr = ['dynamicProps', 'computedProps', 'order', 'pattern', 'maxLength', 'minLength', 'max', 'min', 'validator', 'required', 'readOnly', 'disabled', 'defaultValue', 'cascadeMap', 'ignore'];
return advancedSearchFields.map(function (field) {
var name = field.name,
source = field.source,
alias = field.alias,
tableName = field.tableName,
_field$fieldProps = field.fieldProps,
fieldProps = _field$fieldProps === void 0 ? {} : _field$fieldProps;
var fieldName = alias || name;
var dynamicRequired = function dynamicRequired(_ref7) {
var record = _ref7.record;
var isNullOperater = [OPERATOR.IS_NULL.value, OPERATOR.IS_NOT_NULL.value].includes(record.get(AdvancedFieldSet.comparator));
if (fieldName === record.get(AdvancedFieldSet.fieldName) && !isNullOperater) {
return true;
}
return false;
};
var required = fieldProps.required,
computedProps = fieldProps.computedProps;
if (required) delete fieldProps.required;
if (computedProps && 'required' in computedProps) delete computedProps.required;
if (fieldProps.dynamicProps) {
fieldProps.dynamicProps.required = dynamicRequired;
} else {
fieldProps.dynamicProps = {
required: dynamicRequired
};
}
if (source === 'fields' && dataSet.props.fields) {
var dsFiedlsProps = dataSet.props.fields.find(function (f) {
return f.name === name;
});
return _objectSpread(_objectSpread(_objectSpread({}, omit(dsFiedlsProps, omitPropsArr)), fieldProps), {}, {
help: tableName,
name: fieldName
});
}
if (source === 'queryFields' && queryDataSet && queryDataSet.props.fields) {
var _dsFiedlsProps = queryDataSet.props.fields.find(function (f) {
return f.name === name;
});
return _objectSpread(_objectSpread(_objectSpread({}, omit(_dsFiedlsProps, omitPropsArr)), fieldProps), {}, {
help: tableName,
name: fieldName
});
}
return _objectSpread(_objectSpread({}, fieldProps), {}, {
// multiple: fieldProps && fieldProps.multiple ? '|' : false,
help: tableName,
name: fieldName
});
});
}
return [];
}
/**
* 加载动态筛选条相关初始数据 & 存储初始值
* 1.筛选条
* 2.高级搜索
* 3.模糊搜索
* @param param
*/
}, {
key: "loadConditionData",
value: function loadConditionData(_ref8) {
var conditionDataSet = _ref8.conditionDataSet,
newFilterDataSet = _ref8.newFilterDataSet,
menuRecord = _ref8.menuRecord,
dataSet = _ref8.dataSet,
searchText = _ref8.searchText;
var comparatorData = [];
var regularData = [];
var newObj = dataSet.getState(ORIGINALVALUEOBJ) || {};
var searchTextValue = null;
menuRecord.get('conditionList').forEach(function (condition) {
if (condition.conditionType !== 'comparator') {
regularData.push(condition);
} else {
var _objectSpread2;
var fieldName = condition.fieldName,
value = condition.value,
conditionType = condition.conditionType,
comparator = condition.comparator,
rest = _objectWithoutProperties(condition, _excluded);
comparatorData.push(_objectSpread((_objectSpread2 = {}, _defineProperty(_objectSpread2, AdvancedFieldSet.fieldName, fieldName), _defineProperty(_objectSpread2, fieldName, value), _defineProperty(_objectSpread2, AdvancedFieldSet.conditionType, conditionType), _defineProperty(_objectSpread2, AdvancedFieldSet.comparator, comparator), _objectSpread2), rest));
}
}); // 加载筛选条数据
conditionDataSet.loadData(regularData); // 加载高级搜索面板数据
newFilterDataSet.loadData(comparatorData); // 初始高级搜索
dataSet.setState(ORIGINALVALUEOBJ, _objectSpread(_objectSpread({}, newObj), {}, {
advance: comparatorData
})); // 加载模糊搜索数据
if (menuRecord && menuRecord.get('queryList') && menuRecord.get('queryList').length) {
var searchObj = menuRecord.get('queryList').find(function (ql) {
return ql.fieldName === SEARCHTEXT;
});
searchTextValue = searchObj ? searchObj.value : null;
dataSet.setState(SEARCHTEXT, searchTextValue); // 初始模糊搜索
dataSet.setState(ORIGINALVALUEOBJ, _objectSpread(_objectSpread({}, newObj), {}, {
advance: comparatorData,
fuzzy: searchTextValue
}));
dataSet.setQueryParameter(searchText, searchTextValue);
}
}
/**
* 初始筛选条数据源状态
*/
}, {
key: "initMenuDataSet",
value: function () {
var _initMenuDataSet = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee4() {
var _this6 = this;
var _this$props7, queryDataSet, dataSet, dynamicFilterBar, searchCode, getConfig, searchCodes, menuDataSet, conditionDataSet, newFilterDataSet, optionDataSet, filterMenuDataSet, status, result, menuRecord, current;
return _regeneratorRuntime.wrap(function _callee4$(_context4) {
while (1) {
switch (_context4.prev = _context4.next) {
case 0:
_this$props7 = this.props, queryDataSet = _this$props7.queryDataSet, dataSet = _this$props7.dataSet, dynamicFilterBar = _this$props7.dynamicFilterBar, searchCode = _this$props7.searchCode;
getConfig = this.context.getConfig;
searchCodes = dynamicFilterBar && dynamicFilterBar.searchCode || searchCode;
if (!this.tableFilterAdapter) {
_context4.next = 25;
break;
}
menuDataSet = new DataSet(QuickFilterDataSet({
searchCode: searchCodes,
queryDataSet: queryDataSet,
tableFilterAdapter: this.tableFilterAdapter
}), {
getConfig: getConfig
});
conditionDataSet = new DataSet(ConditionDataSet(), {
getConfig: getConfig
});
newFilterDataSet = new DataSet(NewFilterDataSet({
propFields: this.advancedSearchFieldProps
}), {
getConfig: getConfig
});
optionDataSet = new DataSet({
paging: false,
selection: DataSetSelection.single,
fields: [{
// 是否租户默认配置
name: 'isTenant',
type: FieldType.string,
transformResponse: function transformResponse(value) {
return value ? $l('Table', 'preset') : $l('Table', 'user');
},
group: true
}]
}, {
getConfig: getConfig
});
filterMenuDataSet = new DataSet({
autoCreate: true,
fields: [{
name: 'filterName',
type: FieldType.string,
textField: 'searchName',
valueField: 'searchId',
options: optionDataSet,
ignore: FieldIgnore.always
}]
}, {
getConfig: getConfig
});
status = RecordStatus.update;
if (queryDataSet && queryDataSet.current && dataSet.getState(ORIGINALVALUEOBJ)) {
status = isEqualDynamicProps(dataSet.getState(ORIGINALVALUEOBJ).query, omit(queryDataSet.current.toData(), ['__dirty']), queryDataSet, queryDataSet.current) ? RecordStatus.sync : RecordStatus.update;
} else {
status = RecordStatus.sync;
} // 初始化状态
dataSet.setState(MENUDATASET, menuDataSet);
dataSet.setState(CONDITIONDATASET, conditionDataSet);
dataSet.setState(NEWFILTERDATASET, newFilterDataSet);
dataSet.setState(OPTIONDATASET, optionDataSet);
dataSet.setState(FILTERMENUDATASET, filterMenuDataSet);
dataSet.setState(CONDITIONSTATUS, status); // dataSet.setState(SEARCHTEXT, null);
_context4.next = 19;
return menuDataSet.query();
case 19:
result = _context4.sent;
dataSet.setState(MENURESULT, result);
if (optionDataSet) {
optionDataSet.loadData(result);
}
menuRecord = menuDataSet.current;
if (menuRecord) {
this.loadConditionData({
menuRecord: menuRecord,
conditionDataSet: conditionDataSet,
newFilterDataSet: newFilterDataSet,
dataSet: dataSet,
searchText: this.searchText
});
}
if (result && result.length) {
runInAction(function () {
_this6.shouldLocateData = true;
});
if (queryDataSet && queryDataSet.fields && !this.tempFields) {
this.tempFields = queryDataSet.snapshot().dataSet.fields;
}
} else {
current = filterMenuDataSet.current;
if (current) current.set('filterName', undefined);
runInAction(function () {
_this6.shouldLocateData = true;
});
}
case 25:
return _context4.abrupt("return", true);
case 26:
case "end":
return _context4.stop();
}
}
}, _callee4, this);
}));
function initMenuDataSet() {
return _initMenuDataSet.apply(this, arguments);
}
return initMenuDataSet;
}()
/**
* tableFilterSuffix 预留自定义区域
*/
}, {
key: "renderSuffix",
value: function renderSuffix() {
var _this$props8 = this.props,
dynamicFilterBar = _this$props8.dynamicFilterBar,
queryDataSet = _this$props8.queryDataSet,
dataSet = _this$props8.dataSet,
_this$props8$buttons = _this$props8.buttons,
buttons = _this$props8$buttons === void 0 ? [] : _this$props8$buttons;
var getConfig = this.context.getConfig;
var prefixCls = this.prefixCls;
var suffixes = dynamicFilterBar && dynamicFilterBar.suffixes || getConfig('tableFilterSuffix');
var children = [];
var suffixesDom = null;
var tableButtons = buttons.length ? /*#__PURE__*/React.createElement(TableButtons, {
key: "".concat(buttons.length, "-toolbar"),
prefixCls: "".concat(prefixCls, "-dynamic-filter"),
buttons: buttons
}) : null;
if (suffixes && suffixes.length) {
suffixes.forEach(function (suffix) {
if (suffix === 'filter') {
children.push( /*#__PURE__*/React.createElement(ColumnFilter, {
prefixCls: prefixCls,
key: 'prefix-column-filter'
}));
} else if ( /*#__PURE__*/isValidElement(suffix)) {
children.push(suffix);
} else if (isFunction(suffix)) {
children.push(suffix({
queryDataSet: queryDataSet,
dataSet: dataSet
}));
}
});
suffixesDom = /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-dynamic-filter-bar-suffix")
}, children);
}
return [tableButtons, suffixesDom];
}
}, {
key: "getPrefix",
value: function getPrefix() {
var _this$props9 = this.props,
dynamicFilterBar = _this$props9.dynamicFilterBar,
queryDataSet = _this$props9.queryDataSet,
dataSet = _this$props9.dataSet;
var prefixCls = this.prefixCls;
var prefixes = dynamicFilterBar && dynamicFilterBar.prefixes;
var children = [];
if (prefixes && prefixes.length) {
prefixes.forEach(function (prefix) {
if (isString(prefix) && prefix === 'filter') {
children.push( /*#__PURE__*/React.createElement(ColumnFilter, {
prefixCls: prefixCls,
key: 'prefix-column-filter'
}));
} else if ( /*#__PURE__*/isValidElement(prefix)) {
children.push(prefix);
} else if (isFunction(prefix)) {
children.push(prefix({
queryDataSet: queryDataSet,
dataSet: dataSet
}));
}
});
return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement("div", {
className: "".concat(prefixCls, "-dynamic-filter-bar-prefix")
}, children), /*#__PURE__*/React.createElement("span", {
className: "".concat(prefixCls, "-filter-search-divide")
}));
}
return null;
}
/**
* 注入 refEditors
* @param element
* @param name
*/
}, {
key: "createFields",
value: function createFields(element, name) {
var _this7 = this;
var _this$props$onFieldEn = this.props.onFieldEnterDown,
onFieldEnterDown = _this$props$onFieldEn === void 0 ? noop : _this$props$onFieldEn;
var onEnterDown = element.props.onEnterDown;
var props = {
ref: function ref(node) {
return _this7.refEditors.set(name, node);
},
border: false,
_inTable: true,
showValidation: 'tooltip',
onEnterDown: onEnterDown && isFunction(onEnterDown) ? onEnterDown : function (e) {
return onFieldEnterDown({
e: e,
name: name
});
}
};
var elementName = element && isFunction(element.type) && element.type.displayName;
if (isUndefined(element.props.suffix) && ['Currency', 'NumberField', 'EmailField', 'UrlField', 'TextField'].includes(elementName)) {
_extends(props, {
suffix: /*#__PURE__*/React.createElement(Icon, {
type: "search"
})
});
}
return /*#__PURE__*/cloneElement(element, props);
}
/**
* 判断查询值是否为空
* @param value
*/
}, {
key: "isEmpty",
value: function isEmpty(value) {
return isArrayLike(value) ? !value.length : _isEmpty(value);
}
}, {
key: "tableFilterAdapter",
get: function get() {
var _this$props10 = this.props,
dynamicFilterBar = _this$props10.dynamicFilterBar,
searchCode = _this$props10.searchCode;
var getConfig = this.context.getConfig;
var searchCodes = dynamicFilterBar && dynamicFilterBar.searchCode || searchCode;
return searchCodes ? dynamicFilterBar && dynamicFilterBar.tableFilterAdapter || getConfig('tableFilterAdapter') : null;
}
/**
* 是否单行操作
*/
}, {
key: "isSingleLineOpt",
value: function isSingleLineOpt() {
var fuzzyQuery = this.props.fuzzyQuery;
return !(fuzzyQuery || this.tableFilterAdapter);
}
/**
* 查询前修改提示及校验定位
*/
}, {
key: "modifiedCheckQuery",
value: function () {
var _modifiedCheckQuery = _asyncToGenerator( /*#__PURE__*/_regeneratorRuntime.mark(function _callee5(fuzzyValue, fuzzyOldValue, refresh) {
var _this$props11, dataSet, queryDataSet, fuzzyQueryOnly, _this$props11$onRefre, onRefresh, hasFocus, _iterator, _step, _step$value, key, value;
return _regeneratorRuntime.wrap(function _callee5$(_context5) {
while (1) {
switch (_context5.prev = _context5.next) {
case 0:
_this$props11 = this.props, dataSet = _this$props11.dataSet, queryDataSet = _this$props11.queryDataSet, fuzzyQueryOnly = _this$props11.fuzzyQueryOnly, _this$props11$onRefre = _this$props11.onRefresh, onRefresh = _this$props11$onRefre === void 0 ? noop : _this$props11$onRefre;
_context5.next = 3;
return dataSet.modifiedCheck(undefined, dataSet, 'query');
case 3:
if (!_context5.sent) {
_context5.next = 30;
break;
}
_context5.t1 = queryDataSet && queryDataSet.current;
if (!_context5.t1) {
_context5.next = 9;
break;
}
_context5.next = 8;
return queryDataSet.current.validate();
case 8:
_context5.t1 = _context5.sent;
case 9:
_context5.t0 = _context5.t1;
if (_context5.t0) {
_context5.next = 12;
break;
}
_context5.t0 = fuzzyQueryOnly;
case 12:
if (!_context5.t0) {
_context5.next = 25;
break;
}
if (fuzzyValue) {
runInAction(function () {
dataSet.setState(SEARCHTEXT, fuzzyValue || null);
});
dataSet.setQueryParameter(this.searchText, fuzzyValue);
}
if (!refresh) {
_context5.next = 22;
break;
}
_context5.next = 17;
return onRefresh();
case 17:
_context5.t2 = _context5.sent;
if (!(_context5.t2 !== false)) {
_context5.next = 20;
break;
}
dataSet.query();
case 20:
_context5.next = 23;
break;
case 22:
dataSet.query();
case 23:
_context5.next = 28;
break;
case 25:
hasFocus = false;
_iterator = _createForOfIteratorHelper(this.refEditors.entries());
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
_step$value = _slicedToArray(_step.value, 2), key = _step$value[0], value = _step$value[1];
if (value && !value.valid && !hasFocus) {