Proyectos de Subversion LeadersLinked - SPA

Rev

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

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