mirror of
https://github.com/fleetdm/fleet
synced 2026-05-04 22:08:41 +00:00
106 lines
2.9 KiB
TypeScript
106 lines
2.9 KiB
TypeScript
import React from "react";
|
|
|
|
import { ITeam } from "interfaces/team";
|
|
import { IEnrollSecret } from "interfaces/enroll_secret";
|
|
|
|
import Modal from "components/Modal";
|
|
import Button from "components/buttons/Button";
|
|
import Icon from "components/Icon/Icon";
|
|
import EnrollSecretTable from "../EnrollSecretTable";
|
|
|
|
interface IEnrollSecretModal {
|
|
selectedTeam: number;
|
|
onReturnToApp: () => void;
|
|
teams: ITeam[];
|
|
toggleSecretEditorModal: () => void;
|
|
toggleDeleteSecretModal: () => void;
|
|
setSelectedSecret: React.Dispatch<
|
|
React.SetStateAction<IEnrollSecret | undefined>
|
|
>;
|
|
globalSecrets?: IEnrollSecret[] | undefined;
|
|
}
|
|
|
|
const baseClass = "enroll-secret-modal";
|
|
|
|
const EnrollSecretModal = ({
|
|
onReturnToApp,
|
|
selectedTeam,
|
|
teams,
|
|
toggleSecretEditorModal,
|
|
toggleDeleteSecretModal,
|
|
setSelectedSecret,
|
|
globalSecrets,
|
|
}: IEnrollSecretModal): JSX.Element => {
|
|
const renderTeam = () => {
|
|
if (typeof selectedTeam === "string") {
|
|
selectedTeam = parseInt(selectedTeam, 10);
|
|
}
|
|
|
|
if (selectedTeam <= 0) {
|
|
return { name: "No team", secrets: globalSecrets }; // TODO: Should "No team" be "Fleet" for free tier?
|
|
}
|
|
return teams.find((team) => team.id === selectedTeam);
|
|
};
|
|
|
|
const addNewSecretClick = () => {
|
|
setSelectedSecret(undefined);
|
|
toggleSecretEditorModal();
|
|
};
|
|
|
|
return (
|
|
<Modal
|
|
onExit={onReturnToApp}
|
|
onEnter={onReturnToApp}
|
|
title={"Manage enroll secrets"}
|
|
className={baseClass}
|
|
>
|
|
<div className={baseClass}>
|
|
{renderTeam()?.secrets?.length ? (
|
|
<>
|
|
<div className={`${baseClass}__description`}>
|
|
Use these secret(s) to enroll hosts to <b>{renderTeam()?.name}</b>
|
|
:
|
|
</div>
|
|
<div className={`${baseClass}__secret-wrapper`}>
|
|
<EnrollSecretTable
|
|
secrets={renderTeam()?.secrets}
|
|
toggleSecretEditorModal={toggleSecretEditorModal}
|
|
toggleDeleteSecretModal={toggleDeleteSecretModal}
|
|
setSelectedSecret={setSelectedSecret}
|
|
/>
|
|
</div>
|
|
</>
|
|
) : (
|
|
<>
|
|
<div className={`${baseClass}__description`}>
|
|
<p>
|
|
<b>You have no enroll secrets.</b>
|
|
</p>
|
|
<p>
|
|
Add secret(s) to enroll hosts to <b>{renderTeam()?.name}</b>.
|
|
</p>
|
|
</div>
|
|
</>
|
|
)}
|
|
<div className={`${baseClass}__add-secret`}>
|
|
<Button
|
|
onClick={addNewSecretClick}
|
|
className={`${baseClass}__add-secret-btn`}
|
|
variant="text-icon"
|
|
>
|
|
<>
|
|
Add secret <Icon name="plus" />
|
|
</>
|
|
</Button>
|
|
</div>
|
|
<div className="modal-cta-wrap">
|
|
<Button onClick={onReturnToApp} variant="brand">
|
|
Done
|
|
</Button>
|
|
</div>
|
|
</div>
|
|
</Modal>
|
|
);
|
|
};
|
|
|
|
export default EnrollSecretModal;
|