Proyectos de Subversion LeadersLinked - SPA

Rev

Rev 2556 | Rev 2722 | Ir a la última revisión | | Comparar con el anterior | Ultima modificación | Ver Log |

Rev Autor Línea Nro. Línea
1926 stevensc 1
import React, { useCallback, useState, useEffect } from 'react'
1426 stevensc 2
import { useSelector } from 'react-redux'
2721 stevensc 3
 
1426 stevensc 4
import BootstrapModal from 'react-bootstrap/Modal'
5
 
1922 stevensc 6
import { isPromise } from '@app/utils'
7
 
1567 stevensc 8
import Button from '../buttons/Buttons'
1426 stevensc 9
 
10
import styles from './Modal.module.scss'
11
 
12
const Modal = ({
13
  show = false,
14
  title = '',
1916 stevensc 15
  onAccept = () => null,
1426 stevensc 16
  onClose = () => {},
17
  onShow = () => {},
18
  onReject = null,
19
  labelAccept = '',
20
  labelReject = '',
21
  size = 'md',
22
  centered = true,
23
  animation = true,
24
  showFooter = true,
1960 stevensc 25
  dialogClassName,
1426 stevensc 26
  children
27
}) => {
1911 stevensc 28
  const [loading, setLoading] = useState(false)
1426 stevensc 29
  const labels = useSelector(({ intl }) => intl.labels)
30
 
1925 stevensc 31
  const handleAccept = useCallback(() => {
1922 stevensc 32
    const enableLoading = isPromise(onAccept)
1923 stevensc 33
 
1979 stevensc 34
    if (enableLoading) setLoading(true)
35
    onAccept()
1921 stevensc 36
  }, [onAccept])
1918 stevensc 37
 
1926 stevensc 38
  useEffect(() => {
39
    if (!show && loading) setLoading(false)
40
  }, [show, loading])
41
 
1426 stevensc 42
  return (
43
    <BootstrapModal
44
      animation={animation}
1960 stevensc 45
      className={dialogClassName}
1426 stevensc 46
      centered={centered}
47
      show={show}
48
      size={size}
49
      onHide={onClose}
50
      onShow={onShow}
2556 stevensc 51
      autoFocus={false}
52
      enforceFocus={false}
1426 stevensc 53
    >
54
      <BootstrapModal.Header className={styles['modal-header']} closeButton>
55
        <BootstrapModal.Title>{title}</BootstrapModal.Title>
56
      </BootstrapModal.Header>
57
 
58
      <BootstrapModal.Body className={styles['modal-content']}>
59
        {children}
60
      </BootstrapModal.Body>
61
 
62
      {showFooter ? (
63
        <BootstrapModal.Footer className={styles['modal-footer']}>
1908 stevensc 64
          <Button variant='primary' onClick={handleAccept} disabled={loading}>
1567 stevensc 65
            {labelAccept || labels.accept}
66
          </Button>
67
          <Button variant='secondary' onClick={onReject || onClose}>
68
            {labelReject || labels.cancel}
69
          </Button>
1426 stevensc 70
        </BootstrapModal.Footer>
71
      ) : null}
72
    </BootstrapModal>
73
  )
74
}
75
 
76
export default Modal