generic-confirm-modal.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. import { useTranslation } from 'react-i18next'
  2. import { memo } from 'react'
  3. import {
  4. OLModal,
  5. OLModalBody,
  6. OLModalFooter,
  7. OLModalHeader,
  8. OLModalTitle,
  9. } from '@/shared/components/ol/ol-modal'
  10. import OLButton from '@/shared/components/ol/ol-button'
  11. import { ButtonProps } from '@/shared/components/types/button-props'
  12. export type GenericConfirmModalOwnProps = {
  13. title: string
  14. message: string
  15. onConfirm: () => void
  16. confirmLabel?: string
  17. primaryVariant?: ButtonProps['variant']
  18. }
  19. type GenericConfirmModalProps = React.ComponentProps<typeof OLModal> &
  20. GenericConfirmModalOwnProps
  21. function GenericConfirmModal({
  22. title,
  23. message,
  24. confirmLabel,
  25. primaryVariant = 'primary',
  26. onConfirm,
  27. ...modalProps
  28. }: GenericConfirmModalProps) {
  29. const { t } = useTranslation()
  30. return (
  31. <OLModal {...modalProps}>
  32. <OLModalHeader>
  33. <OLModalTitle>{title}</OLModalTitle>
  34. </OLModalHeader>
  35. <OLModalBody className="modal-generic-confirm">{message}</OLModalBody>
  36. <OLModalFooter>
  37. <OLButton variant="secondary" onClick={() => modalProps.onHide()}>
  38. {t('cancel')}
  39. </OLButton>
  40. <OLButton variant={primaryVariant} onClick={onConfirm}>
  41. {confirmLabel || t('ok')}
  42. </OLButton>
  43. </OLModalFooter>
  44. </OLModal>
  45. )
  46. }
  47. export default memo(GenericConfirmModal)