diff --git a/frontend/pages/SoftwarePage/SoftwarePage.tsx b/frontend/pages/SoftwarePage/SoftwarePage.tsx index 7def709f9aa..5887d0dd116 100644 --- a/frontend/pages/SoftwarePage/SoftwarePage.tsx +++ b/frontend/pages/SoftwarePage/SoftwarePage.tsx @@ -151,6 +151,9 @@ const SoftwarePage = ({ children, router, location }: ISoftwarePageProps) => { const [showPreviewTicketModal, setShowPreviewTicketModal] = useState(false); const [showAddSoftwareModal, setShowAddSoftwareModal] = useState(false); const [resetPageIndex, setResetPageIndex] = useState(false); + const [addedSoftwareToken, setAddedSoftwareToken] = useState( + null + ); const { currentTeamId, @@ -385,6 +388,7 @@ const SoftwarePage = ({ children, router, location }: ISoftwarePageProps) => { showExploitedVulnerabilitiesOnly, softwareFilter, resetPageIndex, + addedSoftwareToken, })} ); @@ -424,6 +428,7 @@ const SoftwarePage = ({ children, router, location }: ISoftwarePageProps) => { teamId={currentTeamId ?? 0} router={router} onExit={toggleAddSoftwareModal} + setAddedSoftwareToken={setAddedSoftwareToken} /> )} diff --git a/frontend/pages/SoftwarePage/SoftwareTitles/SoftwareTitles.tsx b/frontend/pages/SoftwarePage/SoftwareTitles/SoftwareTitles.tsx index 1a90c284f5c..6456d616ea6 100644 --- a/frontend/pages/SoftwarePage/SoftwareTitles/SoftwareTitles.tsx +++ b/frontend/pages/SoftwarePage/SoftwareTitles/SoftwareTitles.tsx @@ -43,6 +43,7 @@ interface ISoftwareTitlesProps { currentPage: number; teamId?: number; resetPageIndex: boolean; + addedSoftwareToken: string | null; } const SoftwareTitles = ({ @@ -56,6 +57,7 @@ const SoftwareTitles = ({ currentPage, teamId, resetPageIndex, + addedSoftwareToken, }: ISoftwareTitlesProps) => { const showVersions = location.pathname === PATHS.SOFTWARE_VERSIONS; @@ -80,6 +82,7 @@ const SoftwareTitles = ({ orderDirection, orderKey, teamId, + addedSoftwareToken, ...getSoftwareFilterForQueryKey(softwareFilter), }, ], @@ -113,6 +116,7 @@ const SoftwareTitles = ({ orderKey, teamId, vulnerable: softwareFilter === "vulnerableSoftware", + addedSoftwareToken, }, ], ({ queryKey: [queryKey] }) => diff --git a/frontend/pages/SoftwarePage/components/AddPackage/AddPackage.tsx b/frontend/pages/SoftwarePage/components/AddPackage/AddPackage.tsx index 78e559b750a..2e7e4b17a56 100644 --- a/frontend/pages/SoftwarePage/components/AddPackage/AddPackage.tsx +++ b/frontend/pages/SoftwarePage/components/AddPackage/AddPackage.tsx @@ -21,9 +21,15 @@ interface IAddPackageProps { teamId: number; router: InjectedRouter; onExit: () => void; + setAddedSoftwareToken: (token: string) => void; } -const AddPackage = ({ teamId, router, onExit }: IAddPackageProps) => { +const AddPackage = ({ + teamId, + router, + onExit, + setAddedSoftwareToken, +}: IAddPackageProps) => { const { renderFlash } = useContext(NotificationContext); const [isUploading, setIsUploading] = useState(false); @@ -86,7 +92,8 @@ const AddPackage = ({ teamId, router, onExit }: IAddPackageProps) => { } else { newQueryParams.available_for_install = true; } - + // any unique string - triggers SW refetch + setAddedSoftwareToken(`${Date.now()}`); router.push( `${PATHS.SOFTWARE_TITLES}?${buildQueryStringFromParams(newQueryParams)}` ); diff --git a/frontend/pages/SoftwarePage/components/AddSoftwareModal/AddSoftwareModal.tsx b/frontend/pages/SoftwarePage/components/AddSoftwareModal/AddSoftwareModal.tsx index f6af29e7b41..7f55adbc9a9 100644 --- a/frontend/pages/SoftwarePage/components/AddSoftwareModal/AddSoftwareModal.tsx +++ b/frontend/pages/SoftwarePage/components/AddSoftwareModal/AddSoftwareModal.tsx @@ -37,12 +37,14 @@ interface IAddSoftwareModalProps { teamId: number; router: InjectedRouter; onExit: () => void; + setAddedSoftwareToken: (token: string) => void; } const AddSoftwareModal = ({ teamId, router, onExit, + setAddedSoftwareToken, }: IAddSoftwareModalProps) => { return ( App Store (VPP) - + - + diff --git a/frontend/pages/SoftwarePage/components/AppStoreVpp/AppStoreVpp.tsx b/frontend/pages/SoftwarePage/components/AppStoreVpp/AppStoreVpp.tsx index 874d2d88492..4a210b93d5e 100644 --- a/frontend/pages/SoftwarePage/components/AppStoreVpp/AppStoreVpp.tsx +++ b/frontend/pages/SoftwarePage/components/AppStoreVpp/AppStoreVpp.tsx @@ -130,9 +130,15 @@ interface IAppStoreVppProps { teamId: number; router: InjectedRouter; onExit: () => void; + setAddedSoftwareToken: (token: string) => void; } -const AppStoreVpp = ({ teamId, router, onExit }: IAppStoreVppProps) => { +const AppStoreVpp = ({ + teamId, + router, + onExit, + setAddedSoftwareToken, +}: IAppStoreVppProps) => { const { renderFlash } = useContext(NotificationContext); const [isSubmitDisabled, setIsSubmitDisabled] = useState(true); const [selectedApp, setSelectedApp] = useState(null); @@ -189,6 +195,8 @@ const AppStoreVpp = ({ teamId, router, onExit }: IAppStoreVppProps) => { team_id: teamId, available_for_install: true, }); + // any unique string - triggers SW refetch + setAddedSoftwareToken(`${Date.now()}`); router.push(`${PATHS.SOFTWARE}?${queryParams}`); } catch (e) { renderFlash("error", getErrorMessage(e)); diff --git a/frontend/services/entities/software.ts b/frontend/services/entities/software.ts index ecb4d988474..d3f85f9d166 100644 --- a/frontend/services/entities/software.ts +++ b/frontend/services/entities/software.ts @@ -56,10 +56,14 @@ export interface ISoftwareVersionResponse { } export interface ISoftwareVersionsQueryKey extends ISoftwareApiParams { + // used to trigger software refetches from sibling pages + addedSoftwareToken: string | null; scope: "software-versions"; } export interface ISoftwareTitlesQueryKey extends ISoftwareApiParams { + // used to trigger software refetches from sibling pages + addedSoftwareToken: string | null; scope: "software-titles"; }