ConfirmModal.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import React, { FC } from 'react';
  2. import { useTranslation } from 'next-i18next';
  3. import {
  4. Modal, ModalHeader, ModalBody, ModalFooter,
  5. } from 'reactstrap';
  6. type ConfirmModalProps = {
  7. isModalOpen: boolean
  8. warningMessage: string
  9. supplymentaryMessage: string | null
  10. confirmButtonTitle: string
  11. onConfirm?: () => Promise<void>
  12. onCancel?: () => void
  13. };
  14. export const ConfirmModal: FC<ConfirmModalProps> = (props: ConfirmModalProps) => {
  15. const { t } = useTranslation();
  16. const onCancel = () => {
  17. if (props.onCancel != null) {
  18. props.onCancel();
  19. }
  20. };
  21. const onConfirm = () => {
  22. if (props.onConfirm != null) {
  23. props.onConfirm();
  24. }
  25. };
  26. return (
  27. <Modal isOpen={props.isModalOpen} toggle={onCancel} className="">
  28. <ModalHeader tag="h4" toggle={onCancel} className="bg-danger">
  29. <i className="icon-fw icon-question" />
  30. {t('Warning')}
  31. </ModalHeader>
  32. <ModalBody>
  33. {props.warningMessage}
  34. {
  35. props.supplymentaryMessage != null && (
  36. <>
  37. <br />
  38. <br />
  39. <span className="text-warning">
  40. <>
  41. <i className="icon-exclamation icon-fw"></i>
  42. {props.supplymentaryMessage}
  43. </>
  44. </span>
  45. </>
  46. )
  47. }
  48. </ModalBody>
  49. <ModalFooter>
  50. <button
  51. type="button"
  52. className="btn btn-outline-secondary"
  53. onClick={onCancel}
  54. >
  55. {t('Cancel')}
  56. </button>
  57. <button
  58. type="button"
  59. className="btn btn-outline-primary ml-3"
  60. onClick={onConfirm}
  61. >
  62. {props.confirmButtonTitle ?? t('Confirm')}
  63. </button>
  64. </ModalFooter>
  65. </Modal>
  66. );
  67. };