mirror of
https://github.com/Unleash/unleash.git
synced 2025-06-04 01:18:20 +02:00
feat: close dialog when esc is pressed (#4567)
This commit is contained in:
parent
35fe575d0d
commit
5d43a92243
@ -7,6 +7,7 @@ import { TokenType } from 'interfaces/token';
|
|||||||
|
|
||||||
interface IConfirmUserLink {
|
interface IConfirmUserLink {
|
||||||
open: boolean;
|
open: boolean;
|
||||||
|
setOpen: (status: boolean) => void;
|
||||||
closeConfirm: () => void;
|
closeConfirm: () => void;
|
||||||
token: string;
|
token: string;
|
||||||
type?: string;
|
type?: string;
|
||||||
@ -14,6 +15,7 @@ interface IConfirmUserLink {
|
|||||||
|
|
||||||
export const ConfirmToken = ({
|
export const ConfirmToken = ({
|
||||||
open,
|
open,
|
||||||
|
setOpen,
|
||||||
closeConfirm,
|
closeConfirm,
|
||||||
token,
|
token,
|
||||||
type,
|
type,
|
||||||
@ -21,6 +23,7 @@ export const ConfirmToken = ({
|
|||||||
return (
|
return (
|
||||||
<Dialogue
|
<Dialogue
|
||||||
open={open}
|
open={open}
|
||||||
|
setOpen={setOpen}
|
||||||
onClick={closeConfirm}
|
onClick={closeConfirm}
|
||||||
primaryButtonText="Close"
|
primaryButtonText="Close"
|
||||||
title="New token created"
|
title="New token created"
|
||||||
|
@ -147,6 +147,7 @@ export const CreateApiToken = ({ modal = false }: ICreateApiTokenProps) => {
|
|||||||
</ApiTokenForm>
|
</ApiTokenForm>
|
||||||
<ConfirmToken
|
<ConfirmToken
|
||||||
open={showConfirm}
|
open={showConfirm}
|
||||||
|
setOpen={setShowConfirm}
|
||||||
closeConfirm={closeConfirm}
|
closeConfirm={closeConfirm}
|
||||||
token={token}
|
token={token}
|
||||||
type={type}
|
type={type}
|
||||||
|
22
frontend/src/component/common/Dialogue/Dialogue.test.tsx
Normal file
22
frontend/src/component/common/Dialogue/Dialogue.test.tsx
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
import { fireEvent, screen } from '@testing-library/react';
|
||||||
|
import { render } from 'utils/testRenderer';
|
||||||
|
import { Dialogue } from './Dialogue';
|
||||||
|
import { vi } from 'vitest';
|
||||||
|
|
||||||
|
test('modal should close when escape is pressed', () => {
|
||||||
|
const mockSetOpen = vi.fn();
|
||||||
|
render(
|
||||||
|
<Dialogue
|
||||||
|
open={true}
|
||||||
|
setOpen={mockSetOpen}
|
||||||
|
title={'New dialogue created'}
|
||||||
|
/>
|
||||||
|
);
|
||||||
|
|
||||||
|
expect(screen.getByText('New dialogue created')).toBeInTheDocument();
|
||||||
|
|
||||||
|
const dialogue = screen.getByRole('presentation');
|
||||||
|
fireEvent.keyDown(dialogue, { key: 'Escape', code: 'Escape' });
|
||||||
|
|
||||||
|
expect(mockSetOpen).toHaveBeenCalledWith(false);
|
||||||
|
});
|
@ -1,4 +1,4 @@
|
|||||||
import React from 'react';
|
import React, { KeyboardEvent } from 'react';
|
||||||
import {
|
import {
|
||||||
Button,
|
Button,
|
||||||
Dialog,
|
Dialog,
|
||||||
@ -45,6 +45,7 @@ interface IDialogue {
|
|||||||
primaryButtonText?: string;
|
primaryButtonText?: string;
|
||||||
secondaryButtonText?: string;
|
secondaryButtonText?: string;
|
||||||
open: boolean;
|
open: boolean;
|
||||||
|
setOpen?: (status: boolean) => void;
|
||||||
onClick?: (e: React.SyntheticEvent) => void;
|
onClick?: (e: React.SyntheticEvent) => void;
|
||||||
onClose?: (e: React.SyntheticEvent, reason?: string) => void;
|
onClose?: (e: React.SyntheticEvent, reason?: string) => void;
|
||||||
style?: object;
|
style?: object;
|
||||||
@ -53,12 +54,13 @@ interface IDialogue {
|
|||||||
maxWidth?: 'lg' | 'sm' | 'xs' | 'md' | 'xl';
|
maxWidth?: 'lg' | 'sm' | 'xs' | 'md' | 'xl';
|
||||||
disabledPrimaryButton?: boolean;
|
disabledPrimaryButton?: boolean;
|
||||||
formId?: string;
|
formId?: string;
|
||||||
permissionButton?: JSX.Element;
|
permissionButton?: React.JSX.Element;
|
||||||
}
|
}
|
||||||
|
|
||||||
export const Dialogue: React.FC<IDialogue> = ({
|
export const Dialogue: React.FC<IDialogue> = ({
|
||||||
children,
|
children,
|
||||||
open,
|
open,
|
||||||
|
setOpen,
|
||||||
onClick,
|
onClick,
|
||||||
onClose,
|
onClose,
|
||||||
title,
|
title,
|
||||||
@ -78,10 +80,18 @@ export const Dialogue: React.FC<IDialogue> = ({
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
: onClick;
|
: onClick;
|
||||||
|
|
||||||
|
const onKeyDown = (event: KeyboardEvent) => {
|
||||||
|
if (event.key === 'Escape') {
|
||||||
|
setOpen?.(false);
|
||||||
|
}
|
||||||
|
};
|
||||||
return (
|
return (
|
||||||
<StyledDialog
|
<StyledDialog
|
||||||
open={open}
|
open={open}
|
||||||
onClose={onClose}
|
onClose={onClose}
|
||||||
|
onKeyDown={onKeyDown}
|
||||||
|
role={'dialog'}
|
||||||
fullWidth={fullWidth}
|
fullWidth={fullWidth}
|
||||||
aria-labelledby={'simple-modal-title'}
|
aria-labelledby={'simple-modal-title'}
|
||||||
aria-describedby={'simple-modal-description'}
|
aria-describedby={'simple-modal-description'}
|
||||||
|
@ -140,6 +140,7 @@ export const CreateProjectApiTokenForm = () => {
|
|||||||
</ApiTokenForm>
|
</ApiTokenForm>
|
||||||
<ConfirmToken
|
<ConfirmToken
|
||||||
open={showConfirm}
|
open={showConfirm}
|
||||||
|
setOpen={setShowConfirm}
|
||||||
closeConfirm={closeConfirm}
|
closeConfirm={closeConfirm}
|
||||||
token={token}
|
token={token}
|
||||||
type={type}
|
type={type}
|
||||||
|
@ -21,6 +21,7 @@ export const PersonalAPITokenDialog: FC<IPersonalAPITokenDialogProps> = ({
|
|||||||
}) => (
|
}) => (
|
||||||
<Dialogue
|
<Dialogue
|
||||||
open={open}
|
open={open}
|
||||||
|
setOpen={setOpen}
|
||||||
secondaryButtonText="Close"
|
secondaryButtonText="Close"
|
||||||
onClose={(_, muiCloseReason?: string) => {
|
onClose={(_, muiCloseReason?: string) => {
|
||||||
if (!muiCloseReason) {
|
if (!muiCloseReason) {
|
||||||
|
Loading…
Reference in New Issue
Block a user