fleet/frontend/pages/admin/TeamManagementPage/components/CreateTeamModal/CreateTeamModal.tsx
RachelElysia e64dd73b54
Fleet UI: Button loading spinners (#7124)
Co-authored-by: Luke Heath <luke@fleetdm.com>
2022-08-29 08:21:37 -07:00

98 lines
2.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import React, { useState, useCallback, useEffect } from "react";
import { ITeamFormData } from "services/entities/teams";
import Modal from "components/Modal";
import Button from "components/buttons/Button";
import InfoBanner from "components/InfoBanner/InfoBanner";
// @ts-ignore
import InputField from "components/forms/fields/InputField";
const baseClass = "create-team-modal";
interface ICreateTeamModalProps {
onCancel: () => void;
onSubmit: (formData: ITeamFormData) => void;
backendValidators: { [key: string]: string };
isUpdatingTeams: boolean;
}
const CreateTeamModal = ({
onCancel,
onSubmit,
backendValidators,
isUpdatingTeams,
}: ICreateTeamModalProps): JSX.Element => {
const [name, setName] = useState("");
const [errors, setErrors] = useState<{ [key: string]: string }>(
backendValidators
);
useEffect(() => {
setErrors(backendValidators);
}, [backendValidators]);
const onInputChange = useCallback(
(value: string) => {
setName(value);
setErrors({});
},
[setName]
);
const onFormSubmit = useCallback(
(evt) => {
evt.preventDefault();
onSubmit({
name,
});
},
[onSubmit, name]
);
return (
<Modal title={"Create team"} onExit={onCancel} className={baseClass}>
<form
className={`${baseClass}__form`}
onSubmit={onFormSubmit}
autoComplete="off"
>
<InputField
autofocus
name="name"
onChange={onInputChange}
label="Team name"
placeholder="Team name"
value={name}
error={errors.name}
/>
<InfoBanner className={`${baseClass}__sandbox-info`}>
<p className={`${baseClass}__info-header`}>
Need to test queries and configurations before deploying?
</p>
<p>
A popular pattern is to end a teams name with - Sandbox, then you
can use this to test new queries and configuration with staging
hosts or volunteers acting as canaries.
</p>
</InfoBanner>
<div className="modal-cta-wrap">
<Button
type="submit"
variant="brand"
disabled={name === ""}
className="create-loading"
isLoading={isUpdatingTeams}
>
Create
</Button>
<Button onClick={onCancel} variant="inverse">
Cancel
</Button>
</div>
</form>
</Modal>
);
};
export default CreateTeamModal;