fleet/frontend/components/Modal/Modal.tsx

99 lines
2.7 KiB
TypeScript
Raw Normal View History

import React, { useEffect } from "react";
import classnames from "classnames";
import Button from "components/buttons/Button/Button";
import Icon from "components/Icon/Icon";
const baseClass = "modal";
UI: Make all Modal widths consistent (#11722) ## Addresses #11356 Images of 3 fixed modals referenced in the issue: <img width="1235" alt="Screenshot 2023-05-12 at 4 11 52 PM" src="https://github.com/fleetdm/fleet/assets/61553566/098081c7-15d4-4009-92a0-7a2e14ffaab1"> <img width="1235" alt="Screenshot 2023-05-12 at 4 12 50 PM" src="https://github.com/fleetdm/fleet/assets/61553566/7d0f268d-f2dc-4686-a64d-94e28a94c717"> <img width="1235" alt="Screenshot 2023-05-12 at 4 13 26 PM" src="https://github.com/fleetdm/fleet/assets/61553566/d486b005-1344-4656-adec-c4929332816b"> ## Implemented: - [x] Updated global modal styles for consistency - [x] Add optional "width" prop to `Modal` - [x] Misc cleanup: - [x] Restore missing padding from inverse-alert buttons - [x] Improve naming, lots of cleanup - [x] More coming in separate PR - [x] Check each of the following modals, define `width` where necessary: - [x] Add hosts - [x] EnrollSecret - [x] Also fix misaligned icons - [x] SecretEditor - [x] DeleteSecret - [x] ShowQuery - [x] AddIntegration - [x] DeleteIntegration - [x] EditIntegration - [x] EditTeam - [x] RequestCSR - [x] HostStatusWebhook - [x] CreateTeam - [x] DeleteTeam - [x] EditTeam - [x] AddMember - [x] RemoveMember - [x] CreateUser - [x] DeleteUser - [x] EditUser - [x] Also fix randomly shorter 'Password' field - [x] ResetPassword - [x] ResetSessions - [x] WelcomeHost - [x] DeletHost - [x] TransferHost - [x] POlicyDetails - [x] AutoEnrollMdm - [x] Info - [x] ManualEnrollMdm - [x] ResetKey - [x] BootstrapPackage - [x] DiskEncryption - [x] OSPOlicy - [x] SelectQuery - [x] UnenrollMdm - [x] MacSettings - [x] DeleteLabel - [x] EditCOlumns - WIP, cannot QA yet (cc @ghernandez345): - DeleteScript - RerunScript - [x] DeleteProfile - [x] DeletePackage - allow to conform to default "m" width, 650px - [x] PackQueryEditor - allow to conform to default "m" width - [x] RemovePackQuery - allow to conform to default "m" width - [x] DeletePack - allow to conform to default "m" width - [x] AddPolicy - [x] DeletePolicy - allow to conform to default "m" width - [x] NewPolicy (now "SaveNewPolicyModal") - allow to conform to default "m" width - [x] DeleteQuery - [x] NewQuery - allow to conform to default "m" width - [x] PreviewData - [x] RemoveScheduledQuery - [x] ScheduleEditor - [x] UserSettingsPage (aka "get API token") - [x] 2 x ManageAutomations – set to large - [x] 2 x PreviewPayload - allow to conform to default "m" width - [x] 2 x PreviewTicket - same as ManageAutomations ## Checklist for submitter - [x] Changes file added for user-visible changes in `changes/` - [x] Manual QA for all new/changed functionality --------- Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
2023-05-17 17:07:38 +00:00
type ModalWidth = "medium" | "large" | "xlarge" | "auto";
export interface IModalProps {
UI: Make all Modal widths consistent (#11722) ## Addresses #11356 Images of 3 fixed modals referenced in the issue: <img width="1235" alt="Screenshot 2023-05-12 at 4 11 52 PM" src="https://github.com/fleetdm/fleet/assets/61553566/098081c7-15d4-4009-92a0-7a2e14ffaab1"> <img width="1235" alt="Screenshot 2023-05-12 at 4 12 50 PM" src="https://github.com/fleetdm/fleet/assets/61553566/7d0f268d-f2dc-4686-a64d-94e28a94c717"> <img width="1235" alt="Screenshot 2023-05-12 at 4 13 26 PM" src="https://github.com/fleetdm/fleet/assets/61553566/d486b005-1344-4656-adec-c4929332816b"> ## Implemented: - [x] Updated global modal styles for consistency - [x] Add optional "width" prop to `Modal` - [x] Misc cleanup: - [x] Restore missing padding from inverse-alert buttons - [x] Improve naming, lots of cleanup - [x] More coming in separate PR - [x] Check each of the following modals, define `width` where necessary: - [x] Add hosts - [x] EnrollSecret - [x] Also fix misaligned icons - [x] SecretEditor - [x] DeleteSecret - [x] ShowQuery - [x] AddIntegration - [x] DeleteIntegration - [x] EditIntegration - [x] EditTeam - [x] RequestCSR - [x] HostStatusWebhook - [x] CreateTeam - [x] DeleteTeam - [x] EditTeam - [x] AddMember - [x] RemoveMember - [x] CreateUser - [x] DeleteUser - [x] EditUser - [x] Also fix randomly shorter 'Password' field - [x] ResetPassword - [x] ResetSessions - [x] WelcomeHost - [x] DeletHost - [x] TransferHost - [x] POlicyDetails - [x] AutoEnrollMdm - [x] Info - [x] ManualEnrollMdm - [x] ResetKey - [x] BootstrapPackage - [x] DiskEncryption - [x] OSPOlicy - [x] SelectQuery - [x] UnenrollMdm - [x] MacSettings - [x] DeleteLabel - [x] EditCOlumns - WIP, cannot QA yet (cc @ghernandez345): - DeleteScript - RerunScript - [x] DeleteProfile - [x] DeletePackage - allow to conform to default "m" width, 650px - [x] PackQueryEditor - allow to conform to default "m" width - [x] RemovePackQuery - allow to conform to default "m" width - [x] DeletePack - allow to conform to default "m" width - [x] AddPolicy - [x] DeletePolicy - allow to conform to default "m" width - [x] NewPolicy (now "SaveNewPolicyModal") - allow to conform to default "m" width - [x] DeleteQuery - [x] NewQuery - allow to conform to default "m" width - [x] PreviewData - [x] RemoveScheduledQuery - [x] ScheduleEditor - [x] UserSettingsPage (aka "get API token") - [x] 2 x ManageAutomations – set to large - [x] 2 x PreviewPayload - allow to conform to default "m" width - [x] 2 x PreviewTicket - same as ManageAutomations ## Checklist for submitter - [x] Changes file added for user-visible changes in `changes/` - [x] Manual QA for all new/changed functionality --------- Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
2023-05-17 17:07:38 +00:00
title: string | JSX.Element;
children: JSX.Element;
onExit: () => void;
onEnter?: () => void;
/** default 650px, large 800px, xlarge 850px, auto auto-width */
UI: Make all Modal widths consistent (#11722) ## Addresses #11356 Images of 3 fixed modals referenced in the issue: <img width="1235" alt="Screenshot 2023-05-12 at 4 11 52 PM" src="https://github.com/fleetdm/fleet/assets/61553566/098081c7-15d4-4009-92a0-7a2e14ffaab1"> <img width="1235" alt="Screenshot 2023-05-12 at 4 12 50 PM" src="https://github.com/fleetdm/fleet/assets/61553566/7d0f268d-f2dc-4686-a64d-94e28a94c717"> <img width="1235" alt="Screenshot 2023-05-12 at 4 13 26 PM" src="https://github.com/fleetdm/fleet/assets/61553566/d486b005-1344-4656-adec-c4929332816b"> ## Implemented: - [x] Updated global modal styles for consistency - [x] Add optional "width" prop to `Modal` - [x] Misc cleanup: - [x] Restore missing padding from inverse-alert buttons - [x] Improve naming, lots of cleanup - [x] More coming in separate PR - [x] Check each of the following modals, define `width` where necessary: - [x] Add hosts - [x] EnrollSecret - [x] Also fix misaligned icons - [x] SecretEditor - [x] DeleteSecret - [x] ShowQuery - [x] AddIntegration - [x] DeleteIntegration - [x] EditIntegration - [x] EditTeam - [x] RequestCSR - [x] HostStatusWebhook - [x] CreateTeam - [x] DeleteTeam - [x] EditTeam - [x] AddMember - [x] RemoveMember - [x] CreateUser - [x] DeleteUser - [x] EditUser - [x] Also fix randomly shorter 'Password' field - [x] ResetPassword - [x] ResetSessions - [x] WelcomeHost - [x] DeletHost - [x] TransferHost - [x] POlicyDetails - [x] AutoEnrollMdm - [x] Info - [x] ManualEnrollMdm - [x] ResetKey - [x] BootstrapPackage - [x] DiskEncryption - [x] OSPOlicy - [x] SelectQuery - [x] UnenrollMdm - [x] MacSettings - [x] DeleteLabel - [x] EditCOlumns - WIP, cannot QA yet (cc @ghernandez345): - DeleteScript - RerunScript - [x] DeleteProfile - [x] DeletePackage - allow to conform to default "m" width, 650px - [x] PackQueryEditor - allow to conform to default "m" width - [x] RemovePackQuery - allow to conform to default "m" width - [x] DeletePack - allow to conform to default "m" width - [x] AddPolicy - [x] DeletePolicy - allow to conform to default "m" width - [x] NewPolicy (now "SaveNewPolicyModal") - allow to conform to default "m" width - [x] DeleteQuery - [x] NewQuery - allow to conform to default "m" width - [x] PreviewData - [x] RemoveScheduledQuery - [x] ScheduleEditor - [x] UserSettingsPage (aka "get API token") - [x] 2 x ManageAutomations – set to large - [x] 2 x PreviewPayload - allow to conform to default "m" width - [x] 2 x PreviewTicket - same as ManageAutomations ## Checklist for submitter - [x] Changes file added for user-visible changes in `changes/` - [x] Manual QA for all new/changed functionality --------- Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
2023-05-17 17:07:38 +00:00
width?: ModalWidth;
/** isHidden can be set true to hide the modal when opening another modal */
isHidden?: boolean;
/** isLoading can be set true to enable targeting elements by loading state */
isLoading?: boolean;
className?: string;
}
const Modal = ({
UI: Make all Modal widths consistent (#11722) ## Addresses #11356 Images of 3 fixed modals referenced in the issue: <img width="1235" alt="Screenshot 2023-05-12 at 4 11 52 PM" src="https://github.com/fleetdm/fleet/assets/61553566/098081c7-15d4-4009-92a0-7a2e14ffaab1"> <img width="1235" alt="Screenshot 2023-05-12 at 4 12 50 PM" src="https://github.com/fleetdm/fleet/assets/61553566/7d0f268d-f2dc-4686-a64d-94e28a94c717"> <img width="1235" alt="Screenshot 2023-05-12 at 4 13 26 PM" src="https://github.com/fleetdm/fleet/assets/61553566/d486b005-1344-4656-adec-c4929332816b"> ## Implemented: - [x] Updated global modal styles for consistency - [x] Add optional "width" prop to `Modal` - [x] Misc cleanup: - [x] Restore missing padding from inverse-alert buttons - [x] Improve naming, lots of cleanup - [x] More coming in separate PR - [x] Check each of the following modals, define `width` where necessary: - [x] Add hosts - [x] EnrollSecret - [x] Also fix misaligned icons - [x] SecretEditor - [x] DeleteSecret - [x] ShowQuery - [x] AddIntegration - [x] DeleteIntegration - [x] EditIntegration - [x] EditTeam - [x] RequestCSR - [x] HostStatusWebhook - [x] CreateTeam - [x] DeleteTeam - [x] EditTeam - [x] AddMember - [x] RemoveMember - [x] CreateUser - [x] DeleteUser - [x] EditUser - [x] Also fix randomly shorter 'Password' field - [x] ResetPassword - [x] ResetSessions - [x] WelcomeHost - [x] DeletHost - [x] TransferHost - [x] POlicyDetails - [x] AutoEnrollMdm - [x] Info - [x] ManualEnrollMdm - [x] ResetKey - [x] BootstrapPackage - [x] DiskEncryption - [x] OSPOlicy - [x] SelectQuery - [x] UnenrollMdm - [x] MacSettings - [x] DeleteLabel - [x] EditCOlumns - WIP, cannot QA yet (cc @ghernandez345): - DeleteScript - RerunScript - [x] DeleteProfile - [x] DeletePackage - allow to conform to default "m" width, 650px - [x] PackQueryEditor - allow to conform to default "m" width - [x] RemovePackQuery - allow to conform to default "m" width - [x] DeletePack - allow to conform to default "m" width - [x] AddPolicy - [x] DeletePolicy - allow to conform to default "m" width - [x] NewPolicy (now "SaveNewPolicyModal") - allow to conform to default "m" width - [x] DeleteQuery - [x] NewQuery - allow to conform to default "m" width - [x] PreviewData - [x] RemoveScheduledQuery - [x] ScheduleEditor - [x] UserSettingsPage (aka "get API token") - [x] 2 x ManageAutomations – set to large - [x] 2 x PreviewPayload - allow to conform to default "m" width - [x] 2 x PreviewTicket - same as ManageAutomations ## Checklist for submitter - [x] Changes file added for user-visible changes in `changes/` - [x] Manual QA for all new/changed functionality --------- Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
2023-05-17 17:07:38 +00:00
title,
children,
onExit,
onEnter,
UI: Make all Modal widths consistent (#11722) ## Addresses #11356 Images of 3 fixed modals referenced in the issue: <img width="1235" alt="Screenshot 2023-05-12 at 4 11 52 PM" src="https://github.com/fleetdm/fleet/assets/61553566/098081c7-15d4-4009-92a0-7a2e14ffaab1"> <img width="1235" alt="Screenshot 2023-05-12 at 4 12 50 PM" src="https://github.com/fleetdm/fleet/assets/61553566/7d0f268d-f2dc-4686-a64d-94e28a94c717"> <img width="1235" alt="Screenshot 2023-05-12 at 4 13 26 PM" src="https://github.com/fleetdm/fleet/assets/61553566/d486b005-1344-4656-adec-c4929332816b"> ## Implemented: - [x] Updated global modal styles for consistency - [x] Add optional "width" prop to `Modal` - [x] Misc cleanup: - [x] Restore missing padding from inverse-alert buttons - [x] Improve naming, lots of cleanup - [x] More coming in separate PR - [x] Check each of the following modals, define `width` where necessary: - [x] Add hosts - [x] EnrollSecret - [x] Also fix misaligned icons - [x] SecretEditor - [x] DeleteSecret - [x] ShowQuery - [x] AddIntegration - [x] DeleteIntegration - [x] EditIntegration - [x] EditTeam - [x] RequestCSR - [x] HostStatusWebhook - [x] CreateTeam - [x] DeleteTeam - [x] EditTeam - [x] AddMember - [x] RemoveMember - [x] CreateUser - [x] DeleteUser - [x] EditUser - [x] Also fix randomly shorter 'Password' field - [x] ResetPassword - [x] ResetSessions - [x] WelcomeHost - [x] DeletHost - [x] TransferHost - [x] POlicyDetails - [x] AutoEnrollMdm - [x] Info - [x] ManualEnrollMdm - [x] ResetKey - [x] BootstrapPackage - [x] DiskEncryption - [x] OSPOlicy - [x] SelectQuery - [x] UnenrollMdm - [x] MacSettings - [x] DeleteLabel - [x] EditCOlumns - WIP, cannot QA yet (cc @ghernandez345): - DeleteScript - RerunScript - [x] DeleteProfile - [x] DeletePackage - allow to conform to default "m" width, 650px - [x] PackQueryEditor - allow to conform to default "m" width - [x] RemovePackQuery - allow to conform to default "m" width - [x] DeletePack - allow to conform to default "m" width - [x] AddPolicy - [x] DeletePolicy - allow to conform to default "m" width - [x] NewPolicy (now "SaveNewPolicyModal") - allow to conform to default "m" width - [x] DeleteQuery - [x] NewQuery - allow to conform to default "m" width - [x] PreviewData - [x] RemoveScheduledQuery - [x] ScheduleEditor - [x] UserSettingsPage (aka "get API token") - [x] 2 x ManageAutomations – set to large - [x] 2 x PreviewPayload - allow to conform to default "m" width - [x] 2 x PreviewTicket - same as ManageAutomations ## Checklist for submitter - [x] Changes file added for user-visible changes in `changes/` - [x] Manual QA for all new/changed functionality --------- Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
2023-05-17 17:07:38 +00:00
width = "medium",
isHidden = false,
isLoading = false,
className,
}: IModalProps): JSX.Element => {
useEffect(() => {
const closeWithEscapeKey = (e: KeyboardEvent) => {
if (e.key === "Escape") {
onExit();
}
};
document.addEventListener("keydown", closeWithEscapeKey);
return () => {
document.removeEventListener("keydown", closeWithEscapeKey);
};
}, []);
useEffect(() => {
if (onEnter) {
const closeOrSaveWithEnterKey = (event: KeyboardEvent) => {
if (event.code === "Enter" || event.code === "NumpadEnter") {
event.preventDefault();
onEnter();
}
};
document.addEventListener("keydown", closeOrSaveWithEnterKey);
return () => {
document.removeEventListener("keydown", closeOrSaveWithEnterKey);
};
}
}, [onEnter]);
const modalContainerClassName = classnames(
`${baseClass}__modal_container`,
UI: Make all Modal widths consistent (#11722) ## Addresses #11356 Images of 3 fixed modals referenced in the issue: <img width="1235" alt="Screenshot 2023-05-12 at 4 11 52 PM" src="https://github.com/fleetdm/fleet/assets/61553566/098081c7-15d4-4009-92a0-7a2e14ffaab1"> <img width="1235" alt="Screenshot 2023-05-12 at 4 12 50 PM" src="https://github.com/fleetdm/fleet/assets/61553566/7d0f268d-f2dc-4686-a64d-94e28a94c717"> <img width="1235" alt="Screenshot 2023-05-12 at 4 13 26 PM" src="https://github.com/fleetdm/fleet/assets/61553566/d486b005-1344-4656-adec-c4929332816b"> ## Implemented: - [x] Updated global modal styles for consistency - [x] Add optional "width" prop to `Modal` - [x] Misc cleanup: - [x] Restore missing padding from inverse-alert buttons - [x] Improve naming, lots of cleanup - [x] More coming in separate PR - [x] Check each of the following modals, define `width` where necessary: - [x] Add hosts - [x] EnrollSecret - [x] Also fix misaligned icons - [x] SecretEditor - [x] DeleteSecret - [x] ShowQuery - [x] AddIntegration - [x] DeleteIntegration - [x] EditIntegration - [x] EditTeam - [x] RequestCSR - [x] HostStatusWebhook - [x] CreateTeam - [x] DeleteTeam - [x] EditTeam - [x] AddMember - [x] RemoveMember - [x] CreateUser - [x] DeleteUser - [x] EditUser - [x] Also fix randomly shorter 'Password' field - [x] ResetPassword - [x] ResetSessions - [x] WelcomeHost - [x] DeletHost - [x] TransferHost - [x] POlicyDetails - [x] AutoEnrollMdm - [x] Info - [x] ManualEnrollMdm - [x] ResetKey - [x] BootstrapPackage - [x] DiskEncryption - [x] OSPOlicy - [x] SelectQuery - [x] UnenrollMdm - [x] MacSettings - [x] DeleteLabel - [x] EditCOlumns - WIP, cannot QA yet (cc @ghernandez345): - DeleteScript - RerunScript - [x] DeleteProfile - [x] DeletePackage - allow to conform to default "m" width, 650px - [x] PackQueryEditor - allow to conform to default "m" width - [x] RemovePackQuery - allow to conform to default "m" width - [x] DeletePack - allow to conform to default "m" width - [x] AddPolicy - [x] DeletePolicy - allow to conform to default "m" width - [x] NewPolicy (now "SaveNewPolicyModal") - allow to conform to default "m" width - [x] DeleteQuery - [x] NewQuery - allow to conform to default "m" width - [x] PreviewData - [x] RemoveScheduledQuery - [x] ScheduleEditor - [x] UserSettingsPage (aka "get API token") - [x] 2 x ManageAutomations – set to large - [x] 2 x PreviewPayload - allow to conform to default "m" width - [x] 2 x PreviewTicket - same as ManageAutomations ## Checklist for submitter - [x] Changes file added for user-visible changes in `changes/` - [x] Manual QA for all new/changed functionality --------- Co-authored-by: Jacob Shandling <jacob@fleetdm.com>
2023-05-17 17:07:38 +00:00
className,
{ [`${baseClass}__modal_container__medium`]: width === "medium" },
{ [`${baseClass}__modal_container__large`]: width === "large" },
{ [`${baseClass}__modal_container__xlarge`]: width === "xlarge" },
{ [`${baseClass}__modal_container__auto`]: width === "auto" }
);
return (
<div
className={`${baseClass}__background ${
isHidden ? `${baseClass}__hidden` : ""
}`}
>
<div
className={`${modalContainerClassName} ${
isLoading ? `${className}__loading` : ""
}`}
>
<div className={`${baseClass}__header`}>
<span>{title}</span>
<div className={`${baseClass}__ex`}>
<Button className="button button--unstyled" onClick={onExit}>
<Icon name="close" color="core-fleet-black" size="medium" />
</Button>
</div>
</div>
<div className={`${baseClass}__content`}>{children}</div>
</div>
</div>
);
};
export default Modal;