Skip to content

Commit 8dcd522

Browse files
authored
Compare Models (#734)
* Compare Models
1 parent 4561f82 commit 8dcd522

7 files changed

Lines changed: 1210 additions & 959 deletions

File tree

.eslintrc.js

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,7 @@ module.exports = {
3636
'@typescript-eslint/require-array-sort-compare': ['error', {
3737
ignoreStringArrays: true
3838
}],
39-
'react/jsx-curly-spacing': ['error', {
40-
when: 'always',
41-
allowMultiline: true,
42-
children: true
43-
}],
39+
'react/jsx-curly-spacing': 'off',
4440
'eol-last': ['error', 'always'],
4541
'no-multiple-empty-lines': 'error',
4642
semi: ['error', 'always'],

package-lock.json

Lines changed: 721 additions & 942 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
"d3": "^7.8.5",
2727
"gh-pages": "^5.0.0",
2828
"jest": "^29.7.0",
29-
"jspdf": "^3.0.3",
29+
"jspdf": "^4.0.0",
3030
"jspdf-autotable": "^5.0.2",
3131
"lodash": "^4.17.21",
3232
"numeral": "^2.0.6",
@@ -35,7 +35,7 @@
3535
"react-countup": "^6.5.0",
3636
"react-dom": "^18.2.0",
3737
"react-leader-line": "^1.0.5",
38-
"react-router-dom": "6.10.0",
38+
"react-router-dom": "^6.30.3",
3939
"react-scripts": "^5.0.1",
4040
"recharts": "^2.15.1",
4141
"simplebar-react": "^3.2.4",

src/components/Button/ThreeWayToggle/index.tsx

Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
import * as React from 'react';
22
import ToggleButton from '@mui/material/ToggleButton';
3+
import CompareArrowsIcon from "@mui/icons-material/CompareArrows";
4+
35
import ToggleButtonGroup from '@mui/material/ToggleButtonGroup';
46
import ModelTable from '../../../pages/ModelOfInterest/ModelDisplay/ModelTable';
57
import SearchVoiList from '../../../pages/VulnerabilityOfInterest/VoiTable/SearchVoiList';
@@ -8,6 +10,8 @@ import graphIcon from "../../../assets/images/data-flow.png";
810
import tableIcon from "../../../assets/images/cells.png";
911
import arcIcon from "../../../assets/images/arc.png";
1012
import ArcDiagram from '../../../pages/ModelOfInterest/ArcDiagram';
13+
import { Button } from '@mui/material';
14+
import CompareModelsModal from '../../../pages/ShowModelDetails/CompareModelsModal';
1115

1216
function switchView(viewValue: any, filteredCveReport: any, filterName: any, handleFilterByName: any) {
1317
switch (viewValue) {
@@ -16,10 +20,10 @@ function switchView(viewValue: any, filteredCveReport: any, filterName: any, han
1620
<>
1721
<SearchVoiList
1822
placeholderName="Search model by name"
19-
filterName={ filterName }
20-
onFilterName={ handleFilterByName }
23+
filterName={filterName}
24+
onFilterName={handleFilterByName}
2125
/>
22-
<ModelTable data={ filteredCveReport } />
26+
<ModelTable data={filteredCveReport} />
2327
</>
2428
);
2529
case "graph":
@@ -39,6 +43,7 @@ function switchView(viewValue: any, filteredCveReport: any, filterName: any, han
3943

4044
export default function ThreeWayToggleButton({ filteredCveReport, filterName, handleFilterByName }: any) {
4145
const [view, setView] = React.useState('table');
46+
const [openCompare, setOpenCompare] = React.useState(false);
4247

4348
const handleChange = (
4449
event: React.MouseEvent<HTMLElement>,
@@ -50,17 +55,45 @@ export default function ThreeWayToggleButton({ filteredCveReport, filterName, ha
5055
return (
5156
<>
5257
<ToggleButtonGroup
53-
value={ view }
58+
value={view}
5459
exclusive
55-
onChange={ handleChange }
60+
onChange={handleChange}
5661
aria-label="Platform"
57-
style={ { float: 'right', paddingTop: "2%", paddingRight: "1%" } }
62+
style={{ float: 'right', paddingTop: "2%", paddingRight: "1%" }}
5863
>
59-
<ToggleButton style={ { color: "black", fontWeight: "bold" } } value="table" title='Table view of models'><img alt='' style={ { display: "block", width: "17px" } } src={ tableIcon } /></ToggleButton>
60-
<ToggleButton style={ { color: "black", fontWeight: "bold" } } value="graph" title='Force directed graph that show the models and its dependencies'><img alt='' style={ { display: "block", width: "17px" } } src={ graphIcon } /></ToggleButton>
61-
<ToggleButton style={ { color: "black", fontWeight: "bold" } } value="arc" title='Arc graph that shows the dependencies between models, vulnerabilities and projects'><img alt='' style={ { display: "block", width: "17px" } } src={ arcIcon } /></ToggleButton>
64+
<Button
65+
variant="contained"
66+
size="small"
67+
startIcon={<CompareArrowsIcon />}
68+
onClick={() => setOpenCompare(true)}
69+
sx={{
70+
backgroundColor: "#1976d2",
71+
color: "#ffffff",
72+
textTransform: "none",
73+
fontWeight: 600,
74+
mr: 1,
75+
"&:hover": {
76+
backgroundColor: "#1565c0"
77+
}
78+
}}
79+
>
80+
Compare Models
81+
</Button>
82+
83+
<ToggleButton style={{ color: "black", fontWeight: "bold" }} value="table" title='Table view of models'><img alt='' style={{ display: "block", width: "17px" }} src={tableIcon} /></ToggleButton>
84+
<ToggleButton style={{ color: "black", fontWeight: "bold" }} value="graph" title='Force directed graph that show the models and its dependencies'><img alt='' style={{ display: "block", width: "17px" }} src={graphIcon} /></ToggleButton>
85+
<ToggleButton style={{ color: "black", fontWeight: "bold" }} value="arc" title='Arc graph that shows the dependencies between models, vulnerabilities and projects'><img alt='' style={{ display: "block", width: "17px" }} src={arcIcon} /></ToggleButton>
6286
</ToggleButtonGroup>
63-
{ switchView(view, filteredCveReport, filterName, handleFilterByName) }
87+
88+
{ /* Views */}
89+
{switchView(view, filteredCveReport, filterName, handleFilterByName)}
90+
91+
{ /* Compare modal */}
92+
<CompareModelsModal
93+
open={openCompare}
94+
onClose={() => setOpenCompare(false)}
95+
models={filteredCveReport}
96+
/>
6497
</>
6598
);
6699
}

src/pages/ModelOfInterest/ModelDisplay/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ function filterDataBasedOnUserSelecrtionOnRiskriskAnalysis(
3434
export default function ModelDisplay({ selectedFilter }: any) {
3535
const [filterName, setFilterName] = useState("");
3636
const [report, setreport]: any = useState([]);
37+
3738
React.useEffect(() => {
3839
fetchJsonData(modelOfInterestData, setreport);
3940
}, []);
@@ -45,6 +46,7 @@ export default function ModelDisplay({ selectedFilter }: any) {
4546
getModelLIST
4647
);
4748
}
49+
4850
if (
4951
selectedFilter?.RiskAnalysis &&
5052
!filterCheck[selectedFilter?.RiskAnalysis]
@@ -64,6 +66,7 @@ export default function ModelDisplay({ selectedFilter }: any) {
6466
getComparator("asc", "id"),
6567
filterName
6668
);
69+
6770
return (
6871
<ThreeWayToggleButton
6972
filteredCveReport={ filteredCveReport }

src/pages/ModelOfInterest/index.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,6 +83,7 @@ function ModelOfInterest() {
8383
React.useEffect(() => {
8484
prepPieChartData(setModelType, setRiskAnalysis, setReport);
8585
}, []);
86+
8687
return (
8788
<>
8889
<DefaultNavbar routes={ routes } sticky />

0 commit comments

Comments
 (0)