Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
1904 stevensc 1
import React, { 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'
1904 stevensc 10
import { isPromise } from '@app/utils'
1426 stevensc 11
 
12
const Modal = ({
13
  show = false,
14
  title = '',
15
  onAccept = () => {},
16
  onClose = () => {},
17
  onShow = () => {},
18
  onReject = null,
19
  labelAccept = '',
20
  labelReject = '',
21
  size = 'md',
22
  centered = true,
23
  animation = true,
24
  showFooter = true,
25
  dialogClassName,
26
  children
27
}) => {
1904 stevensc 28
  const [loading, setLoading] = useState(false)
1426 stevensc 29
  const labels = useSelector(({ intl }) => intl.labels)
30
 
1904 stevensc 31
  const handleAccept = () => {
32
    const enableLoading = isPromise(onAccept)
1906 stevensc 33
    console.log(enableLoading)
1904 stevensc 34
 
35
    if (!enableLoading) {
36
      onAccept()
1906 stevensc 37
      return
1904 stevensc 38
    }
39
 
40
    setLoading(true)
41
    onAccept().finally(() => setLoading(false))
42
  }
43
 
1426 stevensc 44
  return (
45
    <BootstrapModal
46
      animation={animation}
47
      className={dialogClassName}
48
      centered={centered}
49
      show={show}
50
      size={size}
51
      onHide={onClose}
52
      onShow={onShow}
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}
1904 stevensc 60
        {loading && (
61
          <Box
62
            sx={{
63
              position: 'absolute',
64
              zIndex: 50,
65
              width: '100%',
66
              height: '100%',
67
              top: 0,
68
              left: 0,
69
              display: 'grid',
70
              placeItems: 'center'
71
            }}
72
          >
73
            <Spinner />
74
          </Box>
75
        )}
1426 stevensc 76
      </BootstrapModal.Body>
77
 
78
      {showFooter ? (
79
        <BootstrapModal.Footer className={styles['modal-footer']}>
1904 stevensc 80
          <Button variant='primary' onClick={handleAccept}>
1567 stevensc 81
            {labelAccept || labels.accept}
82
          </Button>
83
          <Button variant='secondary' onClick={onReject || onClose}>
84
            {labelReject || labels.cancel}
85
          </Button>
1426 stevensc 86
        </BootstrapModal.Footer>
87
      ) : null}
88
    </BootstrapModal>
89
  )
90
}
91
 
92
export default Modal