fleet/frontend/pages/admin/IntegrationsPage/cards/AutomaticEnrollment/AutomaticEnrollment.tsx
Gabriel Hernandez 845b524dcc
add/remove/disable vpp token in Fleet UI (#20127)
relates to #19866

> NOTE: API integration work still needs to be done, which will happen
in another PR.

This adds the ability to add, remove, or disable a VPP token in the
Fleet UI. This includes:

**Vpp integration page with VPP card:**


![image](https://github.com/fleetdm/fleet/assets/1153709/99b1ca9b-8872-447f-a085-b5385a2b7f7e)


![image](https://github.com/fleetdm/fleet/assets/1153709/1cdb80a2-1afe-4739-994c-fe7430449f13)


![image](https://github.com/fleetdm/fleet/assets/1153709/79ec7927-f905-48c4-b1b9-42d4d6b41028)

**VPP setup page with steps to set up VPP:**


![image](https://github.com/fleetdm/fleet/assets/1153709/dec203e4-01d3-4e1d-b493-be3772b72813)

**VPP setup page with VPP info:**


![image](https://github.com/fleetdm/fleet/assets/1153709/afccba29-e97b-4937-8235-4706e39d9333)

**Disable VPP modal:**


![image](https://github.com/fleetdm/fleet/assets/1153709/da4a2db3-7546-4f3b-8ec0-d77ad7bff19f)

**renew Vpp modal:**


![image](https://github.com/fleetdm/fleet/assets/1153709/8224f466-6aae-43bd-a120-3de5f0c90064)

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://fleetdm.com/docs/contributing/committing-changes#changes-files)
for more information.
- [x] Manual QA for all new/changed functionality
2024-07-10 17:05:09 +01:00

89 lines
2.6 KiB
TypeScript

import React, { useContext } from "react";
import { useQuery } from "react-query";
import { AxiosError } from "axios";
import { InjectedRouter } from "react-router";
import PATHS from "router/paths";
import { AppContext } from "context/app";
import { IMdmApple } from "interfaces/mdm";
import mdmAppleAPI from "services/entities/mdm_apple";
import Spinner from "components/Spinner";
import DataError from "components/DataError";
import PremiumFeatureMessage from "components/PremiumFeatureMessage/PremiumFeatureMessage";
import EmptyTable from "components/EmptyTable/EmptyTable";
import Button from "components/buttons/Button/Button";
import MdmPlatformsSection from "./components/MdmPlatformsSection/MdmPlatformsSection";
import DefaultTeamSection from "./components/DefaultTeamSection/DefaultTeamSection";
import IdpSection from "./components/IdpSection/IdpSection";
import EulaSection from "./components/EulaSection/EulaSection";
const baseClass = "automatic-enrollment";
interface IAutomaticEnrollment {
router: InjectedRouter;
}
const AutomaticEnrollment = ({ router }: IAutomaticEnrollment) => {
const { config, isPremiumTier } = useContext(AppContext);
const { isLoading: isLoadingAPNInfo, error: errorAPNInfo } = useQuery<
IMdmApple,
AxiosError
>(["appleAPNInfo"], () => mdmAppleAPI.getAppleAPNInfo(), {
refetchOnWindowFocus: false,
retry: false,
enabled: config?.mdm.enabled_and_configured,
});
const onClickConnect = () => {
router.push(PATHS.ADMIN_INTEGRATIONS_MDM);
};
if (!isPremiumTier) return <PremiumFeatureMessage />;
if (isLoadingAPNInfo) {
return (
<div className={baseClass}>
<Spinner />
</div>
);
}
if (errorAPNInfo?.status === 404) {
return (
<EmptyTable
header="Automatic enrollment for macOS hosts"
info="Connect Fleet to the Apple Push Certificates Portal to get started."
primaryButton={<Button onClick={onClickConnect}>Connect</Button>}
className={`${baseClass}__connect-message`}
/>
);
}
if (errorAPNInfo) {
return <DataError />;
}
return (
<div className={baseClass}>
<div className={`${baseClass}__section`}>
<MdmPlatformsSection router={router} />
</div>
{!!config?.mdm.apple_bm_enabled_and_configured && (
<div className={`${baseClass}__section`}>
<DefaultTeamSection />
</div>
)}
<div className={`${baseClass}__section`}>
<IdpSection />
</div>
<div className={`${baseClass}__section`}>
<EulaSection />
</div>
</div>
);
};
export default AutomaticEnrollment;