diff --git a/changes/22965-error-cleanup b/changes/22965-error-cleanup
new file mode 100644
index 0000000000..40c23de691
--- /dev/null
+++ b/changes/22965-error-cleanup
@@ -0,0 +1 @@
+* Added a more descriptive error message when install or uninstall details do not exist for an activity
diff --git a/frontend/components/ActivityDetails/InstallDetails/SoftwareInstallDetails/SoftwareInstallDetails.tsx b/frontend/components/ActivityDetails/InstallDetails/SoftwareInstallDetails/SoftwareInstallDetails.tsx
index e3747f952a..91d13ad1ed 100644
--- a/frontend/components/ActivityDetails/InstallDetails/SoftwareInstallDetails/SoftwareInstallDetails.tsx
+++ b/frontend/components/ActivityDetails/InstallDetails/SoftwareInstallDetails/SoftwareInstallDetails.tsx
@@ -1,6 +1,7 @@
import React from "react";
import { useQuery } from "react-query";
import { formatDistanceToNow } from "date-fns";
+import { AxiosError } from "axios";
import { IActivityDetails } from "interfaces/activity";
import {
@@ -90,9 +91,9 @@ export const SoftwareInstallDetails = ({
host_display_name = "",
install_uuid = "",
}: IPackageInstallDetails) => {
- const { data: result, isLoading, isError } = useQuery<
+ const { data: result, isLoading, isError, error } = useQuery<
ISoftwareInstallResults,
- Error,
+ AxiosError,
ISoftwareInstallResult
>(
["softwareInstallResults", install_uuid],
@@ -103,11 +104,19 @@ export const SoftwareInstallDetails = ({
refetchOnWindowFocus: false,
staleTime: 3000,
select: (data) => data.results,
+ retry: (failureCount, err) => err?.status !== 404 && failureCount < 3,
}
);
if (isLoading) {
return ;
+ } else if (isError && error?.status === 404) {
+ return (
+
+ );
} else if (isError) {
return ;
} else if (!result) {
diff --git a/frontend/components/ActivityDetails/InstallDetails/SoftwareUninstallDetailsModal/SoftwareUninstallDetailsModal.tsx b/frontend/components/ActivityDetails/InstallDetails/SoftwareUninstallDetailsModal/SoftwareUninstallDetailsModal.tsx
index dfb4ef13c9..e0838b0717 100644
--- a/frontend/components/ActivityDetails/InstallDetails/SoftwareUninstallDetailsModal/SoftwareUninstallDetailsModal.tsx
+++ b/frontend/components/ActivityDetails/InstallDetails/SoftwareUninstallDetailsModal/SoftwareUninstallDetailsModal.tsx
@@ -9,6 +9,7 @@ import { IActivityDetails } from "interfaces/activity";
import { isPendingStatus, SoftwareInstallStatus } from "interfaces/software";
import React from "react";
import { useQuery } from "react-query";
+import { AxiosError } from "axios";
import scriptsAPI, { IScriptResultResponse } from "services/entities/scripts";
import { DEFAULT_USE_QUERY_OPTIONS } from "utilities/constants";
import {
@@ -55,7 +56,10 @@ const StatusMessage = ({
return (
Fleet {getInstallDetailsStatusPredicate(status)} {software_title}{" "}
@@ -80,20 +84,29 @@ const SoftwareUninstallDetailsModal = ({
software_title = "",
status = "",
}: ISoftwareUninstallDetails) => {
- const {
- data: scriptResult,
- isLoading,
- isError,
- } = useQuery(
+ const { data: scriptResult, isLoading, isError, error } = useQuery<
+ IScriptResultResponse,
+ AxiosError
+ >(
["uninstallResult", details.script_execution_id],
() => {
return scriptsAPI.getScriptResult(script_execution_id);
},
- { ...DEFAULT_USE_QUERY_OPTIONS }
+ {
+ ...DEFAULT_USE_QUERY_OPTIONS,
+ retry: (failureCount, err) => err?.status !== 404 && failureCount < 3,
+ }
);
if (isLoading) {
return ;
+ } else if (isError && error?.status === 404) {
+ return (
+
+ );
} else if (isError) {
return ;
} else if (!scriptResult) {