UNPKG

@choerodon/master

Version:
391 lines (329 loc) 15.1 kB
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);