feat: 심사자 심사 반영

main
minuk926 3 years ago
parent 3ea002c329
commit 3022c5e0ae

@ -20,7 +20,6 @@
"@mui/system": "^5.4.1", "@mui/system": "^5.4.1",
"@mui/utils": "^5.4.1", "@mui/utils": "^5.4.1",
"@mui/x-data-grid": "^5.5.0", "@mui/x-data-grid": "^5.5.0",
"@mui/x-data-grid-generator": "^5.7.0",
"@reduxjs/toolkit": "^1.7.2", "@reduxjs/toolkit": "^1.7.2",
"@tabler/icons": "^1.53.0", "@tabler/icons": "^1.53.0",
"apexcharts": "^3.33.1", "apexcharts": "^3.33.1",
@ -48,13 +47,11 @@
"react-alert": "^7.0.3", "react-alert": "^7.0.3",
"react-alert-template-basic": "^1.0.2", "react-alert-template-basic": "^1.0.2",
"react-apexcharts": "^1.3.9", "react-apexcharts": "^1.3.9",
"react-beautiful-dnd": "^13.1.0",
"react-copy-to-clipboard": "^5.0.4", "react-copy-to-clipboard": "^5.0.4",
"react-currency-format": "^1.1.0", "react-currency-format": "^1.1.0",
"react-daum-postcode": "^3.0.1", "react-daum-postcode": "^3.0.1",
"react-dom": "^17.0.2", "react-dom": "^17.0.2",
"react-draft-wysiwyg": "^1.14.7", "react-draft-wysiwyg": "^1.14.7",
"react-draggable": "^4.4.4",
"react-dropzone": "^12.0.2", "react-dropzone": "^12.0.2",
"react-google-recaptcha": "^2.1.0", "react-google-recaptcha": "^2.1.0",
"react-hook-form": "^7.26.1", "react-hook-form": "^7.26.1",

@ -197,7 +197,6 @@ export async function findImages(row, alert) {
const scCode = row?.msMaincode; const scCode = row?.msMaincode;
const res = await findJudge(scCode); const res = await findJudge(scCode);
console.log(res);
if (res.success) { if (res.success) {
const [picadImgs, frecadImgs, contadImgs] = await Promise.all([ const [picadImgs, frecadImgs, contadImgs] = await Promise.all([
judgeImgList(res, scCode, 5, 'scPicad', dataGb, 'getScPicad', alert), judgeImgList(res, scCode, 5, 'scPicad', dataGb, 'getScPicad', alert),
@ -205,7 +204,6 @@ export async function findImages(row, alert) {
judgeImgList(res, scCode, 9, 'scContad', dataGb, 'getScContad', alert) judgeImgList(res, scCode, 9, 'scContad', dataGb, 'getScContad', alert)
]); ]);
console.log(picadImgs, frecadImgs, contadImgs);
return { return {
arrPicadImg: picadImgs, arrPicadImg: picadImgs,
arrFrecadImg: frecadImgs, arrFrecadImg: frecadImgs,

@ -87,7 +87,13 @@ const ModifyJudgeDataForm = ({ rowData, contDocs, ingbs, setOpen, handleModalSav
<InputLabel disabled required> <InputLabel disabled required>
접수방법 접수방법
</InputLabel> </InputLabel>
<Select disabled size="small" defaultValue="1" value={selectedIngb} onChange={(e) => setSelectedIngb(e?.target?.value)}> <Select
disabled
size="small"
defaultValue={selectedIngb}
value={selectedIngb}
onChange={(e) => setSelectedIngb(e?.target?.value)}
>
{ingbs && {ingbs &&
ingbs.map((ingb) => ( ingbs.map((ingb) => (
<MenuItem key={ingb.code} value={ingb.code}> <MenuItem key={ingb.code} value={ingb.code}>

@ -181,7 +181,14 @@ const Board = () => {
<Grid item> <Grid item>
<FormControl fullWidth> <FormControl fullWidth>
<InputLabel required>구분</InputLabel> <InputLabel required>구분</InputLabel>
<Select size="small" id="category" name="reviewYear" defaultValue="ciTitle" onChange={(e) => setCategory(e.target.value)}> <Select
size="small"
id="category"
name="reviewYear"
defaultValue={category}
value={category}
onChange={(e) => setCategory(e.target.value)}
>
<MenuItem key="1" value="ciTitle"> <MenuItem key="1" value="ciTitle">
제목 제목
</MenuItem> </MenuItem>

@ -58,12 +58,14 @@ const JudgeByUserReview = ({ msDatagb, menuName }) => {
const onJudge = () => { const onJudge = () => {
setRowDatas(rowsState?.rows); setRowDatas(rowsState?.rows);
setTitle(`${menuName} 의견진술 심의 결정`);
setOpen(true); setOpen(true);
}; };
const processJudge = useCallback( const processJudge = useCallback(
(row) => () => { (row) => () => {
setRowDatas([row]); setRowDatas([row]);
setTitle(`${menuName} 의견진술 심의 결정`);
setOpen(true); setOpen(true);
}, },
[] []
@ -228,7 +230,7 @@ const JudgeByUserReview = ({ msDatagb, menuName }) => {
// selectionModel={selectionModel} // selectionModel={selectionModel}
/> />
<CmmModal isBackdrop title={title} open={open} setOpen={setOpen}> <CmmModal isBackdrop title={title} open={open} setOpen={setOpen}>
<ProcessJudge setTitle={setTitle} rowDatas={rowDatas} showAlert={showAlert} /> <ProcessJudge setTitle={setTitle} rowDatas={rowDatas} showAlert={showAlert} setOpen={setOpen} />
</CmmModal> </CmmModal>
</MainCard> </MainCard>
); );

@ -2,120 +2,23 @@ import { useEffect, useRef, useState } from 'react';
import PropTypes from 'prop-types'; import PropTypes from 'prop-types';
import { Button, CardMedia, Divider, FormControl, Grid, InputLabel, MenuItem, Select, TextField } from '@mui/material'; import { Button, CardMedia, Divider, FormControl, Grid, InputLabel, MenuItem, Select, TextField } from '@mui/material';
import { findImages, saveJudgeData, saveJudgeResult } from 'apis/judge'; import { findImages, saveJudgeResult } from 'apis/judge';
import { SkipNext, SkipPrevious, Save } from '@mui/icons-material'; import { SkipNext, SkipPrevious, Save } from '@mui/icons-material';
import CmmModal from '../../cmm/CmmModal';
import * as React from 'react';
import Modal from '@mui/material/Modal';
import Box from '@mui/material/Box';
const style = {
position: 'absolute',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
width: 400,
bgcolor: 'background.paper',
border: '2px solid #000',
boxShadow: 24,
pt: 2,
px: 4,
pb: 3
};
function ChildModal({ open, setOpen, msuCode, showAlert }) {
const [reason, setReason] = useState('');
const [selectedResult, setSelectedResult] = useState();
const handleClose = () => {
setOpen(false);
};
const handleSave = () => {
saveJudgeResult({ msuCode, msuResult: selectedResult, msuReason: reason }).then((res) => {
if (res?.success) {
setOpen(false);
} else {
showAlert.show(`${res?.data.message}`);
}
});
};
return (
<>
<Modal hideBackdrop open={open} onClose={handleClose} aria-labelledby="child-modal-title" aria-describedby="child-modal-description">
<Box sx={{ ...style, width: 600 }}>
<h2 id="child-modal-title">심사 처리</h2>
<Grid container spacing={1} xs={12} mt={1}>
<Grid item xs={3}>
<FormControl fullWidth>
<InputLabel disabled required>
심사결과
</InputLabel>
<Select size="small" defaultValue="1" value="1" onChange={(e) => setSelectedResult(e?.target?.value)}>
<MenuItem key="1" value="1">
수용
</MenuItem>
<MenuItem key="2" value="2">
미수용
</MenuItem>
</Select>
</FormControl>
</Grid>
<Grid item xs={12}>
<TextField
sx={{
border: '0px solid red',
marginLeft: '8px'
}}
size="small"
required
label="심사사유"
fullWidth
value={reason}
onChange={(e) => setReason(e.target.value)}
/>
</Grid>
</Grid>
<Grid container spacing={1} item xs={12} mt={1}>
<Grid item xs={12}>
<Divider />
</Grid>
</Grid>
<Grid item container spacing={0.5} xs={12} mt={1}>
<Grid item>
<Button variant="contained" color="primary" size="small" onClick={handleClose}>
닫기
</Button>
</Grid>
<Grid item style={{ marginLeft: 'auto' }}>
<Button variant="contained" color="primary" size="small" onClick={handleSave}>
심사 처리
</Button>
</Grid>
</Grid>
</Box>
</Modal>
</>
);
}
const ProcessJudge = (props) => { const ProcessJudge = (props) => {
const { setTitle, rowDatas, showAlert } = props; const { rowDatas, setOpen, showAlert } = props;
const title = rowDatas[0].msDatagb === '1' ? '거주자 심의' : '장애인 심의';
const pageRef = useRef(0); const pageRef = useRef(0);
const totalPageRef = useRef(0); const totalPageRef = useRef(0);
const curDataRef = useRef({});
const [picadImgs, setPicadImgs] = useState([]); const [picadImgs, setPicadImgs] = useState([]);
const [frecadImgs, setFrecadImgs] = useState([]); const [frecadImgs, setFrecadImgs] = useState([]);
const [contadImgs, setContadImgs] = useState([]); const [contadImgs, setContadImgs] = useState([]);
const [reason, setReason] = useState();
// const [selectedResult, setSelectedResult] = useState();
const [open, setOpen] = React.useState(false);
const getImgList = (row) => { const getImgList = (row) => {
findImages(row, showAlert).then((res) => { findImages(row, showAlert).then((res) => {
const { arrPicadImg, arrFrecadImg, arrContadImg } = res; const { arrPicadImg, arrFrecadImg, arrContadImg } = res;
console.log(row, res);
setPicadImgs(arrPicadImg); setPicadImgs(arrPicadImg);
setFrecadImgs(arrFrecadImg); setFrecadImgs(arrFrecadImg);
setContadImgs(arrContadImg); setContadImgs(arrContadImg);
@ -124,31 +27,46 @@ const ProcessJudge = (props) => {
const onPrev = () => { const onPrev = () => {
pageRef.current -= 1; pageRef.current -= 1;
setTitle(`${title} [ 접수번호 : ${rowDatas[pageRef.current].msSeq}]`); curDataRef.current = rowDatas[pageRef.current];
getImgList(rowDatas[pageRef.current]); setReason(curDataRef.current.msuReason ?? '');
console.log(pageRef.current, rowDatas[pageRef.current]); setSelectedResult(curDataRef.current.msuResult);
getImgList(curDataRef.current);
}; };
const onNext = () => { const onNext = () => {
pageRef.current += 1; pageRef.current += 1;
setTitle(`${title} [ 접수번호 : ${rowDatas[pageRef.current].msSeq}]`); curDataRef.current = rowDatas[pageRef.current];
setReason(curDataRef.current.msuReason ?? '');
setSelectedResult(curDataRef.current.msuResult);
getImgList(rowDatas[pageRef.current]); getImgList(rowDatas[pageRef.current]);
console.log(pageRef.current, rowDatas[pageRef.current]);
}; };
const onJudge = () => {
setOpen(true); const handleSave = () => {
saveJudgeResult({ msuCode: curDataRef.current.msuCode, msuResult: selectedResult, msuReason: reason }).then((res) => {
if (res?.success) {
curDataRef.current.msuResult = selectedResult;
curDataRef.current.msuReason = reason;
showAlert.show('심의처리 되었습니다');
} else {
showAlert.show(`${res?.data.message}`);
}
});
};
const handleClose = () => {
setOpen(false);
}; };
useEffect(() => { useEffect(() => {
pageRef.current = 0; pageRef.current = 0;
totalPageRef.current = rowDatas.length - 1; totalPageRef.current = rowDatas.length - 1;
setTitle(`${title} [ 접수번호 : ${rowDatas[pageRef.current].msSeq}]`); curDataRef.current = rowDatas[pageRef.current];
console.log(rowDatas, rowDatas[pageRef.current].msuCode); setReason(curDataRef.current.msuReason ?? '');
getImgList(rowDatas[pageRef.current]); setSelectedResult(curDataRef.current.msuResult);
getImgList(curDataRef.current);
}, []); }, []);
return ( return (
<> <>
<Grid container columnSpacing={{ xs: 1 }}> <Grid container spacing={1}>
{picadImgs?.map((img, idx) => ( {picadImgs?.map((img, idx) => (
<Grid item xs={3} key={idx} columnSpacing={1}> <Grid item xs={3} key={idx} columnSpacing={1}>
<CardMedia <CardMedia
@ -164,7 +82,7 @@ const ProcessJudge = (props) => {
</Grid> </Grid>
))} ))}
</Grid> </Grid>
<Grid container item xs={12} m={1} /> <Grid container m={1} />
<Grid container spacing={1}> <Grid container spacing={1}>
{frecadImgs?.map((img, idx) => ( {frecadImgs?.map((img, idx) => (
<Grid item xs={3} key={idx} columnSpacing={1}> <Grid item xs={3} key={idx} columnSpacing={1}>
@ -181,7 +99,7 @@ const ProcessJudge = (props) => {
</Grid> </Grid>
))} ))}
</Grid> </Grid>
<Grid container item xs={12} m={1} /> <Grid container m={1} />
<Grid container spacing={1}> <Grid container spacing={1}>
{contadImgs?.map((img, idx) => ( {contadImgs?.map((img, idx) => (
<Grid item xs={3} key={idx} columnSpacing={1}> <Grid item xs={3} key={idx} columnSpacing={1}>
@ -198,12 +116,65 @@ const ProcessJudge = (props) => {
</Grid> </Grid>
))} ))}
</Grid> </Grid>
<Grid container item xs={12} m={1}> <Grid container m={1}>
<Grid item xs={12}>
<Divider />
</Grid>
</Grid>
<Grid container spacing={1} mt={1}>
<Grid item xs={2}>
<TextField size="small" required disabled label="접수번호" fullWidth value={rowDatas[pageRef.current].msSeq} />
</Grid>
<Grid item xs={2}>
<TextField size="small" required disabled label="위반일자" fullWidth value={rowDatas[pageRef.current].scWdate} />
</Grid>
<Grid item xs={6}>
<TextField size="small" required disabled label="위반장소" fullWidth value={rowDatas[pageRef.current].scPos} />
</Grid>
<Grid item xs={2}>
<FormControl fullWidth>
<InputLabel disabled required>
심의결정
</InputLabel>
<Select
size="small"
defaultValue={selectedResult || '1'}
value={selectedResult || '1'}
onChange={(e) => setSelectedResult(e?.target?.value)}
>
<MenuItem key="0" value="0">
심의전
</MenuItem>
<MenuItem key="1" value="1">
수용
</MenuItem>
<MenuItem key="2" value="2">
미수용
</MenuItem>
</Select>
</FormControl>
</Grid>
</Grid>
<Grid container spacing={1} mt={1}>
<Grid item xs={12}>
<TextField
size="small"
multiline
rows={2}
required
label="결정사유"
fullWidth
value={reason}
onChange={(e) => setReason(e.target.value)}
/>
</Grid>
</Grid>
<Grid container spacing={1} m={0.5}>
<Grid item xs={12}> <Grid item xs={12}>
<Divider /> <Divider />
</Grid> </Grid>
</Grid> </Grid>
<Grid item container spacing={0.5} xs={12} mt={1}> <Grid item container spacing={0.5} mt={1}>
<Grid item> <Grid item>
<Button disabled={pageRef.current === 0} variant="contained" size="small" startIcon={<SkipPrevious />} onClick={onPrev}> <Button disabled={pageRef.current === 0} variant="contained" size="small" startIcon={<SkipPrevious />} onClick={onPrev}>
이전 이전
@ -221,20 +192,24 @@ const ProcessJudge = (props) => {
</Button> </Button>
</Grid> </Grid>
<Grid item style={{ marginLeft: 'auto' }}> <Grid item style={{ marginLeft: 'auto' }}>
<Button variant="contained" size="small" startIcon={<Save />} onClick={onJudge}> <Button variant="contained" size="small" startIcon={<Save />} onClick={handleSave}>
심사 심의처리
</Button>
</Grid>
<Grid item>
<Button variant="contained" color="primary" size="small" onClick={handleClose}>
닫기
</Button> </Button>
</Grid> </Grid>
</Grid> </Grid>
<ChildModal open={open} setOpen={setOpen} msuCode={rowDatas[pageRef.current].msuCode} showAlert={showAlert} />
</> </>
); );
}; };
ProcessJudge.propTypes = { ProcessJudge.propTypes = {
rowDatas: PropTypes.object.isRequired, rowDatas: PropTypes.array.isRequired,
showAlert: PropTypes.object, showAlert: PropTypes.object,
setTitle: PropTypes.func.isRequired setOpen: PropTypes.func.isRequired
}; };
export default ProcessJudge; export default ProcessJudge;

@ -11,7 +11,6 @@ import MainCard from 'ui-component/cards/MainCard';
// project imports // project imports
import MuiDataGrid from 'views/cmm/mui-grid/MuiDataGrid'; import MuiDataGrid from 'views/cmm/mui-grid/MuiDataGrid';
import CmmModal from '../../cmm/CmmModal';
import CmmModalB from '../../cmm/CmmModalB'; import CmmModalB from '../../cmm/CmmModalB';
import UserManagerForm from './UserManagerForm'; import UserManagerForm from './UserManagerForm';
import { findUsers, removeUser, saveUser } from 'apis/user'; import { findUsers, removeUser, saveUser } from 'apis/user';

@ -1,29 +0,0 @@
import { DataGrid, useGridApiRef } from '@mui/x-data-grid';
import { useDemoData } from '@mui/x-data-grid-generator';
import CustomPagination from './CustomPagination';
export default function UseGridSelector() {
const { data, loading } = useDemoData({
dataSet: 'Commodity',
rowLength: 100,
maxColumns: 10
});
const apiRef = useGridApiRef();
return (
<div style={{ height: 400, width: '100%' }}>
<DataGrid
{...data}
loading={loading}
apiRef={apiRef}
pagination
pageSize={10}
hideFooterPagination
components={{
Footer: CustomPagination // Toolbar
}}
/>
</div>
);
}

@ -1,46 +0,0 @@
import { useState } from 'react';
import { makeStyles } from '@mui/styles';
import { Button } from '@mui/material';
import DraggableResizeModal from './DraggableResizeModal';
const useStyles = makeStyles((theme) => ({
modal: {
'& > *': {
margin: theme.spacing(1)
},
padding: theme.spacing(2)
}
}));
function DraggableModal() {
const classes = useStyles();
const [open, setOpen] = useState(false);
const [resizeOpen, setResizeOpen] = useState(false);
const handleOpenToggle = (evt) => {
setOpen(!open);
};
const handleOpenResizeToggle = (evt) => {
setResizeOpen(!resizeOpen);
};
return (
<div className={classes.modal}>
<Button variant="outlined" color="primary" onClick={handleOpenToggle}>
Open Draggable Modal
</Button>
<Button variant="outlined" color="primary" onClick={handleOpenResizeToggle}>
Open Draggable(+resize) Modal
</Button>
<DraggableResizeModal title="모달 테스트1" open={open} width={450} height={450} onClose={handleOpenToggle}>
test1
</DraggableResizeModal>
<DraggableResizeModal title="모달 테스트2" open={resizeOpen} isResize width={450} height={450} onClose={handleOpenResizeToggle}>
test2
</DraggableResizeModal>
</div>
);
}
export default DraggableModal;

@ -1,164 +0,0 @@
import React, { useEffect, useState } from 'react';
import { Paper, makeStyles, withStyles, IconButton, Typography, Divider } from '@mui/material';
import { Close as CloseIcon, Remove as RemoveIcon, WebAsset as WebAssetIcon } from '@mui/icons-material';
import Draggable from 'react-draggable';
import { ResizableBox } from 'react-resizable';
import PropTypes from 'prop-types';
const styles = (theme) => ({
modal: {
margin: 0,
padding: theme.spacing(2),
cursor: 'move',
userSelect: 'none',
minWidth: 200
},
title: {
fontWeight: 'bold'
},
closeButton: {
position: 'fixed',
right: theme.spacing(1),
top: theme.spacing(1),
color: theme.palette.grey[500]
},
minimize: {
position: 'fixed',
right: theme.spacing(6),
top: theme.spacing(1),
color: theme.palette.grey[500]
}
});
// modal
const ModalTitle = withStyles(styles)((props) => {
const { children, classes, width, isMinimized, onMinimized, onClose, ...other } = props;
return (
<div className={classes.modal} {...other} style={{ width }}>
<Typography variant="h6" className={classes.title}>
{children}
</Typography>
{onClose ? (
<IconButton aria-label="close" className={classes.closeButton} onClick={onClose}>
<CloseIcon />
</IconButton>
) : null}
{onMinimized ? (
<IconButton aria-label="close" className={classes.minimize} onClick={onMinimized}>
{isMinimized ? <WebAssetIcon /> : <RemoveIcon />}
</IconButton>
) : null}
</div>
);
});
const useContentStyles = (width, height) =>
makeStyles((theme) => ({
resizable: {
padding: theme.spacing(2),
position: 'relative',
'& .react-resizable-handle': {
position: 'absolute',
userSelect: 'none',
width: 20,
height: 20,
bottom: 0,
right: 0,
background:
"url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2IDYiIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiNmZmZmZmYwMCIgeD0iMHB4IiB5PSIwcHgiIHdpZHRoPSI2cHgiIGhlaWdodD0iNnB4Ij48ZyBvcGFjaXR5PSIwLjMwMiI+PHBhdGggZD0iTSA2IDYgTCAwIDYgTCAwIDQuMiBMIDQgNC4yIEwgNC4yIDQuMiBMIDQuMiAwIEwgNiAwIEwgNiA2IEwgNiA2IFoiIGZpbGw9IiMwMDAwMDAiLz48L2c+PC9zdmc+')",
'background-position': 'bottom right',
padding: '0 3px 3px 0',
'background-repeat': 'no-repeat',
'background-origin': 'content-box',
'box-sizing': 'border-box',
cursor: 'se-resize'
}
},
content: {
padding: theme.spacing(2),
maxHeight: height,
maxWidth: width
}
}));
// modal content isResize
const ModalContent = ({ width, height, isResize, children }) => {
const classes = useContentStyles(width, height)();
return (
<>
{isResize ? (
<ResizableBox height={height} width={width} className={classes.resizable}>
{children}
</ResizableBox>
) : (
<Paper className={classes.content}>{children}</Paper>
)}
</>
);
};
const PaperComponent = (props) => (
<Draggable handle="#draggable-modal-title">
<Paper {...props} />
</Draggable>
);
const useStyles = makeStyles((theme) => ({
modal: {
position: 'fixed',
top: '10%',
left: '10%',
zIndex: 1300,
userSelect: 'none'
}
}));
const Modal = ({ title, children, width, height, isResize, onClose }) => {
const classes = useStyles();
const [isMinimized, setIsMinimized] = useState(false);
const handleMinimized = (evt) => {
setIsMinimized(!isMinimized);
};
useEffect(() => () => {}, []);
return (
<PaperComponent className={classes.modal}>
<ModalTitle id="draggable-modal-title" onClose={onClose} width={width} isMinimized={isMinimized} onMinimized={handleMinimized}>
{title}
</ModalTitle>
<Divider />
{!isMinimized && (
<ModalContent width={width} height={height} isResize={isResize}>
{children}
</ModalContent>
)}
</PaperComponent>
);
};
// open mount unmount
const DraggableResizeModal = ({ open, ...other }) => <>{open && <Modal {...other} />}</>;
// property
DraggableResizeModal.defaultProps = {
title: '목록',
isResize: false,
width: 500,
height: 500
};
// property
DraggableResizeModal.propTypes = {
title: PropTypes.string,
open: PropTypes.bool.isRequired,
onClose: PropTypes.func,
isResize: PropTypes.bool,
width: PropTypes.number,
height: PropTypes.number
};
export default DraggableResizeModal;

@ -4,7 +4,6 @@ import MainCard from 'ui-component/cards/MainCard';
import SecondaryAction from 'ui-component/cards/CardSecondaryAction'; import SecondaryAction from 'ui-component/cards/CardSecondaryAction';
import NestedModal from './NestedModal'; import NestedModal from './NestedModal';
import BasicModal from './BasicModal'; import BasicModal from './BasicModal';
import UseGridSelector from '../../cmm/mui-grid/DataGridPaging';
// ==============================|| MODAL PAGE ||============================== // // ==============================|| MODAL PAGE ||============================== //
@ -13,7 +12,6 @@ const Modal = () => (
<ServerModal /> <ServerModal />
<BasicModal /> <BasicModal />
<NestedModal /> <NestedModal />
<UseGridSelector />
</MainCard> </MainCard>
); );

Loading…
Cancel
Save