mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2024-11-29 03:53:53 -06:00
70 lines
2.0 KiB
JavaScript
70 lines
2.0 KiB
JavaScript
import React from 'react';
|
|
import { styled } from '@mui/material/styles';
|
|
import CheckboxTree from 'react-checkbox-tree';
|
|
import CheckBoxIcon from '@mui/icons-material/CheckBox';
|
|
import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';
|
|
import IndeterminateCheckBoxIcon from '@mui/icons-material/IndeterminateCheckBox';
|
|
import ExpandMoreIcon from '@mui/icons-material/ExpandMore';
|
|
import ChevronRightIcon from '@mui/icons-material/ChevronRight';
|
|
import PropTypes from 'prop-types';
|
|
|
|
|
|
const StyledDiv = styled('div')(({theme}) => ({
|
|
height: '100%',
|
|
'& .rct-collapse, .rct-checkbox': {
|
|
padding: 0
|
|
},
|
|
'& .rct-node-leaf':{
|
|
padding: '0 0 0 10px'
|
|
},
|
|
'& .react-checkbox-tree': {
|
|
height: '97%',
|
|
fontSize: '0.815rem',
|
|
overflow: 'auto',
|
|
...theme.mixins.panelBorder
|
|
},
|
|
'& .CheckBoxTree-unchecked': {
|
|
fill: theme.otherVars.borderColor
|
|
},
|
|
'& .CheckBoxTree-checked': {
|
|
fill: theme.palette.primary.main
|
|
}
|
|
}));
|
|
|
|
export default function CheckBoxTree({treeData, ...props}) {
|
|
const [checked, setChecked] = React.useState([]);
|
|
const [expanded, setExpanded] = React.useState([]);
|
|
|
|
React.useEffect(() => {
|
|
if (props.getSelectedServers) {
|
|
props.getSelectedServers(checked);
|
|
}
|
|
}, [checked]);
|
|
|
|
return (
|
|
<StyledDiv>
|
|
<CheckboxTree
|
|
nodes={treeData}
|
|
checked={checked}
|
|
expanded={expanded}
|
|
onCheck={checkedVal => setChecked(checkedVal)}
|
|
onExpand={expandedVal => setExpanded(expandedVal)}
|
|
showNodeIcon={false}
|
|
icons={{
|
|
check: <CheckBoxIcon className='CheckBoxTree-checked'/>,
|
|
uncheck: <CheckBoxOutlineBlankIcon className='CheckBoxTree-unchecked'/>,
|
|
halfCheck: <IndeterminateCheckBoxIcon className='CheckBoxTree-checked'/>,
|
|
expandClose: <ChevronRightIcon />,
|
|
expandOpen: <ExpandMoreIcon />,
|
|
leaf: <ChevronRightIcon />
|
|
}}
|
|
/>
|
|
</StyledDiv>
|
|
);
|
|
}
|
|
|
|
CheckBoxTree.propTypes = {
|
|
treeData: PropTypes.array,
|
|
getSelectedServers: PropTypes.func
|
|
};
|