kafka-ui/kafka-ui-react-app/src/components/common/ConfirmationModal/ConfirmationModal.tsx
Oleg Shur eb47ec012d
Upgrade to React 18 (#1955)
* Upgrade deps

* migration

* Fix specs

* exclude index.tsx from sonar metrics

* Update deps
2022-05-12 01:03:08 +03:00

66 lines
1.5 KiB
TypeScript

import React, { PropsWithChildren } from 'react';
import { Button } from 'components/common/Button/Button';
import { ConfirmationModalWrapper } from './ConfirmationModal.styled';
export interface ConfirmationModalProps {
isOpen?: boolean;
title?: React.ReactNode;
onConfirm(): void;
onCancel(): void;
isConfirming?: boolean;
submitBtnText?: string;
}
const ConfirmationModal: React.FC<
PropsWithChildren<ConfirmationModalProps>
> = ({
isOpen,
children,
title = 'Confirm the action',
onCancel,
onConfirm,
isConfirming = false,
submitBtnText = 'Submit',
}) => {
const cancelHandler = React.useCallback(() => {
if (!isConfirming) {
onCancel();
}
}, [isConfirming, onCancel]);
return isOpen ? (
<ConfirmationModalWrapper>
<div onClick={cancelHandler} aria-hidden="true" role="button" />
<div>
<header>
<p>{title}</p>
</header>
<section>{children}</section>
<footer>
<Button
buttonType="secondary"
buttonSize="M"
onClick={cancelHandler}
type="button"
disabled={isConfirming}
>
Cancel
</Button>
<Button
buttonType="primary"
buttonSize="M"
onClick={onConfirm}
type="button"
disabled={isConfirming}
>
{submitBtnText}
</Button>
</footer>
</div>
</ConfirmationModalWrapper>
) : null;
};
export default ConfirmationModal;