diff --git a/frontend/pages/DashboardPage/cards/OperatingSystems/OperatingSystemsTableConfig.tsx b/frontend/pages/DashboardPage/cards/OperatingSystems/OperatingSystemsTableConfig.tsx index 024aabf43b..8ee36a20cf 100644 --- a/frontend/pages/DashboardPage/cards/OperatingSystems/OperatingSystemsTableConfig.tsx +++ b/frontend/pages/DashboardPage/cards/OperatingSystems/OperatingSystemsTableConfig.tsx @@ -1,7 +1,13 @@ +/** + dashboard/:osname Dashboard > OS dropdown selected > Operating system table + software/os > OS tab > Operating system table +*/ + import React from "react"; import { Column } from "react-table"; import { InjectedRouter } from "react-router"; +import { buildQueryStringFromParams } from "utilities/url"; import PATHS from "router/paths"; import { formatOperatingSystemDisplayName, @@ -77,16 +83,24 @@ const generateDefaultTableHeaders = ( } const { name, os_version_id } = cellProps.row.original; + + const teamQueryParam = buildQueryStringFromParams({ + team_id: teamId, + }); + const softwareOsDetailsPath = `${PATHS.SOFTWARE_OS_DETAILS( + os_version_id + )}?${teamQueryParam}`; + const onClickSoftware = (e: React.MouseEvent) => { // Allows for button to be clickable in a clickable row e.stopPropagation(); - router?.push(PATHS.SOFTWARE_OS_DETAILS(os_version_id)); + router?.push(softwareOsDetailsPath); }; return ( diff --git a/frontend/pages/SoftwarePage/SoftwareOSDetailsPage/SoftwareOSDetailsPage.tsx b/frontend/pages/SoftwarePage/SoftwareOSDetailsPage/SoftwareOSDetailsPage.tsx index 93216e4541..26f071f74e 100644 --- a/frontend/pages/SoftwarePage/SoftwareOSDetailsPage/SoftwareOSDetailsPage.tsx +++ b/frontend/pages/SoftwarePage/SoftwareOSDetailsPage/SoftwareOSDetailsPage.tsx @@ -2,6 +2,7 @@ import React, { useCallback, useContext } from "react"; import { useQuery } from "react-query"; +import { useErrorHandler } from "react-error-boundary"; import { RouteComponentProps } from "react-router"; import { AxiosError } from "axios"; @@ -18,7 +19,6 @@ import { SUPPORT_LINK } from "utilities/constants"; import Spinner from "components/Spinner"; import TableDataError from "components/DataError"; -import Fleet404 from "pages/errors/Fleet404"; import MainContent from "components/MainContent"; import EmptyTable from "components/EmptyTable"; import CustomLink from "components/CustomLink"; @@ -65,6 +65,7 @@ const SoftwareOSDetailsPage = ({ location, }: ISoftwareOSDetailsPageProps) => { const { isPremiumTier, isOnGlobalTeam } = useContext(AppContext); + const handlePageError = useErrorHandler(); const osVersionIdFromURL = parseInt(routeParams.id, 10); @@ -84,7 +85,6 @@ const SoftwareOSDetailsPage = ({ data: osVersionDetails, isLoading, isError: isOsVersionError, - error: osVersionError, } = useQuery< IOSVersionResponse, AxiosError, @@ -102,6 +102,7 @@ const SoftwareOSDetailsPage = ({ { enabled: !!osVersionIdFromURL, select: (data) => data.os_version, + onError: (error) => handlePageError(error), } ); @@ -141,10 +142,6 @@ const SoftwareOSDetailsPage = ({ } if (isOsVersionError) { - // confirm okay to cast to AxiosError like this - if (osVersionError.status === 404) { - return ; - } return ; } diff --git a/frontend/pages/SoftwarePage/SoftwareTitleDetailsPage/SoftwareTitleDetailsPage.tsx b/frontend/pages/SoftwarePage/SoftwareTitleDetailsPage/SoftwareTitleDetailsPage.tsx index 55a11f6d58..d7b03f0354 100644 --- a/frontend/pages/SoftwarePage/SoftwareTitleDetailsPage/SoftwareTitleDetailsPage.tsx +++ b/frontend/pages/SoftwarePage/SoftwareTitleDetailsPage/SoftwareTitleDetailsPage.tsx @@ -2,6 +2,7 @@ import React, { useCallback, useContext } from "react"; import { useQuery } from "react-query"; +import { useErrorHandler } from "react-error-boundary"; import { RouteComponentProps } from "react-router"; import { AxiosError } from "axios"; @@ -17,7 +18,6 @@ import softwareAPI, { import Spinner from "components/Spinner"; import TableDataError from "components/DataError"; -import Fleet404 from "pages/errors/Fleet404"; import MainContent from "components/MainContent"; import TeamsHeader from "components/TeamsHeader"; import Card from "components/Card"; @@ -43,6 +43,7 @@ const SoftwareTitleDetailsPage = ({ location, }: ISoftwareTitleDetailsPageProps) => { const { isPremiumTier, isOnGlobalTeam } = useContext(AppContext); + const handlePageError = useErrorHandler(); // TODO: handle non integer values const softwareId = parseInt(routeParams.id, 10); @@ -63,7 +64,6 @@ const SoftwareTitleDetailsPage = ({ data: softwareTitle, isLoading: isSoftwareTitleLoading, isError: isSoftwareTitleError, - error: softwareTitleError, } = useQuery< ISoftwareTitleResponse, AxiosError, @@ -74,6 +74,7 @@ const SoftwareTitleDetailsPage = ({ ({ queryKey }) => softwareAPI.getSoftwareTitle(queryKey[0]), { select: (data) => data.software_title, + onError: (error) => handlePageError(error), } ); @@ -90,10 +91,6 @@ const SoftwareTitleDetailsPage = ({ } if (isSoftwareTitleError) { - // confirm okay to cast to AxiosError like this - if (softwareTitleError.status === 404) { - return ; - } return ; } diff --git a/frontend/pages/SoftwarePage/SoftwareVersionDetailsPage/SoftwareVersionDetailsPage.tsx b/frontend/pages/SoftwarePage/SoftwareVersionDetailsPage/SoftwareVersionDetailsPage.tsx index 7204786d89..52696f2f5c 100644 --- a/frontend/pages/SoftwarePage/SoftwareVersionDetailsPage/SoftwareVersionDetailsPage.tsx +++ b/frontend/pages/SoftwarePage/SoftwareVersionDetailsPage/SoftwareVersionDetailsPage.tsx @@ -2,6 +2,7 @@ import React, { useCallback, useContext } from "react"; import { useQuery } from "react-query"; +import { useErrorHandler } from "react-error-boundary"; import { RouteComponentProps } from "react-router"; import { AxiosError } from "axios"; @@ -47,6 +48,7 @@ const SoftwareVersionDetailsPage = ({ location, }: ISoftwareTitleDetailsPageProps) => { const { isPremiumTier, isOnGlobalTeam } = useContext(AppContext); + const handlePageError = useErrorHandler(); const versionId = parseInt(routeParams.id, 10); @@ -66,7 +68,6 @@ const SoftwareVersionDetailsPage = ({ data: softwareVersion, isLoading: isSoftwareVersionLoading, isError: isSoftwareVersionError, - error: softwareVersionError, } = useQuery< ISoftwareVersionResponse, AxiosError, @@ -77,6 +78,7 @@ const SoftwareVersionDetailsPage = ({ ({ queryKey }) => softwareAPI.getSoftwareVersion(queryKey[0]), { select: (data) => data.software, + onError: (error) => handlePageError(error), } ); @@ -108,10 +110,6 @@ const SoftwareVersionDetailsPage = ({ } if (isSoftwareVersionError) { - // confirm okay to cast to AxiosError like this - if (softwareVersionError.status === 404) { - return ; - } return ; } diff --git a/frontend/pages/SoftwarePage/SoftwareVulnerabilityDetailsPage/SoftwareVulnerabilityDetailsPage.tsx b/frontend/pages/SoftwarePage/SoftwareVulnerabilityDetailsPage/SoftwareVulnerabilityDetailsPage.tsx index c5eddda224..c92d44b276 100644 --- a/frontend/pages/SoftwarePage/SoftwareVulnerabilityDetailsPage/SoftwareVulnerabilityDetailsPage.tsx +++ b/frontend/pages/SoftwarePage/SoftwareVulnerabilityDetailsPage/SoftwareVulnerabilityDetailsPage.tsx @@ -2,6 +2,7 @@ import React, { useCallback, useContext } from "react"; import { useQuery } from "react-query"; +import { useErrorHandler } from "react-error-boundary"; import { RouteComponentProps } from "react-router"; import { AxiosError } from "axios"; @@ -17,7 +18,6 @@ import softwareVulnAPI, { import Spinner from "components/Spinner"; import DataError from "components/DataError"; -import Fleet404 from "pages/errors/Fleet404"; import MainContent from "components/MainContent"; import TeamsHeader from "components/TeamsHeader"; import Card from "components/Card"; @@ -44,6 +44,7 @@ const SoftwareVulnerabilityDetailsPage = ({ location, }: ISoftwareVulnerabilityDetailsPageProps) => { const { isPremiumTier, isOnGlobalTeam } = useContext(AppContext); + const handlePageError = useErrorHandler(); const { currentTeamId, @@ -61,7 +62,6 @@ const SoftwareVulnerabilityDetailsPage = ({ data: vuln, isLoading: isVulnLoading, isError: isVulnError, - error: vulnError, } = useQuery< IVulnerabilityResponse, AxiosError, @@ -80,6 +80,7 @@ const SoftwareVulnerabilityDetailsPage = ({ }, { select: (data) => data.vulnerability, + onError: (error) => handlePageError(error), } ); @@ -132,10 +133,6 @@ const SoftwareVulnerabilityDetailsPage = ({ return ; } if (isVulnError) { - // confirm okay to cast to AxiosError like this - if (vulnError.status === 404) { - return ; - } return ; } return (