fleet/frontend/components/AddHostsModal/PlatformWrapper/AndroidPanel/AndroidPanel.tsx
Gabriel Hernandez 15d123db50
update add host modal to handle fully managed android enrollment (#39468)
<!-- Add the related story/sub-task/bug number, like Resolves #123, or
remove if NA -->
**Related issue:** Resolves #38881

This adds the UI to the add host modal that allows for android fully
managed devices.

<img width="800" height="405" alt="image"
src="https://github.com/user-attachments/assets/2f86d417-ee14-456b-a06f-32c292c5e7a3"
/>

It also includes a small copy change for delete host modal

- [x] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
- [ ] Added/updated automated tests
- [x] QA'd all new/changed functionality manually
2026-02-06 17:08:35 +00:00

97 lines
2.3 KiB
TypeScript

import React, { useContext } from "react";
import PATHS from "router/paths";
import { AppContext } from "context/app";
import CustomLink from "components/CustomLink";
import Radio from "components/forms/fields/Radio";
// @ts-ignore
import InputField from "components/forms/fields/InputField";
type EnrollmentType = "workProfile" | "fullyManaged";
const generateUrl = (
serverUrl: string,
enrollSecret: string,
enrollType: EnrollmentType
) => {
const url = `${serverUrl}/enroll?enroll_secret=${encodeURIComponent(
enrollSecret
)}`;
if (enrollType === "fullyManaged") {
return `${url}&fully_managed=true`;
}
return url;
};
const baseClass = "android-panel";
interface IAndroidPanelProps {
enrollSecret: string;
}
const AndroidPanel = ({ enrollSecret }: IAndroidPanelProps) => {
const { config, isAndroidMdmEnabledAndConfigured } = useContext(AppContext);
const [enrollmentType, setEnrollmentType] = React.useState<EnrollmentType>(
"workProfile"
);
if (!config) return null;
if (!isAndroidMdmEnabledAndConfigured) {
return (
<p>
<CustomLink
url={PATHS.ADMIN_INTEGRATIONS_MDM_ANDROID}
text="Turn on Android MDM"
/>{" "}
to enroll Android hosts.
</p>
);
}
const url = generateUrl(
config.server_settings.server_url,
enrollSecret,
enrollmentType
);
return (
<div className={baseClass}>
<form>
<fieldset className="form-field">
<Radio
name="enrollmentType"
id="workProfile"
label="Work profile"
value="workProfile"
checked={enrollmentType === "workProfile"}
onChange={() => setEnrollmentType("workProfile")}
/>
<Radio
name="enrollmentType"
id="fullyManaged"
label="Fully-managed (no work profile)"
value="fullyManaged"
checked={enrollmentType === "fullyManaged"}
onChange={() => setEnrollmentType("fullyManaged")}
/>
</fieldset>
<InputField
label="Enrollment instructions:"
enableCopy
readOnly
inputWrapperClass={`${baseClass}__enroll-link`}
name="enroll-link"
value={url}
/>
</form>
</div>
);
};
export default AndroidPanel;