diff --git a/src/Interfaces/IProjectInterface.ts b/src/Interfaces/IProjectInterface.ts index 539d7b7..e2bc422 100644 --- a/src/Interfaces/IProjectInterface.ts +++ b/src/Interfaces/IProjectInterface.ts @@ -16,12 +16,12 @@ export interface IJenkinsProject { inQueue: boolean; keepDependencies: boolean; lastBuild: IJenkinsProjectBuild; - lastCompletedBuild: IJenkinsProjectBuild; + lastCompletedBuild: IJenkinsProjectBuild | null; lastFailedBuild: IJenkinsProjectBuild | null; - lastStableBuild: IJenkinsProjectBuild; - lastSuccessfulBuild: IJenkinsProjectBuild; + lastStableBuild: IJenkinsProjectBuild | null; + lastSuccessfulBuild: IJenkinsProjectBuild | null; lastUnstableBuild: IJenkinsProjectBuild | null; - lastUnsuccessfulBuild: IJenkinsProjectBuild; + lastUnsuccessfulBuild: IJenkinsProjectBuild | null; nextBuildNumber: number; property: IJenkinsProjectProperty[]; queueItem: unknown | null; diff --git a/src/screens/Jarvis/JarvisMain.tsx b/src/screens/Jarvis/JarvisMain.tsx index 207a206..f5edbaf 100644 --- a/src/screens/Jarvis/JarvisMain.tsx +++ b/src/screens/Jarvis/JarvisMain.tsx @@ -163,7 +163,7 @@ function JarvisMain(): React.ReactElement { {activeFeature === "parameters" && } {activeFeature === "settings" && } {activeFeature === "changes" && } - {activeFeature === "status_for_project" && } + {activeFeature === "status_for_project" && } {activeFeature === "testReport" && } {activeFeature === "build" && } diff --git a/src/screens/Jarvis/Utils/JarivsUtils.tsx b/src/screens/Jarvis/Utils/JarivsUtils.tsx index c46ed1a..e745fed 100644 --- a/src/screens/Jarvis/Utils/JarivsUtils.tsx +++ b/src/screens/Jarvis/Utils/JarivsUtils.tsx @@ -542,6 +542,7 @@ export class JarvisUtils { const collectedBuildData: IJenkinsBuild[] = []; if (!newData) throw new Error("No project data found, please check your internet connection and try again."); const newBuilds = newData.builds; + this.setProjectData(newData); /** * This Section is for adding new builds to the jobCardProps array. diff --git a/src/screens/Jarvis/Views/ProjectStatusView/ProjectStatusView.tsx b/src/screens/Jarvis/Views/ProjectStatusView/ProjectStatusView.tsx index b48dfd4..50dc030 100644 --- a/src/screens/Jarvis/Views/ProjectStatusView/ProjectStatusView.tsx +++ b/src/screens/Jarvis/Views/ProjectStatusView/ProjectStatusView.tsx @@ -10,11 +10,12 @@ import { IcoCube } from "@/Icons/pack_1"; import circleColor from "@/config/getCircleColor"; interface Props { - buildData: IJenkinsProject | null; + projectData: IJenkinsProject | null; } -const ProjectStatusView: React.FC = ({ buildData }) => { +const ProjectStatusView: React.FC = ({ projectData }) => { const [lastSuccessfulBuild, setLastSuccessfulBuild] = React.useState(null); + const [projectDataR, setprojectDataR] = React.useState(null); const openArtifact = async (artifact: string = "") => { const baseURL: string = StorageManager.get("baseurl") || ""; @@ -23,50 +24,55 @@ const ProjectStatusView: React.FC = ({ buildData }) => { await openLink(artifactURL, true); }; + + const getLastSuccessfulBuild = async () => { + const lastSuccessfulBuild: number | undefined = projectDataR?.lastSuccessfulBuild?.number; + if (!lastSuccessfulBuild) return null; + const response = await fetchUtils.fetchBuildData(lastSuccessfulBuild, StorageManager.get("projectName"), 5); + + return response; + }; useEffect(() => { - const getLastSuccessfulBuild = async () => { - const lastSuccessfulBuild: number | undefined = buildData?.lastSuccessfulBuild.number; - if (!lastSuccessfulBuild) return null; - const response = await fetchUtils.fetchBuildData(lastSuccessfulBuild, StorageManager.get("projectName"), 5); - return response; - }; - if (buildData) { - getLastSuccessfulBuild().then((data) => { - setLastSuccessfulBuild(data); - }); + if (projectData) { + if (lastSuccessfulBuild === null || lastSuccessfulBuild.number !== projectData.lastSuccessfulBuild?.number) { + getLastSuccessfulBuild().then((response) => { + if (response) setLastSuccessfulBuild(response); + }); + } } - }, [buildData]); + setprojectDataR(projectData); + }, [projectData]); return (
- {buildData ? ( + {projectDataR ? (
{/* Title & Description */}
- {buildData.color.includes("_anime") ? ( - + {projectDataR.color.includes("_anime") ? ( + ) : null} - +
{/* Two rows for Title and Comment */}
-

{buildData.displayName}

+

{projectDataR.displayName}

-
+
{/* Health Report */}
- {buildData.healthReport.length !== 0 ? ( - buildData.healthReport.map((healthReport, key) => ( + {projectDataR.healthReport.length !== 0 ? ( + projectDataR.healthReport.map((healthReport, key) => ( )) ) : null}