generic-confirm-modal.tsx 1.3 KB

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