@aliretail/react-materials-components
Version:
291 lines (243 loc) • 9.2 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports["default"] = void 0;
var _drawer = _interopRequireDefault(require("@alifd/next/lib/drawer"));
var _message = _interopRequireDefault(require("@alifd/next/lib/message"));
var _splitButton = _interopRequireDefault(require("@alifd/next/lib/split-button"));
var _dialog = _interopRequireDefault(require("@alifd/next/lib/dialog"));
var _inheritsLoose2 = _interopRequireDefault(require("@babel/runtime/helpers/inheritsLoose"));
var _react = _interopRequireDefault(require("react"));
var _propTypes = _interopRequireDefault(require("prop-types"));
var _History = _interopRequireDefault(require("./History"));
var _QueryInfo = _interopRequireDefault(require("./QueryInfo"));
var Status = {
EXPORTING: 'exporting',
DONE: 'export_done',
ERROR: 'error'
};
var DataExport = /*#__PURE__*/function (_React$Component) {
(0, _inheritsLoose2["default"])(DataExport, _React$Component);
function DataExport() {
var _this;
for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
_this = _React$Component.call.apply(_React$Component, [this].concat(args)) || this;
_this.historyRef = /*#__PURE__*/_react["default"].createRef();
_this.state = {
exportHistoryVisible: false,
exportConfirmVisible: false,
currentPage: 1,
exportQuery: {}
};
_this.handleExportButtonClick = function (event) {
var onExportButtonClick = _this.props.onExportButtonClick;
var query = onExportButtonClick(event);
_this.setState({
exportHistoryVisible: false,
exportConfirmVisible: true,
exportQuery: query
});
};
_this.handleCancelExport = function () {
_this.setState({
exportConfirmVisible: false
});
};
_this.handleCloseHistory = function () {
_this.setState({
exportHistoryVisible: false
});
};
_this.handleShowExportHistoryButtonClick = function () {
_this.setState({
exportHistoryVisible: true,
exportConfirmVisible: false,
currentPage: 1
});
};
_this.handleDoExportButtonClick = function () {
var exportQuery = _this.state.exportQuery;
_this.doExport(exportQuery);
};
_this.doExport = function (query) {
var onExport = _this.props.onExport;
onExport(query).then(function (response) {
if (response.success) {
_this.queryExportState((response.data || {}).jobid);
} else {
_this.onExportFinish(Status.ERROR, response.message, null);
}
}, function (e) {
_this.onExportFinish(Status.ERROR, e.message, null);
});
};
_this.queryExportState = function (jobId, retryCount) {
if (retryCount === void 0) {
retryCount = 0;
}
var duration = 1000;
var queryExportState = _this.props.queryExportState;
return queryExportState(jobId).then(function (resp) {
if (!resp.success) {
if (retryCount > 2) {
_this.onExportFinish(Status.ERROR, resp.message, jobId);
} else {
setTimeout(function () {
return _this.queryExportState(jobId, retryCount + 1);
}, duration);
}
} else if (resp.finished === 100) {
setTimeout(function () {
return _this.onExportFinish(Status.DONE, resp, jobId);
}, 100);
} else {
_this.onExportFinish(Status.EXPORTING, resp, jobId);
setTimeout(function () {
return _this.queryExportState(jobId);
}, duration);
}
});
};
_this.onExportFinish = function (status, result, jobId) {
if (status === Status.ERROR) {
if (!_this.props.onExportError || !_this.props.onExportError(result)) {
_dialog["default"].show({
type: 'alert',
title: '导出失败',
content: result
});
}
} else if (status === Status.DONE) {
if (_this.props.onExportSuccess) {
_this.props.onExportSuccess(result);
}
if (result && result.outputFile) {// this.downloadFile(result.outputFile[0]);
}
if (_this.historyRef.current) {
_this.historyRef.current.refreshHistory();
}
}
_this.handleShowExportHistoryButtonClick();
};
return _this;
}
var _proto = DataExport.prototype;
_proto.renderChildren = function renderChildren() {
var _this2 = this;
var children = this.props.children;
var content = null;
if (children) {
content = _react["default"].Children.map(children, function (child) {
if (child) {
var type = child.props['data-button-type'];
if (type === 'export') {
return /*#__PURE__*/_react["default"].cloneElement(child, {
onClick: _this2.handleExportButtonClick,
key: 'export'
});
} else if (type === 'history') {
return /*#__PURE__*/_react["default"].cloneElement(child, {
onClick: _this2.handleShowExportHistoryButtonClick,
key: 'history'
});
} else {
return child;
}
}
return null;
});
} else {
content = /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, /*#__PURE__*/_react["default"].createElement(_splitButton["default"], {
leftButtonProps: {
onClick: this.handleExportButtonClick
},
onItemClick: this.handleShowExportHistoryButtonClick,
label: '导出',
type: "secondary"
}, /*#__PURE__*/_react["default"].createElement(_splitButton["default"].Item, {
key: "\u5BFC\u51FA\u5386\u53F2"
}, "\u5BFC\u51FA\u5386\u53F2")));
}
return content;
};
_proto.renderConfirm = function renderConfirm() {
var _this$state = this.state,
exportConfirmVisible = _this$state.exportConfirmVisible,
exportQuery = _this$state.exportQuery;
var translateQuery = this.props.translateQuery;
if (!exportConfirmVisible) {
return null;
}
var classPrefix = 'data-export-confirm-';
var conditon = translateQuery(exportQuery);
return /*#__PURE__*/_react["default"].createElement(_dialog["default"], {
title: "\u5BFC\u51FA",
visible: true,
onOk: this.handleDoExportButtonClick,
onCancel: this.handleShowExportHistoryButtonClick,
onClose: this.handleCancelExport,
okProps: {
children: '导出'
},
cancelProps: {
children: '查看历史导出报表'
},
className: classPrefix + "body",
overlayProps: {
wrapperClassName: classPrefix + "dialog"
}
}, /*#__PURE__*/_react["default"].createElement(_message["default"], {
type: "notice",
className: classPrefix + "message"
}, "\u5DF2\u751F\u6210\u7684\u62A5\u8868\u5C06\u4E3A\u60A8\u4FDD\u755930\u5929"), /*#__PURE__*/_react["default"].createElement("h4", {
className: classPrefix + "title"
}, "\u67E5\u8BE2\u6761\u4EF6"), /*#__PURE__*/_react["default"].createElement("div", {
className: classPrefix + "query-wrapper"
}, /*#__PURE__*/_react["default"].createElement(_QueryInfo["default"], {
data: conditon
})));
};
_proto.renderHistory = function renderHistory() {
var exportHistoryVisible = this.state.exportHistoryVisible;
if (!exportHistoryVisible) {
return null;
}
var _this$props = this.props,
onFetchHistory = _this$props.onFetchHistory,
translateQuery = _this$props.translateQuery;
return /*#__PURE__*/_react["default"].createElement(_drawer["default"], {
title: "\u5BFC\u51FA\u5386\u53F2",
placement: "right",
width: "800px",
visible: true,
onClose: this.handleCloseHistory
}, /*#__PURE__*/_react["default"].createElement(_message["default"], {
type: "notice",
className: 'data-export-confirm-message'
}, "\u5DF2\u751F\u6210\u62A5\u8868\u5C06\u4E3A\u60A8\u4FDD\u755930\u5929\uFF0C\u8BF7\u53CA\u65F6\u4E0B\u8F7D"), /*#__PURE__*/_react["default"].createElement(_History["default"], {
ref: this.historyRef,
onFetchHistory: onFetchHistory,
translateQuery: translateQuery,
doExport: this.doExport
}));
};
_proto.render = function render() {
return /*#__PURE__*/_react["default"].createElement(_react["default"].Fragment, null, this.renderChildren(), this.renderConfirm(), this.renderHistory());
};
return DataExport;
}(_react["default"].Component);
DataExport.propTypes = {
onExport: _propTypes["default"].func.isRequired,
onExportButtonClick: _propTypes["default"].func.isRequired,
onFetchHistory: _propTypes["default"].func.isRequired,
translateQuery: _propTypes["default"].func.isRequired,
children: _propTypes["default"].node,
onExportError: _propTypes["default"].func
};
DataExport.defaultProps = {
children: null
};
var _default = DataExport;
exports["default"] = _default;