mirror of
https://github.com/fleetdm/fleet
synced 2026-04-21 13:37:30 +00:00
Fleet UI: Clean up empty enroll secret bugs (#43233)
This commit is contained in:
parent
1ccb0a53f7
commit
7b90f2dc75
6 changed files with 103 additions and 111 deletions
|
|
@ -171,6 +171,9 @@ describe("AddHostsModal", () => {
|
|||
expect(text).toBeInTheDocument();
|
||||
});
|
||||
it("renders no enroll secret cta", async () => {
|
||||
const onCancel = jest.fn();
|
||||
const openEnrollSecretModal = jest.fn();
|
||||
|
||||
const render = createCustomRenderer({
|
||||
withBackendMock: true,
|
||||
context: {
|
||||
|
|
@ -181,23 +184,27 @@ describe("AddHostsModal", () => {
|
|||
},
|
||||
});
|
||||
|
||||
render(
|
||||
const { user } = render(
|
||||
<AddHostsModal
|
||||
isAnyTeamSelected={false}
|
||||
currentTeamName="Apples"
|
||||
isLoading={false}
|
||||
onCancel={noop}
|
||||
openEnrollSecretModal={noop}
|
||||
onCancel={onCancel}
|
||||
openEnrollSecretModal={openEnrollSecretModal}
|
||||
/>
|
||||
);
|
||||
|
||||
const text = screen.getByText("Something's gone wrong.");
|
||||
const ctaButton = screen.getByRole("button", {
|
||||
name: "Manage enroll secrets",
|
||||
});
|
||||
expect(screen.getByText("Something's gone wrong.")).toBeInTheDocument();
|
||||
expect(
|
||||
screen.getByText(/you have no enroll secrets\./i)
|
||||
).toBeInTheDocument();
|
||||
|
||||
expect(text).toBeInTheDocument();
|
||||
expect(ctaButton).toBeEnabled();
|
||||
const cta = screen.getByText(/manage enroll secrets/i);
|
||||
expect(cta).toBeInTheDocument();
|
||||
|
||||
await user.click(cta);
|
||||
|
||||
expect(onCancel).toHaveBeenCalledTimes(1);
|
||||
expect(openEnrollSecretModal).toHaveBeenCalledTimes(1);
|
||||
});
|
||||
|
||||
it("excludes `--enable-scripts` flag if `config.server_settings.scripts-disabled` is `true`", async () => {
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import { useQuery } from "react-query";
|
|||
import configAPI from "services/entities/config";
|
||||
import { AppContext } from "context/app";
|
||||
|
||||
import Button from "components/buttons/Button";
|
||||
import CustomLink from "components/CustomLink";
|
||||
import DataError from "components/DataError";
|
||||
import Modal from "components/Modal";
|
||||
import Spinner from "components/Spinner";
|
||||
|
|
@ -60,9 +60,10 @@ const AddHostsModal = ({
|
|||
<span className="info__data">
|
||||
You have no enroll secrets.{" "}
|
||||
{openEnrollSecretModal ? (
|
||||
<Button onClick={onManageEnrollSecretsClick} variant="inverse">
|
||||
Manage enroll secrets
|
||||
</Button>
|
||||
<CustomLink
|
||||
customClickHandler={onManageEnrollSecretsClick}
|
||||
text="Manage enroll secrets"
|
||||
/>
|
||||
) : (
|
||||
"Manage enroll secrets"
|
||||
)}{" "}
|
||||
|
|
|
|||
|
|
@ -52,12 +52,54 @@ const EnrollSecretModal = ({
|
|||
title="Manage enroll secrets"
|
||||
className={baseClass}
|
||||
>
|
||||
<div className={`${baseClass} form`}>
|
||||
{teamInfo?.secrets?.length ? (
|
||||
<>
|
||||
<div className={`${baseClass}__header`}>
|
||||
<div className={`${baseClass}__description`}>
|
||||
Use these secret(s) to enroll hosts
|
||||
{teamInfo?.secrets?.length ? (
|
||||
<div className={`${baseClass} form`}>
|
||||
<div className={`${baseClass}__header`}>
|
||||
<div className={`${baseClass}__description`}>
|
||||
Use these secret(s) to enroll hosts
|
||||
{primoMode || teamInfo?.name === "Unassigned" ? (
|
||||
""
|
||||
) : (
|
||||
<>
|
||||
{" "}
|
||||
to <b>{teamInfo?.name}</b>
|
||||
</>
|
||||
)}
|
||||
.
|
||||
</div>
|
||||
<div className={`${baseClass}__add-secret`}>
|
||||
<GitOpsModeTooltipWrapper
|
||||
entityType="secrets"
|
||||
position="right"
|
||||
tipOffset={8}
|
||||
renderChildren={(disableChildren) => (
|
||||
<Button
|
||||
disabled={disableChildren}
|
||||
onClick={addNewSecretClick}
|
||||
className={`${baseClass}__add-secret-btn`}
|
||||
variant="brand-inverse-icon"
|
||||
iconStroke
|
||||
>
|
||||
Add secret <Icon name="plus" color="core-fleet-green" />
|
||||
</Button>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<EnrollSecretTable
|
||||
secrets={teamInfo?.secrets}
|
||||
toggleSecretEditorModal={toggleSecretEditorModal}
|
||||
toggleDeleteSecretModal={toggleDeleteSecretModal}
|
||||
setSelectedSecret={setSelectedSecret}
|
||||
/>
|
||||
</div>
|
||||
) : (
|
||||
<Card color="grey" paddingSize="small">
|
||||
<EmptyTable
|
||||
header="You have no enroll secrets."
|
||||
info={
|
||||
<>
|
||||
Add secret(s) to enroll hosts
|
||||
{primoMode || teamInfo?.name === "Unassigned" ? (
|
||||
""
|
||||
) : (
|
||||
|
|
@ -67,75 +109,31 @@ const EnrollSecretModal = ({
|
|||
</>
|
||||
)}
|
||||
.
|
||||
</div>
|
||||
<div className={`${baseClass}__add-secret`}>
|
||||
<GitOpsModeTooltipWrapper
|
||||
entityType="secrets"
|
||||
position="right"
|
||||
tipOffset={8}
|
||||
renderChildren={(disableChildren) => (
|
||||
<Button
|
||||
disabled={disableChildren}
|
||||
onClick={addNewSecretClick}
|
||||
className={`${baseClass}__add-secret-btn`}
|
||||
variant="brand-inverse-icon"
|
||||
iconStroke
|
||||
>
|
||||
Add secret <Icon name="plus" color="core-fleet-green" />
|
||||
</Button>
|
||||
)}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
<EnrollSecretTable
|
||||
secrets={teamInfo?.secrets}
|
||||
toggleSecretEditorModal={toggleSecretEditorModal}
|
||||
toggleDeleteSecretModal={toggleDeleteSecretModal}
|
||||
setSelectedSecret={setSelectedSecret}
|
||||
/>
|
||||
</>
|
||||
) : (
|
||||
<Card color="grey" paddingSize="small">
|
||||
<EmptyTable
|
||||
header="You have no enroll secrets."
|
||||
info={
|
||||
<>
|
||||
Add secret(s) to enroll hosts
|
||||
{primoMode || teamInfo?.name === "Unassigned" ? (
|
||||
""
|
||||
) : (
|
||||
<>
|
||||
{" "}
|
||||
to <b>{teamInfo?.name}</b>
|
||||
</>
|
||||
)}
|
||||
.
|
||||
</>
|
||||
}
|
||||
primaryButton={
|
||||
<GitOpsModeTooltipWrapper
|
||||
entityType="secrets"
|
||||
position="right"
|
||||
tipOffset={8}
|
||||
renderChildren={(disableChildren) => (
|
||||
<Button
|
||||
disabled={disableChildren}
|
||||
onClick={addNewSecretClick}
|
||||
className={`${baseClass}__add-secret-btn`}
|
||||
variant="brand-inverse-icon"
|
||||
iconStroke
|
||||
>
|
||||
Add secret <Icon name="plus" color="core-fleet-green" />
|
||||
</Button>
|
||||
)}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
</Card>
|
||||
)}
|
||||
<div className="modal-cta-wrap">
|
||||
<Button onClick={onReturnToApp}>Close</Button>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
primaryButton={
|
||||
<GitOpsModeTooltipWrapper
|
||||
entityType="secrets"
|
||||
position="right"
|
||||
tipOffset={8}
|
||||
renderChildren={(disableChildren) => (
|
||||
<Button
|
||||
disabled={disableChildren}
|
||||
onClick={addNewSecretClick}
|
||||
className={`${baseClass}__add-secret-btn`}
|
||||
variant="brand-inverse-icon"
|
||||
iconStroke
|
||||
>
|
||||
Add secret <Icon name="plus" color="core-fleet-green" />
|
||||
</Button>
|
||||
)}
|
||||
/>
|
||||
}
|
||||
/>
|
||||
</Card>
|
||||
)}
|
||||
<div className="modal-cta-wrap">
|
||||
<Button onClick={onReturnToApp}>Close</Button>
|
||||
</div>
|
||||
</Modal>
|
||||
);
|
||||
|
|
|
|||
|
|
@ -4,16 +4,6 @@
|
|||
text-decoration: none;
|
||||
}
|
||||
|
||||
pre,
|
||||
code {
|
||||
background-color: $ui-off-white;
|
||||
color: $core-fleet-blue;
|
||||
border: 1px solid $ui-fleet-black-10;
|
||||
border-radius: $border-radius;
|
||||
padding: 7px $pad-medium;
|
||||
margin: $pad-large 0 0 44px;
|
||||
}
|
||||
|
||||
&__error {
|
||||
color: $ui-error;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,16 +9,6 @@
|
|||
margin: $pad-medium 0 0 0;
|
||||
}
|
||||
|
||||
pre,
|
||||
code {
|
||||
background-color: $ui-off-white;
|
||||
color: $core-fleet-blue;
|
||||
border: 1px solid $ui-fleet-black-10;
|
||||
border-radius: $border-radius;
|
||||
padding: 7px $pad-medium;
|
||||
margin: $pad-large 0 0 44px;
|
||||
}
|
||||
|
||||
&__error {
|
||||
color: $ui-error;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -85,6 +85,7 @@ import { strToBool } from "utilities/strings/stringUtils";
|
|||
|
||||
import Button from "components/buttons/Button";
|
||||
import Icon from "components/Icon/Icon";
|
||||
import CustomLink from "components/CustomLink";
|
||||
import { SingleValue } from "react-select-5";
|
||||
import DropdownWrapper from "components/forms/fields/DropdownWrapper";
|
||||
import { CustomOptionType } from "components/forms/fields/DropdownWrapper/DropdownWrapper";
|
||||
|
|
@ -1934,8 +1935,13 @@ const ManageHostsPage = ({
|
|||
>
|
||||
<div>
|
||||
<span>
|
||||
You have no enroll secrets. Manage enroll secrets to enroll hosts
|
||||
to <b>{isAnyTeamSelected ? currentTeamName : "Fleet"}</b>.
|
||||
You have no enroll secrets.{" "}
|
||||
<CustomLink
|
||||
customClickHandler={() => setShowEnrollSecretModal(true)}
|
||||
text="Manage enroll secrets"
|
||||
/>{" "}
|
||||
to enroll hosts to{" "}
|
||||
<b>{isAnyTeamSelected ? currentTeamName : "Fleet"}</b>.
|
||||
</span>
|
||||
</div>
|
||||
</InfoBanner>
|
||||
|
|
|
|||
Loading…
Reference in a new issue