From e668e1c1185db4078c08a100aa9ea1c8fbcb2c41 Mon Sep 17 00:00:00 2001 From: shellyear Date: Sat, 6 Apr 2024 00:15:22 +0200 Subject: [PATCH 1/5] [chore] add eslint rule for js, jsx file to prevent use of 'use strict' in files --- .eslintrc.cjs | 11 +++++++++-- src/components/HelpIcon.jsx | 2 -- src/components/HorizontalInput.jsx | 2 -- src/components/Input.jsx | 2 -- src/components/dashboard/DashboardController.jsx | 2 -- src/components/dashboard/DashboardTile.jsx | 2 -- src/components/institution/InstitutionTable.jsx | 2 -- src/components/institution/InstitutionsController.jsx | 2 -- src/components/login/Login.jsx | 2 -- src/components/login/PasswordReset.jsx | 2 -- src/components/login/PasswordToken.jsx | 2 -- src/components/record/RecordController.jsx | 2 -- src/components/record/RecordForm.jsx | 2 -- src/components/record/RecordProvenance.jsx | 2 -- src/components/record/RequiredAttributes.jsx | 2 -- src/components/user/UserController.jsx | 2 -- src/components/user/UsersController.jsx | 2 -- src/constants/Vocabulary.js | 2 -- src/index.jsx | 2 -- src/stores/I18nStore.js | 2 -- src/utils/DataFilter.js | 2 -- src/utils/EntityFactory.js | 2 -- src/utils/Logger.js | 2 -- src/utils/Routes.jsx | 2 -- src/utils/Routing.js | 2 -- src/utils/RoutingRules.js | 2 -- src/utils/Utils.js | 1 - src/utils/injectIntl.js | 2 -- src/validation/InstitutionValidator.jsx | 2 -- src/validation/RecordValidator.jsx | 1 - src/validation/UserValidator.jsx | 2 -- 31 files changed, 9 insertions(+), 60 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index bf0d81e4..cdc94a6c 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -8,8 +8,15 @@ module.exports = { }, }, plugins: ["react", "react-hooks"], - rules: {}, // add specific rules here - ignorePatterns: ["dist", "tests", ".eslintrc.cjs"], + overrides: [ + { + files: ["*.js", "*.jsx"], // Target all JSX files + rules: { + strict: ["error", "global"], // Apply "use strict" globally within src folder + }, + }, + ], + ignorePatterns: ["dist", "tests", "public", ".eslintrc.cjs"], settings: { react: { version: "detect", diff --git a/src/components/HelpIcon.jsx b/src/components/HelpIcon.jsx index dcc1b08b..f2f2d893 100644 --- a/src/components/HelpIcon.jsx +++ b/src/components/HelpIcon.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React from "react"; import { OverlayTrigger, Tooltip } from "react-bootstrap"; import PropTypes from "prop-types"; diff --git a/src/components/HorizontalInput.jsx b/src/components/HorizontalInput.jsx index 0851e7a5..8a1eb455 100644 --- a/src/components/HorizontalInput.jsx +++ b/src/components/HorizontalInput.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React, { forwardRef } from "react"; import { Col, FormCheck, FormControl, FormGroup, FormLabel, FormText, InputGroup } from "react-bootstrap"; import PropTypes from "prop-types"; diff --git a/src/components/Input.jsx b/src/components/Input.jsx index e35dc642..44d536ca 100644 --- a/src/components/Input.jsx +++ b/src/components/Input.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React, { forwardRef } from "react"; import { FormLabel, FormGroup, FormControl, FormText, FormCheck } from "react-bootstrap"; import PropTypes from "prop-types"; diff --git a/src/components/dashboard/DashboardController.jsx b/src/components/dashboard/DashboardController.jsx index 77b7962a..a4538a0e 100644 --- a/src/components/dashboard/DashboardController.jsx +++ b/src/components/dashboard/DashboardController.jsx @@ -1,5 +1,3 @@ -"use strict"; - import Dashboard from "./Dashboard"; import React from "react"; import { connect } from "react-redux"; diff --git a/src/components/dashboard/DashboardTile.jsx b/src/components/dashboard/DashboardTile.jsx index e1b5548d..be5e75ca 100644 --- a/src/components/dashboard/DashboardTile.jsx +++ b/src/components/dashboard/DashboardTile.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React from "react"; import PropTypes from "prop-types"; diff --git a/src/components/institution/InstitutionTable.jsx b/src/components/institution/InstitutionTable.jsx index 1f4d8ba6..fb655c6a 100644 --- a/src/components/institution/InstitutionTable.jsx +++ b/src/components/institution/InstitutionTable.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React from "react"; import { Table } from "react-bootstrap"; diff --git a/src/components/institution/InstitutionsController.jsx b/src/components/institution/InstitutionsController.jsx index f7fed910..1ab5a433 100644 --- a/src/components/institution/InstitutionsController.jsx +++ b/src/components/institution/InstitutionsController.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React from "react"; import Routes from "../../constants/RoutesConstants"; import { transitionToWithOpts } from "../../utils/Routing"; diff --git a/src/components/login/Login.jsx b/src/components/login/Login.jsx index 5d6e19d6..0506d974 100644 --- a/src/components/login/Login.jsx +++ b/src/components/login/Login.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React, { useEffect, useRef, useState } from "react"; import { Alert, Button, Form, Card } from "react-bootstrap"; import HorizontalInput from "../HorizontalInput"; diff --git a/src/components/login/PasswordReset.jsx b/src/components/login/PasswordReset.jsx index c635ee3a..13a79caa 100644 --- a/src/components/login/PasswordReset.jsx +++ b/src/components/login/PasswordReset.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React from "react"; import { Button, Form, Card } from "react-bootstrap"; import HorizontalInput from "../HorizontalInput"; diff --git a/src/components/login/PasswordToken.jsx b/src/components/login/PasswordToken.jsx index de08efe8..c712365f 100644 --- a/src/components/login/PasswordToken.jsx +++ b/src/components/login/PasswordToken.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React from "react"; import { Alert, Button, Form, Card } from "react-bootstrap"; import HorizontalInput from "../HorizontalInput"; diff --git a/src/components/record/RecordController.jsx b/src/components/record/RecordController.jsx index 48dfa32f..e2210a6e 100644 --- a/src/components/record/RecordController.jsx +++ b/src/components/record/RecordController.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React from "react"; import { injectIntl } from "react-intl"; import withI18n from "../../i18n/withI18n"; diff --git a/src/components/record/RecordForm.jsx b/src/components/record/RecordForm.jsx index b33f6056..01be3121 100644 --- a/src/components/record/RecordForm.jsx +++ b/src/components/record/RecordForm.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React from "react"; import SForms, { Constants } from "@kbss-cvut/s-forms"; import PropTypes from "prop-types"; diff --git a/src/components/record/RecordProvenance.jsx b/src/components/record/RecordProvenance.jsx index 87e79443..217dd36b 100644 --- a/src/components/record/RecordProvenance.jsx +++ b/src/components/record/RecordProvenance.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React from "react"; import { FormattedMessage } from "react-intl"; import { formatDate } from "../../utils/Utils"; diff --git a/src/components/record/RequiredAttributes.jsx b/src/components/record/RequiredAttributes.jsx index 9a44c748..52e2ffe0 100644 --- a/src/components/record/RequiredAttributes.jsx +++ b/src/components/record/RequiredAttributes.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React from "react"; import HelpIcon from "../HelpIcon"; diff --git a/src/components/user/UserController.jsx b/src/components/user/UserController.jsx index 658b98c9..917e9cfa 100644 --- a/src/components/user/UserController.jsx +++ b/src/components/user/UserController.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React from "react"; import { injectIntl } from "react-intl"; import withI18n from "../../i18n/withI18n"; diff --git a/src/components/user/UsersController.jsx b/src/components/user/UsersController.jsx index f8107225..0fc5436e 100644 --- a/src/components/user/UsersController.jsx +++ b/src/components/user/UsersController.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React from "react"; import Routes from "../../constants/RoutesConstants"; import { transitionToWithOpts } from "../../utils/Routing"; diff --git a/src/constants/Vocabulary.js b/src/constants/Vocabulary.js index 170763a5..cf74f8cd 100644 --- a/src/constants/Vocabulary.js +++ b/src/constants/Vocabulary.js @@ -1,5 +1,3 @@ -"use strict"; - /** * Ontological vocabulary used by JSON-LD responses we get. */ diff --git a/src/index.jsx b/src/index.jsx index b7da3a27..eb8fa22a 100644 --- a/src/index.jsx +++ b/src/index.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React from "react"; import { createRoot } from "react-dom/client"; import { Provider } from "react-redux"; diff --git a/src/stores/I18nStore.js b/src/stores/I18nStore.js index ba0aa6d6..a027f7bf 100644 --- a/src/stores/I18nStore.js +++ b/src/stores/I18nStore.js @@ -1,5 +1,3 @@ -"use strict"; - /** * Internationalization store for access from non-react components and objects. */ diff --git a/src/utils/DataFilter.js b/src/utils/DataFilter.js index 6bb29c25..4f654d8d 100644 --- a/src/utils/DataFilter.js +++ b/src/utils/DataFilter.js @@ -1,5 +1,3 @@ -"use strict"; - /** * Filters data according to specified filter(s). * diff --git a/src/utils/EntityFactory.js b/src/utils/EntityFactory.js index 50cb95f7..71d5c994 100644 --- a/src/utils/EntityFactory.js +++ b/src/utils/EntityFactory.js @@ -1,5 +1,3 @@ -"use strict"; - import * as Utils from "./Utils"; import * as RecordState from "../model/RecordState"; import * as Vocabulary from "../constants/Vocabulary"; diff --git a/src/utils/Logger.js b/src/utils/Logger.js index 387f05b6..dcde436c 100644 --- a/src/utils/Logger.js +++ b/src/utils/Logger.js @@ -1,5 +1,3 @@ -"use strict"; - export function log(msg) { console.log(msg); } diff --git a/src/utils/Routes.jsx b/src/utils/Routes.jsx index 79d2cf15..37de20d1 100644 --- a/src/utils/Routes.jsx +++ b/src/utils/Routes.jsx @@ -1,5 +1,3 @@ -"use strict"; - import React from "react"; import { Redirect, Route, Switch } from "react-router-dom"; import PasswordToken from "../components/login/PasswordToken"; diff --git a/src/utils/Routing.js b/src/utils/Routing.js index 3aaf3c9c..c5f06ed0 100644 --- a/src/utils/Routing.js +++ b/src/utils/Routing.js @@ -1,5 +1,3 @@ -"use strict"; - import { execute } from "./RoutingRules"; import { setTransitionPayload } from "../actions/RouterActions"; import { createBrowserHistory } from "history"; diff --git a/src/utils/RoutingRules.js b/src/utils/RoutingRules.js index 35d7d069..29980516 100644 --- a/src/utils/RoutingRules.js +++ b/src/utils/RoutingRules.js @@ -1,5 +1,3 @@ -"use strict"; - let rules = {}; /** diff --git a/src/utils/Utils.js b/src/utils/Utils.js index f8eb9d06..2e15d3f1 100644 --- a/src/utils/Utils.js +++ b/src/utils/Utils.js @@ -1,4 +1,3 @@ -"use strict"; import Bowser from "bowser"; import * as Constants from "../constants/DefaultConstants"; import { Constants as SConstants } from "@kbss-cvut/s-forms"; diff --git a/src/utils/injectIntl.js b/src/utils/injectIntl.js index c6b186d0..54fdb396 100644 --- a/src/utils/injectIntl.js +++ b/src/utils/injectIntl.js @@ -1,5 +1,3 @@ -"use strict"; - import { injectIntl } from "react-intl"; /** diff --git a/src/validation/InstitutionValidator.jsx b/src/validation/InstitutionValidator.jsx index 69000370..f2ea67df 100644 --- a/src/validation/InstitutionValidator.jsx +++ b/src/validation/InstitutionValidator.jsx @@ -1,5 +1,3 @@ -"use strict"; - export default class InstitutionValidator { static isValid(institution) { return !!institution.name; diff --git a/src/validation/RecordValidator.jsx b/src/validation/RecordValidator.jsx index 40a3dd33..867f32e6 100644 --- a/src/validation/RecordValidator.jsx +++ b/src/validation/RecordValidator.jsx @@ -1,4 +1,3 @@ -"use strict"; import * as Constants from "../constants/DefaultConstants"; export default class RecordValidator { diff --git a/src/validation/UserValidator.jsx b/src/validation/UserValidator.jsx index 86148c9c..e26443c2 100644 --- a/src/validation/UserValidator.jsx +++ b/src/validation/UserValidator.jsx @@ -1,5 +1,3 @@ -"use strict"; - export default class UserValidator { static isValid(user) { return user.firstName && user.lastName && user.username && user.emailAddress && user.institution; From 8e5f2fb9d5429f68600cca505a3e7b1835480509 Mon Sep 17 00:00:00 2001 From: shellyear Date: Fri, 19 Apr 2024 19:37:16 +0500 Subject: [PATCH 2/5] [chore] add and apply eslint 'prefer-const' rule --- .eslintrc.cjs | 3 +++ src/actions/index.js | 2 +- src/components/history/HistoryList.jsx | 2 +- src/components/history/HistoryRow.jsx | 2 +- src/components/institution/Institution.jsx | 2 +- src/components/institution/InstitutionMembers.jsx | 2 +- src/components/institution/InstitutionRow.jsx | 2 +- src/components/institution/InstitutionTable.jsx | 2 +- src/components/login/PasswordReset.jsx | 2 +- src/components/login/PasswordToken.jsx | 2 +- src/components/record/RecordRow.jsx | 2 +- src/components/record/RecordTable.jsx | 2 +- src/components/user/PasswordChange.jsx | 2 +- src/components/user/User.jsx | 8 ++++---- src/components/user/UserController.jsx | 4 ++-- src/components/user/UserRow.jsx | 2 +- src/components/user/UserTable.jsx | 2 +- src/utils/DataFilter.js | 4 ++-- src/utils/Routing.js | 4 ++-- src/utils/RoutingRules.js | 2 +- src/utils/Utils.js | 6 +++--- 21 files changed, 31 insertions(+), 28 deletions(-) diff --git a/.eslintrc.cjs b/.eslintrc.cjs index cdc94a6c..54d1345e 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -8,6 +8,9 @@ module.exports = { }, }, plugins: ["react", "react-hooks"], + rules: { + "prefer-const": "warn", // Add prefer-const rule with warning level + }, overrides: [ { files: ["*.js", "*.jsx"], // Target all JSX files diff --git a/src/actions/index.js b/src/actions/index.js index cf8ef2b4..7531f72d 100644 --- a/src/actions/index.js +++ b/src/actions/index.js @@ -6,7 +6,7 @@ import { getOidcToken } from "../utils/SecurityUtils"; import { isUsingOidcAuth } from "../utils/OidcUtils"; // Axios instance for communicating with Backend -export let axiosBackend = axios.create({ +export const axiosBackend = axios.create({ withCredentials: true, }); diff --git a/src/components/history/HistoryList.jsx b/src/components/history/HistoryList.jsx index 8974aa7b..d8bc6ca1 100644 --- a/src/components/history/HistoryList.jsx +++ b/src/components/history/HistoryList.jsx @@ -34,7 +34,7 @@ class HistoryList extends React.Component { }; _handleChange = (e) => { - let change = {}; + const change = {}; change[e.target.name] = e.target.value; this.setState({ searchData: { ...this.state.searchData, ...change }, pageNumber: 1 }); }; diff --git a/src/components/history/HistoryRow.jsx b/src/components/history/HistoryRow.jsx index 001e3489..fa0e5298 100644 --- a/src/components/history/HistoryRow.jsx +++ b/src/components/history/HistoryRow.jsx @@ -4,7 +4,7 @@ import PropTypes from "prop-types"; import { formatDateWithMilliseconds } from "../../utils/Utils"; import { useI18n } from "../../hooks/useI18n"; -let HistoryRow = (props) => { +const HistoryRow = (props) => { const { i18n } = useI18n(); const action = props.action; const username = action.author ? action.author.username : i18n("history.non-logged"); diff --git a/src/components/institution/Institution.jsx b/src/components/institution/Institution.jsx index 5d77e7a5..b5a74744 100644 --- a/src/components/institution/Institution.jsx +++ b/src/components/institution/Institution.jsx @@ -38,7 +38,7 @@ class Institution extends React.Component { } _onChange = (e) => { - let change = {}; + const change = {}; change[e.target.name] = e.target.value; this.props.handlers.onChange(change); }; diff --git a/src/components/institution/InstitutionMembers.jsx b/src/components/institution/InstitutionMembers.jsx index 8700cb77..79947e2b 100644 --- a/src/components/institution/InstitutionMembers.jsx +++ b/src/components/institution/InstitutionMembers.jsx @@ -89,7 +89,7 @@ class InstitutionMembers extends React.Component { _renderRows() { const { institution, onEditUser, currentUser, userDeleted } = this.props; - let rows = []; + const rows = []; const members = this.props.institutionMembers.members; for (let i = 0, len = members.length; i < len; i++) { const deletionLoading = !!( diff --git a/src/components/institution/InstitutionRow.jsx b/src/components/institution/InstitutionRow.jsx index 34cdeec5..4ffb269e 100644 --- a/src/components/institution/InstitutionRow.jsx +++ b/src/components/institution/InstitutionRow.jsx @@ -5,7 +5,7 @@ import { Button } from "react-bootstrap"; import { LoaderSmall } from "../Loader"; import PropTypes from "prop-types"; -let InstitutionRow = (props) => { +const InstitutionRow = (props) => { const institution = props.institution; return ( diff --git a/src/components/institution/InstitutionTable.jsx b/src/components/institution/InstitutionTable.jsx index fb655c6a..57fa975f 100644 --- a/src/components/institution/InstitutionTable.jsx +++ b/src/components/institution/InstitutionTable.jsx @@ -80,7 +80,7 @@ class InstitutionTable extends React.Component { _renderRows() { const { institutions, institutionDeleted } = this.props; const onEdit = this.props.handlers.onEdit; - let rows = []; + const rows = []; for (let i = 0, len = institutions.length; i < len; i++) { rows.push( { - let state = this.state; + const state = this.state; state[e.target.name] = e.target.value; this.setState(state); }; diff --git a/src/components/login/PasswordToken.jsx b/src/components/login/PasswordToken.jsx index c712365f..d6eeeddb 100644 --- a/src/components/login/PasswordToken.jsx +++ b/src/components/login/PasswordToken.jsx @@ -36,7 +36,7 @@ class PasswordReset extends React.Component { } onChange = (e) => { - let state = this.state; + const state = this.state; state[e.target.name] = e.target.value; this.setState(state); }; diff --git a/src/components/record/RecordRow.jsx b/src/components/record/RecordRow.jsx index f3fca0d7..bb865d09 100644 --- a/src/components/record/RecordRow.jsx +++ b/src/components/record/RecordRow.jsx @@ -26,7 +26,7 @@ StatusInfo[RECORD_PHASE.REJECTED] = { tooltip: "records.completion-status-tooltip.rejected", }; -let RecordRow = (props) => { +const RecordRow = (props) => { const { i18n } = useI18n(); const record = props.record, formTemplateOptions = props.formTemplateOptions, diff --git a/src/components/record/RecordTable.jsx b/src/components/record/RecordTable.jsx index ec66a714..c5b5580e 100644 --- a/src/components/record/RecordTable.jsx +++ b/src/components/record/RecordTable.jsx @@ -108,7 +108,7 @@ class RecordTable extends React.Component { const formTemplateOptions = formTemplatesLoaded.formTemplates ? processTypeaheadOptions(formTemplatesLoaded.formTemplates, intl) : []; - let rows = []; + const rows = []; for (let i = 0, len = filteredRecords.length; i < len; i++) { rows.push( { - let change = {}; + const change = {}; change[e.target.name] = e.target.value; this.props.handlers.onChange(change); }; diff --git a/src/components/user/User.jsx b/src/components/user/User.jsx index 65ad08ae..084e9075 100644 --- a/src/components/user/User.jsx +++ b/src/components/user/User.jsx @@ -41,7 +41,7 @@ class User extends React.Component { } _onChange = (e) => { - let change = {}; + const change = {}; change[e.target.name] = e.target.value; this.props.handlers.onChange(change); }; @@ -57,7 +57,7 @@ class User extends React.Component { _onAdminStatusChange = (e) => { const role = e.target.value; - let types = this.props.user.types.slice(); + const types = this.props.user.types.slice(); if (role === ROLE.ADMIN) { types.push(Vocabulary.ADMIN_TYPE); } else { @@ -67,11 +67,11 @@ class User extends React.Component { }; _generateInstitutionsOptions = () => { - let options = []; + const options = []; const institutions = processInstitutions(this.props.institutions); const len = institutions.length; for (let i = 0; i < len; i++) { - let option = institutions[i]; + const option = institutions[i]; options.push(