@choerodon/master
Version:
A package of Master for Choerodon platform.
391 lines (329 loc) • 15.1 kB
JavaScript
import "choerodon-ui/lib/tabs/style";
import _Tabs from "choerodon-ui/lib/tabs";
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }
function _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } _next(undefined); }); }; }
function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
function _iterableToArrayLimit(arr, i) { var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"]; if (_i == null) return; var _arr = []; var _n = true; var _d = false; var _s, _e; try { for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"] != null) _i["return"](); } finally { if (_d) throw _e; } } return _arr; }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
/* eslint-disable max-len */
/* eslint-disable jsx-a11y/click-events-have-key-events */
/* eslint-disable jsx-a11y/no-static-element-interactions */
import React, { createRef, useEffect, useState } from 'react';
import classnames from 'classnames';
import { FormattedMessage } from 'react-intl';
import { observer } from 'mobx-react-lite';
import { Content, Choerodon } from "../..";
import TaskRunDetail from "./components/taskRunDetail";
import TaskDetail from "./components/taskDetail";
import CodeShow from "./components/codeShow";
import { useSagaDetailsStore } from "./stores";
import "./index.less";
var TabPane = _Tabs.TabPane;
var intervals;
var SagaDetails = function SagaDetails() {
var _useSagaDetailsStore = useSagaDetailsStore(),
instance = _useSagaDetailsStore.instance,
formatMessage = _useSagaDetailsStore.intl.formatMessage,
intlPrefix = _useSagaDetailsStore.intlPrefix,
sagaStore = _useSagaDetailsStore.sagaStore,
sagaInstanceId = _useSagaDetailsStore.sagaInstanceId,
apiGetway = _useSagaDetailsStore.apiGetway,
organizationId = _useSagaDetailsStore.organizationId,
type = _useSagaDetailsStore.type,
tips = _useSagaDetailsStore.tips;
var getData = sagaStore.getData,
getLineDatas = sagaStore.getLineDatas,
setLineData = sagaStore.setLineData,
setData = sagaStore.setData,
getTask = sagaStore.getTask,
setTask = sagaStore.setTask,
retry = sagaStore.retry,
loadDetailData = sagaStore.loadDetailData;
useEffect(function () {
reload();
}, [sagaInstanceId]);
useEffect(function () {
addScrollEventListener();
}, []);
useEffect(function () {
return function () {
intervals && clearInterval(intervals);
};
}, []);
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
isDetailShow = _useState2[0],
setIsDetailShow = _useState2[1];
var _useState3 = useState(false),
_useState4 = _slicedToArray(_useState3, 2),
jsonTitle = _useState4[0],
setJsontitle = _useState4[1];
var _useState5 = useState(instance ? 'run' : ''),
_useState6 = _slicedToArray(_useState5, 2),
activeTab = _useState6[0],
setActiveTab = _useState6[1];
var _useState7 = useState(''),
_useState8 = _slicedToArray(_useState7, 2),
activeCode = _useState8[0],
setActiveCode = _useState8[1];
var _useState9 = useState(''),
_useState10 = _slicedToArray(_useState9, 2),
json = _useState10[0],
setJson = _useState10[1];
var taskImg = /*#__PURE__*/createRef(null);
var taskDetail = /*#__PURE__*/createRef(null);
var clsNames = classnames('c7n-saga-img-detail-wrapper', {
'c7n-saga-instance': !!instance
});
var getLineData = function getLineData(tasks) {
var lineData = {};
tasks.forEach(function (items) {
return items.forEach(function (item) {
lineData[item.code || item.taskCode] = item;
});
});
var tempTask = _objectSpread({}, lineData[(getTask === null || getTask === void 0 ? void 0 : getTask.code) || (getTask === null || getTask === void 0 ? void 0 : getTask.taskCode)]);
setTask(tempTask);
setLineData(lineData);
};
var reload = /*#__PURE__*/function () {
var _ref = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee() {
var res, tasks, tempStatus;
return regeneratorRuntime.wrap(function _callee$(_context) {
while (1) {
switch (_context.prev = _context.next) {
case 0:
_context.prev = 0;
_context.next = 3;
return loadDetailData(sagaInstanceId, apiGetway);
case 3:
res = _context.sent;
if (res && res.failed) {
Choerodon.prompt(res.message);
} else {
tasks = res.tasks, tempStatus = res.status;
setData(res);
getLineData(tasks);
if (tempStatus !== 'RUNNING' && intervals) {
clearInterval(intervals);
}
}
_context.next = 10;
break;
case 7:
_context.prev = 7;
_context.t0 = _context["catch"](0);
throw new Error(_context.t0);
case 10:
case "end":
return _context.stop();
}
}
}, _callee, null, [[0, 7]]);
}));
return function reload() {
return _ref.apply(this, arguments);
};
}();
function handleRetry(taskId) {
retry(taskId, organizationId, type, apiGetway).then(function (data) {
if (data.failed) {
Choerodon.prompt(data.message);
} else {
clearInterval(intervals);
intervals = setInterval(function () {
return reload();
}, 2000);
reload();
Choerodon.prompt(formatMessage({
id: "".concat(intlPrefix, ".task.retry.success")
}));
}
});
}
var renderLine = function renderLine() {
return /*#__PURE__*/React.createElement("div", {
className: "c7n-saga-img-line"
});
};
function getSidebarContainer() {
var content = document.body.getElementsByClassName('c7n-pro-modal-active')[0];
return content.getElementsByClassName('c7n-pro-modal-body')[0];
}
function addScrollEventListener() {
var container = getSidebarContainer();
container.addEventListener('scroll', function () {
return handleScroll(container);
});
}
var handleScroll = function handleScroll(container) {
var imgDom = taskImg.current;
var detail = taskDetail.current;
if (!imgDom) {
return;
}
var imgHeight = imgDom.scrollHeight;
var top = imgDom.offsetTop;
if (detail && imgHeight + top > container.clientHeight && imgHeight > detail.scrollHeight) {
var detailHeight = detail.scrollHeight;
var detailTop = container.scrollTop;
if (detailTop > top) {
if (detailHeight > container.clientHeight) {
detailTop = Math.min(imgHeight - detailHeight + top, detailTop);
}
detail.style.cssText = "top: ".concat(detailTop, "px");
detail.classList.add('autoscroll');
} else {
detail.classList.remove('autoscroll');
detail.style.cssText = '';
}
} else if (detail) {
detail.classList.remove('autoscroll');
detail.style.cssText = '';
}
};
var showDetail = function showDetail(code) {
if (!instance && code === 'output') {
return;
}
if (code === 'input' || code === 'output') {
setIsDetailShow(false);
setJsontitle(formatMessage({
id: "".concat(intlPrefix, ".task.").concat(code, ".title")
}));
setActiveCode(code);
setJson(getData[code]);
var _container = getSidebarContainer();
handleScroll(_container);
return;
}
var tempTask = getLineDatas ? _objectSpread({}, getLineDatas[code]) : {};
setIsDetailShow(true);
setJsontitle(false);
setTask(tempTask);
setActiveCode(code);
var container = getSidebarContainer();
handleScroll(container);
};
var squareWrapper = function squareWrapper(node) {
var status = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';
if (typeof node === 'string') {
var classNames = classnames('c7n-saga-img-square', _defineProperty({
'c7n-saga-task-active': node === activeCode
}, status.toLowerCase(), !!instance));
return /*#__PURE__*/React.createElement("div", {
className: classNames,
onClick: function onClick() {
return showDetail(node);
},
key: node
}, /*#__PURE__*/React.createElement("span", null, node));
}
return /*#__PURE__*/React.createElement("div", {
className: "c7n-saga-img-squares"
}, node);
};
var renderContent = function renderContent() {
var tasks = getData.tasks;
var line = renderLine();
var content = [];
if (tasks && tasks.length) {
content.push(line);
tasks.forEach(function (items) {
var node = items.map(function (_ref2) {
var code = _ref2.code,
taskCode = _ref2.taskCode,
status = _ref2.status;
return squareWrapper(code || taskCode, status);
});
if (node && node.length === 1) {
content.push(node);
} else {
content.push(squareWrapper(node));
}
content.push(line);
});
return content;
}
return line;
};
var circleWrapper = function circleWrapper(code) {
var tempClsNames = classnames('c7n-saga-img-circle', {
'c7n-saga-task-active': code.toLowerCase() === activeCode,
output: !instance && code === 'Output'
});
return /*#__PURE__*/React.createElement("div", {
className: tempClsNames,
onClick: function onClick() {
return showDetail(code.toLowerCase());
},
key: code
}, code);
};
var handleTabChange = function handleTabChange(TempActiveTab) {
setActiveTab(instance ? TempActiveTab : '');
};
var renderWithoutInstance = function renderWithoutInstance() {
return /*#__PURE__*/React.createElement("div", {
className: "c7n-saga-task-detail"
}, /*#__PURE__*/React.createElement("div", {
className: "c7n-saga-task-detail-title"
}, /*#__PURE__*/React.createElement(FormattedMessage, {
id: "".concat(intlPrefix, ".task.detail.title")
})), /*#__PURE__*/React.createElement(TaskDetail, null));
};
var renderJson = function renderJson() {
return /*#__PURE__*/React.createElement("div", {
className: "c7n-saga-task-detail"
}, /*#__PURE__*/React.createElement("div", {
className: "c7n-saga-task-detail-title"
}, jsonTitle), /*#__PURE__*/React.createElement("div", {
className: "c7n-saga-task-detail-content"
}, /*#__PURE__*/React.createElement("div", {
className: "c7n-saga-detail-json"
}, /*#__PURE__*/React.createElement(CodeShow, {
value: json || formatMessage({
id: "".concat(intlPrefix, ".json.nodata")
})
}))));
};
return /*#__PURE__*/React.createElement(Content, {
className: "sidebar-content"
}, tips && /*#__PURE__*/React.createElement("div", {
className: "".concat(clsNames, "-tips")
}, /*#__PURE__*/React.createElement("span", null, tips)), /*#__PURE__*/React.createElement("div", {
className: clsNames
}, /*#__PURE__*/React.createElement("div", {
className: "c7n-saga-img",
ref: taskImg
}, circleWrapper('Input'), renderContent(), circleWrapper('Output')), isDetailShow && /*#__PURE__*/React.createElement("div", {
className: "c7n-saga-img-detail",
ref: taskDetail
}, instance && /*#__PURE__*/React.createElement(_Tabs, {
activeKey: activeTab,
onChange: handleTabChange
}, /*#__PURE__*/React.createElement(TabPane, {
tab: /*#__PURE__*/React.createElement(FormattedMessage, {
id: "".concat(intlPrefix, ".task.run.title")
}),
key: "run"
}), /*#__PURE__*/React.createElement(TabPane, {
tab: /*#__PURE__*/React.createElement(FormattedMessage, {
id: "".concat(intlPrefix, ".task.detail.title")
}),
key: "detail"
})), instance && activeTab === 'run' ? /*#__PURE__*/React.createElement(TaskRunDetail, {
reload: reload,
handleRetry: handleRetry
}) : '', instance && activeTab !== 'run' ? /*#__PURE__*/React.createElement(TaskDetail, null) : '', instance ? '' : renderWithoutInstance()), jsonTitle && /*#__PURE__*/React.createElement("div", {
className: "c7n-saga-img-detail",
ref: taskDetail
}, renderJson())));
};
export default observer(SagaDetails);