diff --git a/frontend/components/MainContent/MainContent.tsx b/frontend/components/MainContent/MainContent.tsx index 5c322637d6..ad31ba4711 100644 --- a/frontend/components/MainContent/MainContent.tsx +++ b/frontend/components/MainContent/MainContent.tsx @@ -37,9 +37,12 @@ const MainContent = ({ config, isPremiumTier, noSandboxHosts, - apnsExpiry = "", - abmExpiry = "", - vppExpiry = "", + isApplePnsExpired, + isAppleBmExpired, + isVppExpired, + willAppleBmExpire, + willApplePnsExpire, + willVppExpire, } = useContext(AppContext); const sandboxExpiryTime = @@ -49,29 +52,22 @@ const MainContent = ({ const renderAppWideBanner = () => { const isAppleBmTermsExpired = config?.mdm?.apple_bm_terms_expired; - const isApplePnsExpired = hasLicenseExpired(apnsExpiry); - const willApplePnsExpireIn30Days = willExpireWithinXDays(apnsExpiry, 30); - const isAppleBmExpired = hasLicenseExpired(abmExpiry); // NOTE: See Rachel's related FIXME added to App.tsx in https://github.com/fleetdm/fleet/pull/19571 - const willAppleBmExpireIn30Days = willExpireWithinXDays(abmExpiry, 30); const isFleetLicenseExpired = hasLicenseExpired( config?.license.expiration || "" ); - const isVppExpired = hasLicenseExpired(vppExpiry); - const willVppExpireIn30Days = willExpireWithinXDays(vppExpiry, 30); - let banner: JSX.Element | null = null; if (isPremiumTier) { - if (isApplePnsExpired || willApplePnsExpireIn30Days) { + if (isApplePnsExpired || willApplePnsExpire) { banner = ; - } else if (isAppleBmExpired || willAppleBmExpireIn30Days) { + } else if (isAppleBmExpired || willAppleBmExpire) { banner = ; } else if (isAppleBmTermsExpired) { banner = ; } else if (isFleetLicenseExpired) { banner = ; - } else if (isVppExpired || willVppExpireIn30Days) { + } else if (isVppExpired || willVppExpire) { banner = ; } } diff --git a/frontend/context/app.tsx b/frontend/context/app.tsx index bf84e72aa3..da774708d9 100644 --- a/frontend/context/app.tsx +++ b/frontend/context/app.tsx @@ -11,6 +11,7 @@ import { import { IUser } from "interfaces/user"; import permissions from "utilities/permissions"; import sort from "utilities/sort"; +import { hasLicenseExpired, willExpireWithinXDays } from "utilities/helpers"; enum ACTIONS { SET_AVAILABLE_TEAMS = "SET_AVAILABLE_TEAMS", @@ -144,6 +145,12 @@ type InitialStateType = { isOnlyObserver?: boolean; isObserverPlus?: boolean; isNoAccess?: boolean; + isAppleBmExpired: boolean; + isApplePnsExpired: boolean; + isVppExpired: boolean; + willAppleBmExpire: boolean; + willApplePnsExpire: boolean; + willVppExpire: boolean; abmExpiry?: string; apnsExpiry?: string; vppExpiry?: string; @@ -206,6 +213,12 @@ export const initialState = { filteredSoftwarePath: undefined, filteredQueriesPath: undefined, filteredPoliciesPath: undefined, + isAppleBmExpired: false, + isApplePnsExpired: false, + isVppExpired: false, + willAppleBmExpire: false, + willApplePnsExpire: false, + willVppExpire: false, setAvailableTeams: () => null, setCurrentUser: () => null, setCurrentTeam: () => null, @@ -339,6 +352,8 @@ const reducer = (state: InitialStateType, action: IAction) => { return { ...state, abmExpiry, + isAppleBmExpired: hasLicenseExpired(abmExpiry), + willAppleBmExpire: willExpireWithinXDays(abmExpiry, 30), }; } case ACTIONS.SET_APNS_EXPIRY: { @@ -346,6 +361,8 @@ const reducer = (state: InitialStateType, action: IAction) => { return { ...state, apnsExpiry, + isApplePnsExpired: hasLicenseExpired(apnsExpiry), + willApplePnsExpire: willExpireWithinXDays(apnsExpiry, 30), }; } case ACTIONS.SET_VPP_EXPIRY: { @@ -353,6 +370,8 @@ const reducer = (state: InitialStateType, action: IAction) => { return { ...state, vppExpiry, + isVppExpired: hasLicenseExpired(vppExpiry), + willVppExpire: willExpireWithinXDays(vppExpiry, 30), }; } case ACTIONS.SET_SANDBOX_EXPIRY: { @@ -418,6 +437,12 @@ const AppProvider = ({ children }: Props): JSX.Element => { abmExpiry: state.abmExpiry, apnsExpiry: state.apnsExpiry, vppExpiry: state.vppExpiry, + isAppleBmExpired: state.isAppleBmExpired, + isApplePnsExpired: state.isApplePnsExpired, + isVppExpired: state.isVppExpired, + willAppleBmExpire: state.willAppleBmExpire, + willApplePnsExpire: state.willApplePnsExpire, + willVppExpire: state.willVppExpire, noSandboxHosts: state.noSandboxHosts, filteredHostsPath: state.filteredHostsPath, filteredSoftwarePath: state.filteredSoftwarePath, diff --git a/frontend/pages/hosts/details/HostDetailsPage/components/HostDetailsBanners/HostDetailsBanners.tsx b/frontend/pages/hosts/details/HostDetailsPage/components/HostDetailsBanners/HostDetailsBanners.tsx index 89632164b0..2a35d4a418 100644 --- a/frontend/pages/hosts/details/HostDetailsPage/components/HostDetailsBanners/HostDetailsBanners.tsx +++ b/frontend/pages/hosts/details/HostDetailsPage/components/HostDetailsBanners/HostDetailsBanners.tsx @@ -23,21 +23,21 @@ const HostDetailsBanners = ({ connectedToFleetMdm, diskEncryptionStatus, }: IHostDetailsBannersProps) => { - const { config, isPremiumTier, apnsExpiry, abmExpiry } = useContext( - AppContext - ); + const { + config, + isPremiumTier, + isAppleBmExpired, + isApplePnsExpired, + isVppExpired, + willAppleBmExpire, + willApplePnsExpire, + willVppExpire, + } = useContext(AppContext); // Checks to see if an app-wide banner is being shown (the ABM terms, ABM expiry, // or APNs expiry banner) in a parent component. App-wide banners found in parent // component take priority over host details page-level banners. const isAppleBmTermsExpired = config?.mdm?.apple_bm_terms_expired; - const isApplePnsExpired = hasLicenseExpired(apnsExpiry || ""); - const willApplePnsExpireIn30Days = willExpireWithinXDays( - apnsExpiry || "", - 30 - ); - const isAppleBmExpired = hasLicenseExpired(abmExpiry || ""); - const willAppleBmExpireIn30Days = willExpireWithinXDays(abmExpiry || "", 30); const isFleetLicenseExpired = hasLicenseExpired( config?.license.expiration || "" ); @@ -46,9 +46,11 @@ const HostDetailsBanners = ({ isPremiumTier && (isAppleBmTermsExpired || isApplePnsExpired || - willApplePnsExpireIn30Days || + willApplePnsExpire || isAppleBmExpired || - willAppleBmExpireIn30Days || + willAppleBmExpire || + isVppExpired || + willVppExpire || isFleetLicenseExpired); const isMdmUnenrolled =