From dc737589c722717eaef7cd8848c28a598ecf8514 Mon Sep 17 00:00:00 2001 From: daniele-mng Date: Wed, 11 Dec 2024 09:17:15 +0100 Subject: [PATCH] fix: Scan Config check box not selectable --- allowedSnakeCase.cjs | 1 - .../__tests__/editconfigfamilydialog.jsx | 31 +++ .../scanconfigs/editconfigfamilydialog.jsx | 211 ++++++++---------- 3 files changed, 129 insertions(+), 114 deletions(-) diff --git a/allowedSnakeCase.cjs b/allowedSnakeCase.cjs index 4aad1a062e..416b763eda 100644 --- a/allowedSnakeCase.cjs +++ b/allowedSnakeCase.cjs @@ -464,7 +464,6 @@ module.exports = [ 'port_range_start', 'ports_array', 'port_type', - 'pref_count', 'preference_count', 'privacy_algorithm', 'privacy_password', diff --git a/src/web/pages/scanconfigs/__tests__/editconfigfamilydialog.jsx b/src/web/pages/scanconfigs/__tests__/editconfigfamilydialog.jsx index cc97d0e207..74911e4cb2 100644 --- a/src/web/pages/scanconfigs/__tests__/editconfigfamilydialog.jsx +++ b/src/web/pages/scanconfigs/__tests__/editconfigfamilydialog.jsx @@ -327,4 +327,35 @@ describe('EditConfigFamilyDialog component tests', () => { expect(getOidColumn(rows[1])).toHaveTextContent('1234'); expect(getOidColumn(rows[2])).toHaveTextContent('2345'); }); + + test('should allow selecting an NVT', () => { + const handleClose = testing.fn(); + const handleSave = testing.fn(); + const handleOpenEditNvtDetailsDialog = testing.fn(); + + const {render} = rendererWith({capabilities: true}); + const {getAllByRole} = render( + , + ); + + const checkboxes = getAllByRole('checkbox'); + + expect(checkboxes[0].checked).toBe(false); + + fireEvent.click(checkboxes[0]); + + expect(checkboxes[0].checked).toBe(true); + }); }); diff --git a/src/web/pages/scanconfigs/editconfigfamilydialog.jsx b/src/web/pages/scanconfigs/editconfigfamilydialog.jsx index 4558c7f343..d4f4380234 100644 --- a/src/web/pages/scanconfigs/editconfigfamilydialog.jsx +++ b/src/web/pages/scanconfigs/editconfigfamilydialog.jsx @@ -36,19 +36,22 @@ import TableRow from 'web/components/table/row'; import useTranslation from 'web/hooks/useTranslation'; -const shouldNvtComponentUpdate = (props, nextProps) => { - return props.selected !== nextProps.selected || props.nvt !== nextProps.nvt; +const EDIT_CONFIG_COLUMNS_SORT = { + name: 'name', + oid: 'oid', + severity: 'severity', + timeout: 'timeout', + selected: 'selected', }; const Nvt = React.memo( ({nvt, selected, onSelectedChange, onEditNvtDetailsClick}) => { const [_] = useTranslation(); - let pref_count = nvt.preference_count; - if (pref_count === '0') { - pref_count = ''; - } - const {name, oid, severity, timeout, defaultTimeout} = nvt; + const {name, oid, severity, timeout, defaultTimeout, preference_count} = + nvt; + const prefCount = preference_count === '0' ? '' : preference_count; + return ( {name} @@ -60,18 +63,15 @@ const Nvt = React.memo( {isEmpty(timeout) ? _('default') : timeout} {isEmpty(defaultTimeout) ? '' : ' (' + defaultTimeout + ')'} - {pref_count} - - {/* wrap in span to allow centering */} -
- -
+ {prefCount} + + ); }, - shouldNvtComponentUpdate, + (prevProps, nextProps) => + prevProps.selected === nextProps.selected && + prevProps.nvt === nextProps.nvt, ); Nvt.propTypes = { @@ -94,14 +96,14 @@ Nvt.propTypes = { }; const sortFunctions = { - name: makeCompareString('name'), - oid: makeCompareString('oid'), + name: makeCompareString(EDIT_CONFIG_COLUMNS_SORT.name), + oid: makeCompareString(EDIT_CONFIG_COLUMNS_SORT.oid), severity: makeCompareSeverity(), - timeout: makeCompareString('timeout'), + timeout: makeCompareString(EDIT_CONFIG_COLUMNS_SORT.timeout), }; -const sortNvts = (nvts = [], sortBy, sortReverse, selected = {}) => { - if (sortBy === 'selected') { +const sortNvts = (sortBy, sortReverse, selected = {}, nvts = []) => { + if (sortBy === EDIT_CONFIG_COLUMNS_SORT.selected) { return [...nvts].sort((a, b) => { if (selected[a.oid] && !selected[b.oid]) { return sortReverse ? 1 : -1; @@ -110,15 +112,15 @@ const sortNvts = (nvts = [], sortBy, sortReverse, selected = {}) => { return sortReverse ? -1 : 1; } - let {name: aname = ''} = a; - let {name: bname = ''} = b; - aname = aname.toLowerCase(); - bname = bname.toLowerCase(); + let {name: aName = ''} = a; + let {name: bName = ''} = b; + aName = aName.toLowerCase(); + bName = bName.toLowerCase(); - if (aname > bname) { + if (aName > bName) { return sortReverse ? -1 : 1; } - if (bname > aname) { + if (bName > aName) { return sortReverse ? 1 : -1; } return 0; @@ -149,13 +151,13 @@ const EditScanConfigFamilyDialog = ({ onSave, }) => { const [_] = useTranslation(); - const [sortBy, setSortby] = useState('name'); + const [sortBy, setSortBy] = useState(EDIT_CONFIG_COLUMNS_SORT.name); const [sortReverse, setSortReverse] = useState(false); const [selectedNvts, setSelectedNvts] = useState(selected); const handleSortChange = newSortBy => { setSortReverse(sortBy === newSortBy ? !sortReverse : false); - setSortby(newSortBy); + setSortBy(newSortBy); }; const handleSelectedChange = (value, name) => { @@ -177,7 +179,19 @@ const EditScanConfigFamilyDialog = ({ const sortDir = sortReverse ? SortBy.DESC : SortBy.ASC; - const sortedNvts = sortNvts(nvts, sortBy, sortReverse, selectedNvts); + const sortedNvts = sortNvts(sortBy, sortReverse, selectedNvts, nvts); + + if (isLoadingFamily || !isDefined(selectedNvts)) { + return ; + } + + const tableHeaders = [ + {sortBy: EDIT_CONFIG_COLUMNS_SORT.name, title: _('Name')}, + {sortBy: EDIT_CONFIG_COLUMNS_SORT.oid, title: _('OID')}, + {sortBy: EDIT_CONFIG_COLUMNS_SORT.severity, title: _('Severity')}, + {sortBy: EDIT_CONFIG_COLUMNS_SORT.timeout, title: _('Timeout')}, + {title: _('Prefs')}, + ]; return ( - {() => - isLoadingFamily || !isDefined(selectedNvts) ? ( - - ) : ( - <> -
-
- {configNameLabel}: {configName} -
-
- {_('Family')}: {familyName} -
-
- -
- - - - - - - - {_('Prefs')} - - {_('Actions')} - - - - {sortedNvts.map(nvt => { - const {oid} = nvt; - return ( - - ); - })} - -
-
- - ) - } +
+
+ {configNameLabel}: {configName} +
+
+ {_('Family')}: {familyName} +
+
+ +
+ + + + {tableHeaders.map(({sortBy, title}) => ( + + ))} + + {_('Actions')} + + + + {sortedNvts.map(nvt => { + const {oid} = nvt; + return ( + + ); + })} + +
+
); }; @@ -283,5 +270,3 @@ EditScanConfigFamilyDialog.propTypes = { }; export default EditScanConfigFamilyDialog; - -// vim: set ts=2 sw=2 tw=80: