From df31fc77e311c6266401b6ddd1ca190ac1f68b2b Mon Sep 17 00:00:00 2001 From: Timo Pollmeier Date: Fri, 10 Nov 2023 09:13:26 +0100 Subject: [PATCH] Fix: Fix invalid DOM props and other minor JS console errors This fixes various minor errors that do not visibly affect the content visible to users but appear in the JS console. This includes: - internal props are no longer passed to the DOM - invalid prop types are fixed - better handling of models and missing data - tr elements are nested in the correct parent elements - keys in reference lists are made unique - correct functions are defined for gmp mock in tests Fixing these errors makes it easier to spot errors that do have an effect on the visible content. --- src/gmp/model.js | 6 ++ src/gmp/models/cve.js | 10 +- src/gmp/models/vulnerability.js | 13 +++ .../__tests__/__snapshots__/badge.js.snap | 2 - src/web/components/badge/badge.js | 7 +- .../__snapshots__/compliancestatusbar.js.snap | 2 - .../__snapshots__/progressbar.js.snap | 2 - .../__snapshots__/severitybar.js.snap | 2 - .../__tests__/__snapshots__/statusbar.js.snap | 2 - .../__tests__/__snapshots__/titlebar.js.snap | 4 - src/web/components/bar/progressbar.js | 7 +- .../__snapshots__/multistepfooter.js.snap | 2 - .../components/dialog/scrollablecontent.js | 5 +- .../__snapshots__/errormessage.js.snap | 2 - src/web/components/folding/folding.js | 3 +- .../__tests__/__snapshots__/checkbox.js.snap | 1 - .../__tests__/__snapshots__/formgroup.js.snap | 3 - .../__tests__/__snapshots__/radio.js.snap | 2 - .../__snapshots__/selectelement.js.snap | 2 - .../__snapshots__/yesnoradio.js.snap | 3 - .../form/__tests__/selectelement.js | 6 +- src/web/components/form/field.js | 5 +- src/web/components/form/formgroup.js | 9 +- src/web/components/form/loadingbutton.js | 5 +- src/web/components/form/radio.js | 5 +- src/web/components/form/select.js | 3 +- src/web/components/form/selectelements.js | 14 ++- src/web/components/form/textarea.js | 5 +- src/web/components/form/useFormValidation.js | 3 +- src/web/components/icon/svgicon.js | 5 +- src/web/components/icon/withIconSize.js | 99 ++++++++++--------- .../__snapshots__/severityclass.js.snap | 2 - src/web/components/label/severityclass.js | 5 +- .../__snapshots__/horizontalsep.js.snap | 6 -- src/web/components/layout/divider.js | 5 +- src/web/components/layout/horizontalsep.js | 5 +- src/web/components/link/detailslink.js | 6 +- .../__tests__/__snapshots__/usermenu.js.snap | 4 - src/web/components/panel/infopanel.js | 7 +- .../__snapshots__/applyoverridesgroup.js.snap | 6 -- .../__snapshots__/booleanfiltergroup.js.snap | 6 -- .../createnamedfiltergroup.js.snap | 2 - .../__snapshots__/filterstringgroup.js.snap | 3 - .../__snapshots__/firstresultgroup.js.snap | 3 - .../__snapshots__/minqodgroup.js.snap | 4 - .../__snapshots__/resultsperpagegroup.js.snap | 3 - .../__snapshots__/severitylevelsgroup.js.snap | 19 ---- .../__snapshots__/severityvaluesgroup.js.snap | 4 - .../__snapshots__/solutiontypegroup.js.snap | 9 -- .../__snapshots__/sortbygroup.js.snap | 5 - .../__snapshots__/tasktrendgroup.js.snap | 3 - .../__snapshots__/ticketstatusgroup.js.snap | 3 - src/web/components/sortable/emptyrow.js | 5 +- src/web/components/sortable/item.js | 3 +- src/web/components/sortable/row.js | 3 +- src/web/components/tab/tab.js | 7 +- src/web/components/tab/tablist.js | 2 +- src/web/components/table/head.js | 40 ++++---- src/web/components/table/table.js | 3 +- .../__snapshots__/tagsdialog.js.snap | 22 ----- src/web/entities/filterprovider.js | 15 +-- src/web/entities/table.js | 17 ++-- src/web/entity/permissions.js | 12 +-- .../__tests__/__snapshots__/actions.js.snap | 1 - .../__tests__/__snapshots__/details.js.snap | 1 - .../__snapshots__/detailspage.js.snap | 39 +------- .../__tests__/__snapshots__/listpage.js.snap | 31 +----- .../__tests__/__snapshots__/row.js.snap | 6 -- .../__tests__/__snapshots__/table.js.snap | 30 +----- src/web/pages/audits/component.js | 2 +- src/web/pages/certbund/detailspage.js | 2 +- src/web/pages/credentials/component.js | 21 ++-- src/web/pages/credentials/dialog.js | 6 +- src/web/pages/cves/__tests__/listpage.js | 3 +- src/web/pages/cves/__tests__/row.js | 3 +- src/web/pages/cves/__tests__/table.js | 9 +- src/web/pages/cves/row.js | 49 +++++---- src/web/pages/cves/table.js | 1 - src/web/pages/hosts/identifiers.js | 23 +++-- .../__tests__/__snapshots__/dialog.js.snap | 18 ---- src/web/pages/login/loginform.js | 2 +- src/web/pages/nvts/__tests__/listpage.js | 12 +-- .../startendtimeselection.js.snap | 14 --- src/web/pages/performance/performancepage.js | 5 +- .../__tests__/__snapshots__/details.js.snap | 1 - .../__snapshots__/detailspage.js.snap | 17 +--- .../__tests__/__snapshots__/dialog.js.snap | 7 -- .../__tests__/__snapshots__/listpage.js.snap | 23 +---- .../__tests__/__snapshots__/row.js.snap | 1 - .../__tests__/__snapshots__/table.js.snap | 13 +-- .../__tests__/__snapshots__/dialog.js.snap | 11 --- src/web/pages/reports/deltadetailspage.js | 95 +++++++++--------- src/web/pages/reports/details/summary.js | 5 +- src/web/pages/reports/row.js | 2 +- src/web/pages/results/__tests__/row.js | 16 ++- src/web/pages/results/details.js | 14 ++- src/web/pages/results/detailspage.js | 2 +- .../__tests__/__snapshots__/details.js.snap | 1 - .../__snapshots__/detailspage.js.snap | 19 +--- .../editconfigfamilydialog.js.snap | 10 +- .../__snapshots__/editdialog.js.snap | 48 +-------- .../__tests__/__snapshots__/listpage.js.snap | 28 +----- .../__tests__/__snapshots__/row.js.snap | 1 - .../__tests__/__snapshots__/table.js.snap | 17 +--- .../__tests__/__snapshots__/dialog.js.snap | 13 --- src/web/pages/scanners/component.js | 24 ++--- .../__tests__/__snapshots__/actions.js.snap | 1 - .../autodeletereportsgroup.js.snap | 6 -- .../__snapshots__/containerdialog.js.snap | 20 ---- .../__tests__/__snapshots__/details.js.snap | 1 - .../__snapshots__/detailspage.js.snap | 52 +--------- .../__tests__/__snapshots__/listpage.js.snap | 1 - .../tasks/__tests__/__snapshots__/row.js.snap | 6 -- .../__tests__/__snapshots__/status.js.snap | 2 - .../__tests__/__snapshots__/table.js.snap | 34 ++----- .../__snapshots__/createdialog.js.snap | 7 -- .../__snapshots__/editdialog.js.snap | 16 --- src/web/pages/tickets/details.js | 2 +- .../pages/usersettings/usersettingspage.js | 2 +- src/web/utils/proptypes.js | 24 ++--- src/web/utils/render.js | 5 +- src/web/utils/styledConfig.js | 25 +++++ 122 files changed, 456 insertions(+), 872 deletions(-) create mode 100644 src/web/utils/styledConfig.js diff --git a/src/gmp/model.js b/src/gmp/model.js index 36216c849a..7abe0064e3 100644 --- a/src/gmp/model.js +++ b/src/gmp/model.js @@ -73,6 +73,12 @@ class Model { delete copy.end_time; } + if (isDefined(element.timestamp)) { + if (element.timestamp.length > 0) { + copy.timestamp = parseDate(element.timestamp); + } + } + if (isDefined(element.permissions)) { // these are the permissions the current user has on the entity const caps = map(element.permissions.permission, perm => perm.name); diff --git a/src/gmp/models/cve.js b/src/gmp/models/cve.js index bd66d52a92..0ca36203a6 100644 --- a/src/gmp/models/cve.js +++ b/src/gmp/models/cve.js @@ -144,9 +144,13 @@ class Cve extends Info { const products = entry['vulnerable-software-list']; if (isDefined(products)) { - ret.products = isArray(products.product) - ? products.product - : [products.product]; + if (isDefined(products.product)) { + ret.products = isArray(products.product) + ? products.product + : [products.product]; + } else { + ret.products = []; + } } delete ret.raw_data; diff --git a/src/gmp/models/vulnerability.js b/src/gmp/models/vulnerability.js index f40c0e5807..97c752c9e4 100644 --- a/src/gmp/models/vulnerability.js +++ b/src/gmp/models/vulnerability.js @@ -16,9 +16,22 @@ * along with this program. If not, see . */ import Model from 'gmp/model'; +import {isDefined} from 'gmp/utils/identity'; +import {parseDate} from 'gmp/parser'; class Vulnerability extends Model { static entityType = 'vulnerability'; + + static parseElement(element) { + const ret = super.parseElement(element); + + if (isDefined(ret.results)) { + ret.results.newest = parseDate(ret.results.newest); + ret.results.oldest = parseDate(ret.results.newest); + } + + return ret; + } } export default Vulnerability; diff --git a/src/web/components/badge/__tests__/__snapshots__/badge.js.snap b/src/web/components/badge/__tests__/__snapshots__/badge.js.snap index 8fb254d3a5..b6d0eb0054 100644 --- a/src/web/components/badge/__tests__/__snapshots__/badge.js.snap +++ b/src/web/components/badge/__tests__/__snapshots__/badge.js.snap @@ -60,7 +60,6 @@ exports[`Badge tests should render badge 1`] = `
1 diff --git a/src/web/components/badge/badge.js b/src/web/components/badge/badge.js index 7eb19cac02..2fe4579824 100644 --- a/src/web/components/badge/badge.js +++ b/src/web/components/badge/badge.js @@ -24,8 +24,9 @@ import {isDefined, hasValue} from 'gmp/utils/identity'; import PropTypes from 'web/utils/proptypes'; import Theme from 'web/utils/theme'; +import {excludePropsConfig} from 'web/utils/styledConfig'; -const BadgeContainer = styled.div` +const BadgeContainer = styled.div.withConfig(excludePropsConfig('margin'))` position: relative; display: inline-flex; margin-right: ${props => props.margin}px; @@ -33,7 +34,9 @@ const BadgeContainer = styled.div` BadgeContainer.displayName = 'BadgeContainer'; -const BadgeIcon = styled.span` +const BadgeIcon = styled.span.withConfig( + excludePropsConfig(['backgroundColor', 'margin']), +)` display: flex; flex-direction: row; flex-wrap: wrap; diff --git a/src/web/components/bar/__tests__/__snapshots__/compliancestatusbar.js.snap b/src/web/components/bar/__tests__/__snapshots__/compliancestatusbar.js.snap index f3b743fcfe..ef4da61267 100644 --- a/src/web/components/bar/__tests__/__snapshots__/compliancestatusbar.js.snap +++ b/src/web/components/bar/__tests__/__snapshots__/compliancestatusbar.js.snap @@ -48,7 +48,6 @@ exports[`ComplianceStatusBar tests should render 1`] = ` }
{ return progress; }; -const Progress = styled.div` +const Progress = styled.div.withConfig(excludePropsConfig(['progress']))` height: 13px; @media print { diff --git a/src/web/components/dialog/__tests__/__snapshots__/multistepfooter.js.snap b/src/web/components/dialog/__tests__/__snapshots__/multistepfooter.js.snap index 7effb30315..c9346abc01 100644 --- a/src/web/components/dialog/__tests__/__snapshots__/multistepfooter.js.snap +++ b/src/web/components/dialog/__tests__/__snapshots__/multistepfooter.js.snap @@ -182,7 +182,6 @@ exports[`MultiStepFooter tests should render 1`] = ` >