forgeplus-react/src/forge/DevOps/OpsDetailRightpanel.jsx

108 lines
2.9 KiB
React
Raw Normal View History

2020-08-28 11:58:32 +08:00
import React, { useState, useEffect } from "react";
import { Spin } from "antd";
2020-08-09 22:39:58 +08:00
import { FlexAJ, AlignCenter } from "../Component/layout";
2020-08-28 11:58:32 +08:00
import axios from "axios";
2020-07-13 15:17:28 +08:00
2020-08-28 11:58:32 +08:00
export default ({
data,
stepN,
stageN,
projectId,
owner,
opsId,
rightSpin,
}) => {
const [coders, setCoders] = useState(undefined);
const [empty, setEmpty] = useState(false);
const [spining, setSpining] = useState(true);
const [stage, setStage] = useState(undefined);
const [step, setStep] = useState(undefined);
useEffect(() => {
2020-08-26 16:09:27 +08:00
setSpining(rightSpin);
2020-08-28 11:58:32 +08:00
}, [rightSpin]);
2020-08-27 15:15:03 +08:00
2020-08-28 11:58:32 +08:00
useEffect(() => {
if (data) {
2020-08-27 15:15:03 +08:00
let stages = data.stages;
2020-08-28 11:58:32 +08:00
if (stages && stages.length > 0) {
let pre = stageN
? stages.filter((item) => item.number === stageN)[0]
: stages[0];
2020-08-27 15:15:03 +08:00
setStage(pre);
let p = pre && pre.steps;
2020-08-28 11:58:32 +08:00
let sub = stepN
? p && p.length > 0 && p.filter((item) => item.id === stepN)[0]
: p[0];
2020-08-27 15:15:03 +08:00
setStep(sub);
2020-09-09 16:50:48 +08:00
if (sub && sub.status !== "skipped") {
2020-08-28 11:58:32 +08:00
getStep(pre.number, sub.number);
2020-08-27 15:15:03 +08:00
}
2020-09-09 16:50:48 +08:00
// 如果状态是skipped就不用去调用接口查询对应的out信息了
if(sub.status === "skipped"){
setCoders(undefined);
setEmpty(true);
setSpining(false);
}
2020-08-28 11:58:32 +08:00
} else {
2020-08-27 15:15:03 +08:00
setSpining(false);
}
}
2020-08-28 11:58:32 +08:00
}, [data, stageN, stepN]);
2020-08-27 15:15:03 +08:00
2020-08-28 11:58:32 +08:00
function getStep(stageN, stepN) {
if (stageN && stepN) {
2020-08-27 15:15:03 +08:00
const url = `/${owner}/${projectId}/builds/${opsId}/logs/${stageN}/${stepN}.json`;
2020-09-09 15:35:22 +08:00
axios.get(url).then((result) => {
if (result) {
setCoders(result.data);
setSpining(false);
}
})
.catch((error) => {
console.log(error);
});
2020-08-09 22:39:58 +08:00
}
2020-08-27 15:15:03 +08:00
}
2020-08-09 22:39:58 +08:00
return (
2020-08-26 16:09:27 +08:00
<Spin spinning={spining}>
<div className="rightMainContent">
2020-08-28 11:58:32 +08:00
{data && data.status !== "error" ? (
2020-08-26 16:09:27 +08:00
<div>
2020-08-27 15:15:03 +08:00
<FlexAJ className="items">
<span>{step && step.name}</span>
<AlignCenter>
2020-08-28 11:58:32 +08:00
{step && step.duration_time}
2020-08-27 15:15:03 +08:00
<i className="iconfont icon-sanjiaoxing-down"></i>
</AlignCenter>
</FlexAJ>
<div>
2020-08-28 11:58:32 +08:00
{coders && coders.length > 0 ? (
coders.map((item, key) => {
return (
2020-08-27 15:15:03 +08:00
<div className="opsDetailOut">
2020-08-28 11:58:32 +08:00
<span>{key + 1}</span>
2020-08-27 15:15:03 +08:00
<p>{item.out}</p>
</div>
2020-08-28 11:58:32 +08:00
);
})
) : empty ? (
2020-08-27 15:15:03 +08:00
<div className="opsDetailOut">
<span>1</span>
2020-08-28 11:58:32 +08:00
<p>
{stage && stage.name} {step && step.name}: Skipped
</p>
2020-08-27 15:15:03 +08:00
</div>
2020-08-28 11:58:32 +08:00
) : (
""
)}
2020-08-27 15:15:03 +08:00
</div>
2020-08-26 16:09:27 +08:00
</div>
2020-08-28 11:58:32 +08:00
) : (
<div style={{ color: "red" }}>error:{data && data.error}</div>
)}
2020-08-26 16:09:27 +08:00
</div>
</Spin>
2020-08-09 22:39:58 +08:00
);
2020-08-28 11:58:32 +08:00
};