From 652bf713a2897af2644251988514c99550e03ad5 Mon Sep 17 00:00:00 2001 From: Victor Fernandez de Alba Date: Wed, 9 Oct 2024 13:20:15 +0200 Subject: [PATCH] Added rule for ESlint to detect missing key property in iterators. --- packages/volto/.eslintrc | 40 +++++++++---------- .../components/manage/Contents/Contents.jsx | 2 + .../Controlpanels/DatabaseInformation.jsx | 1 + .../Controlpanels/UpgradeControlPanel.jsx | 1 + .../Users/UserGroupMembershipMatrix.jsx | 26 ++++++------ .../manage/Pluggable/Pluggable.test.js | 6 +-- .../manage/Sidebar/ObjectBrowserNav.jsx | 1 + .../src/components/manage/Toolbar/More.jsx | 4 +- .../components/theme/Icon/Icon.stories.jsx | 1 + .../components/theme/Widgets/ArrayWidget.jsx | 4 +- packages/volto/src/helpers/Html/Html.jsx | 1 + 11 files changed, 47 insertions(+), 40 deletions(-) diff --git a/packages/volto/.eslintrc b/packages/volto/.eslintrc index 3e28cbddef..4e24e2badd 100644 --- a/packages/volto/.eslintrc +++ b/packages/volto/.eslintrc @@ -6,29 +6,30 @@ "browser": true, "node": true, "mocha": true, - "jasmine": true + "jasmine": true, }, "parser": "@babel/eslint-parser", "parserOptions": { "ecmaVersion": 6, "sourceType": "module", "ecmaFeatures": { - "legacyDecorators": true - } + "legacyDecorators": true, + }, }, "rules": { "import/no-unresolved": 1, + "react/jsx-key": [2, { "checkFragmentShorthand": true }], "no-alert": 1, "no-console": 1, "no-debugger": 1, "prettier/prettier": [ "error", - { "trailingComma": "all", "singleQuote": true } + { "trailingComma": "all", "singleQuote": true }, ], "react-hooks/rules-of-hooks": "error", "react-hooks/exhaustive-deps": "warn", "react/react-in-jsx-scope": "off", - "jsx-a11y/label-has-associated-control": "off" + "jsx-a11y/label-has-associated-control": "off", }, "settings": { "import/resolver": { @@ -39,18 +40,18 @@ ["@plone/registry", "../registry/src"], ["@plone/types", "../types"], ["@package", "./src"], - ["@root", "./src"] + ["@root", "./src"], ], - "extensions": [".js", ".jsx", ".ts", ".tsx", ".json"] + "extensions": [".js", ".jsx", ".ts", ".tsx", ".json"], }, "babel-plugin-root-import": { - "rootPathSuffix": "src" - } + "rootPathSuffix": "src", + }, }, "import/core-modules": ["load-volto-addons"], "react": { - "version": "detect" - } + "version": "detect", + }, }, "overrides": [ { @@ -60,17 +61,14 @@ // Re-add it if at some point, we stop relying on it "extends": ["react-app", "prettier", "plugin:jsx-a11y/recommended"], "plugins": ["prettier", "react-hooks", "jsx-a11y"], - "parser": "@typescript-eslint/parser" + "parser": "@typescript-eslint/parser", }, { - "files": [ - "**/*.stories.js", - "**/*.stories.jsx" - ], + "files": ["**/*.stories.js", "**/*.stories.jsx"], "rules": { - "import/no-anonymous-default-export": "off" - } - } + "import/no-anonymous-default-export": "off", + }, + }, ], "globals": { "root": true, @@ -86,6 +84,6 @@ "Cypress": true, "jest": true, "socket": true, - "webpackIsomorphicTools": true - } + "webpackIsomorphicTools": true, + }, } diff --git a/packages/volto/src/components/manage/Contents/Contents.jsx b/packages/volto/src/components/manage/Contents/Contents.jsx index 58431e2dce..20de9fc406 100644 --- a/packages/volto/src/components/manage/Contents/Contents.jsx +++ b/packages/volto/src/components/manage/Contents/Contents.jsx @@ -1397,6 +1397,7 @@ class Contents extends Component { {breach.targets .map((target) => ( ( diff --git a/packages/volto/src/components/manage/Controlpanels/DatabaseInformation.jsx b/packages/volto/src/components/manage/Controlpanels/DatabaseInformation.jsx index 00d0a1e238..c79f9fb0a4 100644 --- a/packages/volto/src/components/manage/Controlpanels/DatabaseInformation.jsx +++ b/packages/volto/src/components/manage/Controlpanels/DatabaseInformation.jsx @@ -150,6 +150,7 @@ const DatabaseInformation = () => { {databaseInformation.cache_detail_length.map((item) => ( + // eslint-disable-next-line react/jsx-key {item.connection} {item.ngsize} diff --git a/packages/volto/src/components/manage/Controlpanels/UpgradeControlPanel.jsx b/packages/volto/src/components/manage/Controlpanels/UpgradeControlPanel.jsx index d616d4fad9..a4d6514319 100644 --- a/packages/volto/src/components/manage/Controlpanels/UpgradeControlPanel.jsx +++ b/packages/volto/src/components/manage/Controlpanels/UpgradeControlPanel.jsx @@ -251,6 +251,7 @@ class UpgradeControlPanel extends Component { {map(upgradeSteps, (upgradeGroup) => [ , diff --git a/packages/volto/src/components/manage/Controlpanels/Users/UserGroupMembershipMatrix.jsx b/packages/volto/src/components/manage/Controlpanels/Users/UserGroupMembershipMatrix.jsx index 371acfd32c..9fa184ce80 100644 --- a/packages/volto/src/components/manage/Controlpanels/Users/UserGroupMembershipMatrix.jsx +++ b/packages/volto/src/components/manage/Controlpanels/Users/UserGroupMembershipMatrix.jsx @@ -188,18 +188,20 @@ const UserGroupMembershipMatrix = ({ many_users, many_groups }) => { {(!many_groups || query_group_filter.length > 1) && filter_options?.map((filter_option) => ( - - { - onSelectOptionHandler(filter_option, checked); - }} - /> - + + + { + onSelectOptionHandler(filter_option, checked); + }} + /> + + ))} ', () => {
    - {pluggables.map((p) => ( - <>{p()} + {pluggables.map((p, index) => ( + {p()} ))}
@@ -92,7 +92,7 @@ describe('', () => {
    {pluggables.map((p) => ( - <>{p()} + {p()} ))}
diff --git a/packages/volto/src/components/manage/Sidebar/ObjectBrowserNav.jsx b/packages/volto/src/components/manage/Sidebar/ObjectBrowserNav.jsx index 3c837d0e5a..bcecef9bda 100644 --- a/packages/volto/src/components/manage/Sidebar/ObjectBrowserNav.jsx +++ b/packages/volto/src/components/manage/Sidebar/ObjectBrowserNav.jsx @@ -51,6 +51,7 @@ const ObjectBrowserNav = ({ currentSearchResults.items.map((item) => view === 'icons' ? (
  • diff --git a/packages/volto/src/components/manage/Toolbar/More.jsx b/packages/volto/src/components/manage/Toolbar/More.jsx index a40a74fe9f..cef48d19cc 100644 --- a/packages/volto/src/components/manage/Toolbar/More.jsx +++ b/packages/volto/src/components/manage/Toolbar/More.jsx @@ -311,8 +311,8 @@ const More = (props) => {
      - {pluggables.map((p) => ( - <>{p()} + {pluggables.map((p, index) => ( + {p()} ))}
    diff --git a/packages/volto/src/components/theme/Icon/Icon.stories.jsx b/packages/volto/src/components/theme/Icon/Icon.stories.jsx index 556247262e..7fde14067b 100644 --- a/packages/volto/src/components/theme/Icon/Icon.stories.jsx +++ b/packages/volto/src/components/theme/Icon/Icon.stories.jsx @@ -43,6 +43,7 @@ const iconElements = Object.keys(icons).map((iconName) => { const icon = icons[iconName]; return (
    value ? ( {value.map((item, key) => ( - <> + {key ? ', ' : ''} {children ? children(item.title || item.token || item) : item.title || item.token || item} - + ))} ) : ( diff --git a/packages/volto/src/helpers/Html/Html.jsx b/packages/volto/src/helpers/Html/Html.jsx index c0b5e5d634..7ecd78135e 100644 --- a/packages/volto/src/helpers/Html/Html.jsx +++ b/packages/volto/src/helpers/Html/Html.jsx @@ -158,6 +158,7 @@ class Html extends Component { }} > {extractor.getStyleElements().map((elem) => ( + // eslint-disable-next-line react/jsx-key