Proyectos de Subversion LeadersLinked - SPA

Rev

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

Rev Autor Línea Nro. Línea
3584 stevensc 1
import React from 'react';
2
import { useSelector } from 'react-redux';
3
import { Button, IconButton } from '@mui/material';
4
import { Modal as MuiModal } from '@mui/material';
5
import { Close } from '@mui/icons-material';
1426 stevensc 6
 
3584 stevensc 7
import Spinner from '../Spinner';
8
import Widget from '../Widget';
1426 stevensc 9
 
10
const Modal = ({
11
  show = false,
12
  title = '',
3172 stevensc 13
  onAccept,
14
  onClose,
1426 stevensc 15
  onReject = null,
16
  labelAccept = '',
17
  labelReject = '',
18
  size = 'md',
19
  showFooter = true,
1960 stevensc 20
  dialogClassName,
2722 stevensc 21
  loading = false,
3171 stevensc 22
  children,
23
  formId = ''
1426 stevensc 24
}) => {
3584 stevensc 25
  const labels = useSelector(({ intl }) => intl.labels);
1426 stevensc 26
 
27
  return (
3584 stevensc 28
    <MuiModal open={show} onClose={onClose}>
29
      <Widget
30
        styles={{
31
          position: 'absolute',
32
          top: '50%',
33
          left: '50%',
34
          transform: 'translate(-50%, -50%)',
35
          width: size === 'sm' ? '300px' : size === 'md' ? '500px' : '700px',
36
          maxHeight: '90vh',
37
          overflowY: 'auto'
38
        }}
39
        className={dialogClassName}
40
      >
41
        <Widget.Header
42
          title={title}
43
          renderAction={() => (
44
            <IconButton onClick={onClose}>
45
              <Close />
46
            </IconButton>
47
          )}
48
        />
1426 stevensc 49
 
3584 stevensc 50
        <Widget.Body styles={{ position: 'relative' }}>
51
          {loading && <Spinner absolute />}
52
          {children}
53
        </Widget.Body>
1426 stevensc 54
 
3584 stevensc 55
        {showFooter && (
3585 stevensc 56
          <Widget.Footer styles={{ display: 'flex', justifyContent: 'flex-start', gap: 1 }}>
3584 stevensc 57
            <Button
58
              color='primary'
59
              onClick={onAccept}
60
              disabled={loading}
61
              form={formId}
62
              type={formId ? 'submit' : 'button'}
63
            >
64
              {labelAccept || labels.accept}
65
            </Button>
66
            <Button color='secondary' onClick={onReject || onClose}>
67
              {labelReject || labels.cancel}
68
            </Button>
3585 stevensc 69
          </Widget.Footer>
3584 stevensc 70
        )}
71
      </Widget>
72
    </MuiModal>
73
  );
74
};
1426 stevensc 75
 
3584 stevensc 76
export default Modal;