choerodon-ui
Version:
An enterprise-class UI design language and React-based implementation
532 lines (424 loc) • 19.5 kB
JavaScript
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 _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
var _toConsumableArray2 = _interopRequireDefault(require("@babel/runtime/helpers/toConsumableArray"));
var _createForOfIteratorHelper2 = _interopRequireDefault(require("@babel/runtime/helpers/createForOfIteratorHelper"));
var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread2"));
var _asyncToGenerator2 = _interopRequireDefault(require("@babel/runtime/helpers/asyncToGenerator"));
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
var _typeof2 = _interopRequireDefault(require("@babel/runtime/helpers/typeof"));
var _react = _interopRequireWildcard(require("react"));
var _mobx = require("mobx");
var _mobxReactLite = require("mobx-react-lite");
var _map = _interopRequireDefault(require("lodash/map"));
var _isObject = _interopRequireDefault(require("lodash/isObject"));
var _isEmpty = _interopRequireDefault(require("lodash/isEmpty"));
var _isArray = _interopRequireDefault(require("lodash/isArray"));
var _noop = _interopRequireDefault(require("lodash/noop"));
var _omit = _interopRequireDefault(require("lodash/omit"));
var _isEqual = _interopRequireDefault(require("lodash/isEqual"));
var _ConfigContext = _interopRequireDefault(require("../../../../../lib/config-provider/ConfigContext"));
var _localeContext = require("../../../locale-context");
var _button = _interopRequireDefault(require("../../../button"));
var _enum = require("../../../button/enum");
var _Record = _interopRequireDefault(require("../../../data-set/Record"));
var _enum2 = require("../../../data-set/enum");
var _TableComboBar = require("../TableComboBar");
var _TableDynamicFilterBar = require("../TableDynamicFilterBar");
var _QuickFilterMenuContext = _interopRequireDefault(require("./QuickFilterMenuContext"));
/**
* 根据数据查找需要处理的字段对象
* @param queryDataSet
* @param data
*/
function findFieldObj(queryDataSet, data) {
var name = data[0];
var value = data[1];
if (!queryDataSet.fields.has(data[0]) && (0, _isObject["default"])(data[1]) && !(0, _isEmpty["default"])(data[1]) && !(0, _isArray["default"])(data[1])) {
name = "".concat(data[0], ".").concat(Object.keys(data[1])[0]);
value = Object.values(data[1])[0];
}
var field = queryDataSet.getField(name);
if (field && field.get('lovCode')) {
var _value;
var textField = field.get('textField');
var valueField = field.get('valueField');
if ((0, _typeof2["default"])(value) !== 'object') {
return {
name: name,
value: value,
originalValue: field.getValue().slice()
};
}
return {
name: name,
value: (_value = {}, (0, _defineProperty2["default"])(_value, valueField, value[valueField]), (0, _defineProperty2["default"])(_value, textField, value[textField]), _value)
};
}
if (field && field.get('ignore') !== 'always') {
return {
name: name,
value: value
};
}
}
/**
* 快速筛选下拉
*/
var QuickFilterButton = function QuickFilterButton() {
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2["default"])(_useState, 2),
customizedChange = _useState2[0],
setCustomizedChange = _useState2[1];
var _useContext = (0, _react.useContext)(_ConfigContext["default"]),
getConfig = _useContext.getConfig;
var _useContext2 = (0, _react.useContext)(_QuickFilterMenuContext["default"]),
tempQueryFields = _useContext2.tempQueryFields,
autoQuery = _useContext2.autoQuery,
dataSet = _useContext2.dataSet,
menuDataSet = _useContext2.menuDataSet,
prefixCls = _useContext2.prefixCls,
queryDataSet = _useContext2.queryDataSet,
filterMenuDataSet = _useContext2.filterMenuDataSet,
conditionDataSet = _useContext2.conditionDataSet,
_useContext2$onChange = _useContext2.onChange,
onChange = _useContext2$onChange === void 0 ? _noop["default"] : _useContext2$onChange,
conditionStatus = _useContext2.conditionStatus,
_useContext2$onStatus = _useContext2.onStatusChange,
onStatusChange = _useContext2$onStatus === void 0 ? _noop["default"] : _useContext2$onStatus,
selectFields = _useContext2.selectFields,
_useContext2$onOrigin = _useContext2.onOriginalChange,
onOriginalChange = _useContext2$onOrigin === void 0 ? _noop["default"] : _useContext2$onOrigin,
_useContext2$filterSa = _useContext2.filterSave,
filterSave = _useContext2$filterSa === void 0 ? true : _useContext2$filterSa,
_useContext2$filterSa2 = _useContext2.filterSaveCallback,
filterSaveCallback = _useContext2$filterSa2 === void 0 ? _noop["default"] : _useContext2$filterSa2,
_useContext2$onReset = _useContext2.onReset,
onReset = _useContext2$onReset === void 0 ? _noop["default"] : _useContext2$onReset,
tableStore = _useContext2.tableStore,
refEditors = _useContext2.refEditors;
var isChooseMenu = filterMenuDataSet && filterMenuDataSet.current && filterMenuDataSet.current.get('filterName');
var personalColumn = menuDataSet && menuDataSet.current && menuDataSet.current.get('personalColumn') && (0, _TableDynamicFilterBar.parseValue)(menuDataSet.current.get('personalColumn')) || {};
var customized = tableStore && tableStore.customized;
(0, _react.useEffect)(function () {
if (customized || personalColumn) {
var columns = customized && customized.columns;
setCustomizedChange((0, _isEqual["default"])((0, _TableDynamicFilterBar.parseValue)(columns), personalColumn));
}
}, [customized, personalColumn]);
/**
* queryDS 筛选赋值并更新初始勾选项
* @param init
*/
var conditionAssign = /*#__PURE__*/function () {
var _ref = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee(init) {
var current, shouldQuery, conditionList, initData, currentQueryRecord, emptyRecord, _emptyRecord, customizedColumn, hasFocus, _iterator, _step, _step$value, key, value;
return _regenerator["default"].wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
onOriginalChange();
current = menuDataSet.current;
shouldQuery = false;
if (!current) {
_context.next = 30;
break;
}
conditionList = current.get('personalFilter') && (0, _TableDynamicFilterBar.parseValue)(current.get('personalFilter'));
initData = {};
if (tempQueryFields) {
(0, _mobx.runInAction)(function () {
queryDataSet.fields = tempQueryFields;
});
}
currentQueryRecord = queryDataSet.current;
if (conditionList && conditionList.length) {
(0, _map["default"])(conditionList, function (condition) {
var fieldName = condition.fieldName,
value = condition.value;
initData[fieldName] = (0, _TableDynamicFilterBar.parseValue)(value);
onChange(fieldName);
});
onOriginalChange(Object.keys(initData));
emptyRecord = new _Record["default"]((0, _objectSpread2["default"])({}, initData), queryDataSet);
dataSet.setState(_TableComboBar.SELECTFIELDS, Object.keys(initData));
shouldQuery = !(0, _TableDynamicFilterBar.isEqualDynamicProps)(initData, currentQueryRecord ? (0, _omit["default"])(currentQueryRecord.toData(true), ['__dirty']) : {}, queryDataSet, currentQueryRecord);
(0, _mobx.runInAction)(function () {
queryDataSet.records.push(emptyRecord);
queryDataSet.current = emptyRecord;
});
onStatusChange(_enum2.RecordStatus.sync, emptyRecord.toData());
} else {
shouldQuery = !(0, _TableDynamicFilterBar.isEqualDynamicProps)(initData, currentQueryRecord ? (0, _omit["default"])(currentQueryRecord.toData(true), ['__dirty']) : {}, queryDataSet, currentQueryRecord);
_emptyRecord = new _Record["default"]({}, queryDataSet);
dataSet.setState(_TableComboBar.SELECTFIELDS, []);
(0, _mobx.runInAction)(function () {
queryDataSet.records.push(_emptyRecord);
queryDataSet.current = _emptyRecord;
});
onStatusChange(_enum2.RecordStatus.sync);
}
customizedColumn = current.get('personalColumn') && (0, _TableDynamicFilterBar.parseValue)(current.get('personalColumn'));
if (tableStore) {
(0, _mobx.runInAction)(function () {
var newCustomized = {
columns: (0, _objectSpread2["default"])({}, customizedColumn)
};
tableStore.tempCustomized = {
columns: {}
};
tableStore.saveCustomized(newCustomized);
tableStore.initColumns();
});
}
if (!(!init && shouldQuery && autoQuery)) {
_context.next = 30;
break;
}
_context.next = 14;
return dataSet.modifiedCheck(undefined, dataSet, 'query');
case 14:
_context.t2 = _context.sent;
if (!_context.t2) {
_context.next = 17;
break;
}
_context.t2 = queryDataSet;
case 17:
_context.t1 = _context.t2;
if (!_context.t1) {
_context.next = 20;
break;
}
_context.t1 = queryDataSet.current;
case 20:
_context.t0 = _context.t1;
if (!_context.t0) {
_context.next = 25;
break;
}
_context.next = 24;
return queryDataSet.current.validate();
case 24:
_context.t0 = _context.sent;
case 25:
if (!_context.t0) {
_context.next = 29;
break;
}
dataSet.query();
_context.next = 30;
break;
case 29:
if (refEditors) {
hasFocus = false;
_iterator = (0, _createForOfIteratorHelper2["default"])(refEditors.entries());
try {
for (_iterator.s(); !(_step = _iterator.n()).done;) {
_step$value = (0, _slicedToArray2["default"])(_step.value, 2), key = _step$value[0], value = _step$value[1];
if (value && !value.valid && !hasFocus) {
refEditors.get(key).focus();
hasFocus = true;
}
}
} catch (err) {
_iterator.e(err);
} finally {
_iterator.f();
}
}
case 30:
case "end":
return _context.stop();
}
}
}, _callee);
}));
return function conditionAssign(_x) {
return _ref.apply(this, arguments);
};
}();
var handleQueryReset = /*#__PURE__*/function () {
var _ref2 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee2() {
var first, hasFocus, _iterator2, _step2, _step2$value, key, value;
return _regenerator["default"].wrap(function _callee2$(_context2) {
while (1) {
switch (_context2.prev = _context2.next) {
case 0:
if (!(filterMenuDataSet && filterMenuDataSet.current && filterMenuDataSet.current.get('filterName'))) {
_context2.next = 4;
break;
}
// 筛选项重置重新赋值
conditionAssign();
_context2.next = 24;
break;
case 4:
/**
* 未选择或清除筛选项
* 重置初始勾选项及初始赋值
*/
queryDataSet.locate(0);
first = queryDataSet.get(0);
if (first) {
first.reset();
}
onOriginalChange();
if (!autoQuery) {
_context2.next = 24;
break;
}
_context2.next = 11;
return dataSet.modifiedCheck(undefined, dataSet, 'query');
case 11:
_context2.t1 = _context2.sent;
if (!_context2.t1) {
_context2.next = 14;
break;
}
_context2.t1 = queryDataSet;
case 14:
_context2.t0 = _context2.t1;
if (!_context2.t0) {
_context2.next = 19;
break;
}
_context2.next = 18;
return queryDataSet.validate();
case 18:
_context2.t0 = _context2.sent;
case 19:
if (!_context2.t0) {
_context2.next = 23;
break;
}
dataSet.query();
_context2.next = 24;
break;
case 23:
if (refEditors) {
hasFocus = false;
_iterator2 = (0, _createForOfIteratorHelper2["default"])(refEditors.entries());
try {
for (_iterator2.s(); !(_step2 = _iterator2.n()).done;) {
_step2$value = (0, _slicedToArray2["default"])(_step2.value, 2), key = _step2$value[0], value = _step2$value[1];
if (value && !value.valid && !hasFocus) {
refEditors.get(key).focus();
hasFocus = true;
}
}
} catch (err) {
_iterator2.e(err);
} finally {
_iterator2.f();
}
}
case 24:
onReset();
onStatusChange(_enum2.RecordStatus.sync);
case 26:
case "end":
return _context2.stop();
}
}
}, _callee2);
}));
return function handleQueryReset() {
return _ref2.apply(this, arguments);
};
}();
var handleSave = /*#__PURE__*/function () {
var _ref3 = (0, _asyncToGenerator2["default"])( /*#__PURE__*/_regenerator["default"].mark(function _callee3() {
var current, conditionData, putData, data, customizedColumns;
return _regenerator["default"].wrap(function _callee3$(_context3) {
while (1) {
switch (_context3.prev = _context3.next) {
case 0:
current = queryDataSet.current;
if (current && conditionDataSet) {
conditionData = Object.entries((0, _omit["default"])(current.toData(), ['__dirty']));
conditionDataSet.reset();
conditionDataSet.map(function (record) {
if (!selectFields || !selectFields.includes(record.get('fieldName'))) {
conditionDataSet.remove(record);
}
return null;
});
(0, _map["default"])(conditionData, function (data) {
var fieldObj = findFieldObj(queryDataSet, data);
if (fieldObj) {
var name = fieldObj.name;
if (name) {
var currentRecord = conditionDataSet.find(function (record) {
return record.get('fieldName') === name;
});
if (currentRecord) {
currentRecord.set('value', fieldObj.value);
currentRecord.set('originalValue', fieldObj.originalValue);
} else if ((0, _TableDynamicFilterBar.isSelect)(data)) {
conditionDataSet.create({
fieldName: name,
value: fieldObj.value,
originalValue: fieldObj.originalValue
});
}
}
}
});
putData = [];
(0, _map["default"])(selectFields, function (fieldName) {
var value = current.get(fieldName);
var statusKey = getConfig('statusKey');
var statusAdd = getConfig('status').add;
var status = {};
var toJSONFields = conditionDataSet.toJSONData().map(function (condition) {
return condition.fieldName;
});
status[statusKey] = statusAdd; // 处理空值已勾选条件
if (!toJSONFields.includes(fieldName)) {
putData.push((0, _objectSpread2["default"])({
fieldName: fieldName,
value: value
}, status));
}
});
data = [].concat((0, _toConsumableArray2["default"])(conditionDataSet.toJSONData()), putData);
customizedColumns = tableStore && tableStore.customized && tableStore.customized.columns;
filterSaveCallback({
personalFilter: (0, _TableDynamicFilterBar.stringifyValue)(data),
personalColumn: (0, _TableDynamicFilterBar.stringifyValue)(customizedColumns)
});
} else {
dataSet.query();
}
case 2:
case "end":
return _context3.stop();
}
}
}, _callee3);
}));
return function handleSave() {
return _ref3.apply(this, arguments);
};
}();
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, (conditionStatus === _enum2.RecordStatus.update || !customizedChange) && /*#__PURE__*/_react["default"].createElement("div", {
className: "".concat(prefixCls, "-combo-filter-buttons")
}, isChooseMenu && filterSave && /*#__PURE__*/_react["default"].createElement(_button["default"], {
onClick: handleSave,
color: _enum.ButtonColor.primary
}, (0, _localeContext.$l)('Table', 'save_button')), /*#__PURE__*/_react["default"].createElement(_button["default"], {
onClick: handleQueryReset,
color: _enum.ButtonColor.secondary
}, (0, _localeContext.$l)('Table', 'reset_button'))));
};
QuickFilterButton.displayName = 'QuickFilterButton';
var _default = (0, _mobxReactLite.observer)(QuickFilterButton);
exports["default"] = _default;
//# sourceMappingURL=QuickFilterButton.js.map
;