Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
1914 stevensc 1
import React, { useCallback, useState } from 'react'
1426 stevensc 2
import { useSelector } from 'react-redux'
1904 stevensc 3
import { Box } from '@mui/material'
1426 stevensc 4
import BootstrapModal from 'react-bootstrap/Modal'
5
 
1567 stevensc 6
import Button from '../buttons/Buttons'
1904 stevensc 7
import Spinner from '../Spinner'
1426 stevensc 8
 
9
import styles from './Modal.module.scss'
10
 
11
const Modal = ({
12
  show = false,
13
  title = '',
1916 stevensc 14
  onAccept = () => null,
1426 stevensc 15
  onClose = () => {},
16
  onShow = () => {},
17
  onReject = null,
18
  labelAccept = '',
19
  labelReject = '',
20
  size = 'md',
21
  centered = true,
22
  animation = true,
23
  showFooter = true,
24
  dialogClassName,
25
  children
26
}) => {
1911 stevensc 27
  const [loading, setLoading] = useState(false)
1426 stevensc 28
  const labels = useSelector(({ intl }) => intl.labels)
29
 
1921 stevensc 30
  const handleAccept = useCallback(async () => {
1918 stevensc 31
    setLoading(true)
1921 stevensc 32
    await onAccept()
33
  }, [onAccept])
1918 stevensc 34
 
1426 stevensc 35
  return (
36
    <BootstrapModal
37
      animation={animation}
38
      className={dialogClassName}
39
      centered={centered}
40
      show={show}
41
      size={size}
42
      onHide={onClose}
43
      onShow={onShow}
44
    >
45
      <BootstrapModal.Header className={styles['modal-header']} closeButton>
46
        <BootstrapModal.Title>{title}</BootstrapModal.Title>
47
      </BootstrapModal.Header>
48
 
49
      <BootstrapModal.Body className={styles['modal-content']}>
50
        {children}
1912 stevensc 51
 
1908 stevensc 52
        {loading ? (
1904 stevensc 53
          <Box
54
            sx={{
55
              position: 'absolute',
1908 stevensc 56
              zIndex: 1250,
1904 stevensc 57
              width: '100%',
58
              height: '100%',
59
              top: 0,
60
              left: 0,
61
              display: 'grid',
62
              placeItems: 'center'
63
            }}
64
          >
65
            <Spinner />
66
          </Box>
1908 stevensc 67
        ) : null}
1426 stevensc 68
      </BootstrapModal.Body>
69
 
70
      {showFooter ? (
71
        <BootstrapModal.Footer className={styles['modal-footer']}>
1908 stevensc 72
          <Button variant='primary' onClick={handleAccept} disabled={loading}>
1567 stevensc 73
            {labelAccept || labels.accept}
74
          </Button>
75
          <Button variant='secondary' onClick={onReject || onClose}>
76
            {labelReject || labels.cancel}
77
          </Button>
1426 stevensc 78
        </BootstrapModal.Footer>
79
      ) : null}
80
    </BootstrapModal>
81
  )
82
}
83
 
84
export default Modal