model-navigator-standalone
Version:
Standalone MDF graph model visualizer
97 lines (86 loc) • 2.77 kB
JSX
import React, { useContext } from "react";
import { useSelector, useDispatch } from 'react-redux';
import withStyles from '@mui/styles/withStyles';
import DataDictionaryPropertyTable from "../DataDictionaryPropertyTable";
import "./DataDictionaryNode.css";
import styles from "./DataDictionaryNode.style";
import NodeViewComponent from "./components/NodeViewComponent";
import { ConfigContext } from "../../../Config/ConfigContext";
import {
tableNodeExpandChanged,
selectTableNodeIsExpanded,
} from '../../../../../features/graph/graphSlice';
const NODE_STATE = {
OPEN: "open",
CLOSED: "close",
};
const DataDictionaryNode = ({
classes,
node, // this is an mdf-reader node, not a flowgraph node
category,
description,
}) => {
const dispatch = useDispatch();
const config = useContext( ConfigContext );
// expanded={highlightingNodeID && highlightingNodeID.includes(node.handle)}
const isExpanded = useSelector(
state => selectTableNodeIsExpanded(state, node.handle)
);
const handleClickNode = (nodeID) => {
if (!isExpanded) {
dispatch(tableNodeExpandChanged({nodeState: NODE_STATE.OPEN, nodeID}));
} else {
dispatch(tableNodeExpandChanged({nodeState: NODE_STATE.CLOSED, nodeID}));
}
};
// const handleCloseNode = (nodeID) => {
// dispatch(tableNodeExpandChanged({nodeState: NODE_STATE.CLOSED, nodeID}));
// };
// const handleDownloadTemplate = (e, format) => {
// const { node } = props;
// e.stopPropagation(); // no toggling
// downloadTemplate(format, node.handle);
// };
const color = category
? (config.tagAttribute('Category')
? config.tagAttribute('Category').table.color
: '#000000' )
: '#000000';
const propertyCount = node.props().length;
return (
<>
<div
className={classes.node}
style={{ borderLeftColor: color }}
onClick={() => handleClickNode(node.handle)}
onKeyPress={() => handleClickNode(node.handle)}
role="button"
tabIndex={0}
>
<NodeViewComponent
node={node}
isExpanded={isExpanded}
description={description}
// pdfDownloadConfig={pdfDownloadConfig}
propertyCount={propertyCount}
/>
</div>
{isExpanded && (
<div
className={classes.property}
style={{
borderLeft: `5px solid ${color}`,
borderBottom: `1px solid #adbec4`,
}}
>
<DataDictionaryPropertyTable
title={node.handle}
s node={node}
// horizontal // supports horizontal orientation
/>
</div>
)}
</>
);
}
export default withStyles(styles)(DataDictionaryNode);