diff --git a/frontend/.eslintrc.js b/frontend/.eslintrc.js
index b087037f4..06695aac2 100644
--- a/frontend/.eslintrc.js
+++ b/frontend/.eslintrc.js
@@ -39,6 +39,7 @@ module.exports = {
plugins: [
'filenames',
'react',
+ 'react-hooks',
'simple-import-sort',
'import'
],
@@ -308,7 +309,9 @@ module.exports = {
'react/react-in-jsx-scope': 2,
'react/self-closing-comp': 2,
'react/sort-comp': 2,
- 'react/jsx-wrap-multilines': 2
+ 'react/jsx-wrap-multilines': 2,
+ 'react-hooks/rules-of-hooks': 'error',
+ 'react-hooks/exhaustive-deps': 'error'
},
overrides: [
{
diff --git a/frontend/src/App/ApplyTheme.js b/frontend/src/App/ApplyTheme.js
index 5e02d5a0c..ef177749f 100644
--- a/frontend/src/App/ApplyTheme.js
+++ b/frontend/src/App/ApplyTheme.js
@@ -1,5 +1,5 @@
import PropTypes from 'prop-types';
-import React, { Fragment, useEffect } from 'react';
+import React, { Fragment, useCallback, useEffect } from 'react';
import { connect } from 'react-redux';
import { createSelector } from 'reselect';
import themes from 'Styles/Themes';
@@ -19,7 +19,8 @@ function createMapStateToProps() {
function ApplyTheme({ theme, children }) {
// Update the CSS Variables
- function updateCSSVariables() {
+
+ const updateCSSVariables = useCallback(() => {
const arrayOfVariableKeys = Object.keys(themes[theme]);
const arrayOfVariableValues = Object.values(themes[theme]);
@@ -31,12 +32,12 @@ function ApplyTheme({ theme, children }) {
arrayOfVariableValues[index]
);
});
- }
+ }, [theme]);
// On Component Mount and Component Update
useEffect(() => {
updateCSSVariables(theme);
- }, [theme]);
+ }, [updateCSSVariables, theme]);
return {children};
}
diff --git a/frontend/src/Components/Modal/ConfirmModal.js b/frontend/src/Components/Modal/ConfirmModal.js
index a6eaf6bd7..c129f29b3 100644
--- a/frontend/src/Components/Modal/ConfirmModal.js
+++ b/frontend/src/Components/Modal/ConfirmModal.js
@@ -33,7 +33,7 @@ function ConfirmModal(props) {
return () => unbindShortcut('enter', onConfirm);
}
- }, [isOpen, onConfirm]);
+ }, [bindShortcut, unbindShortcut, isOpen, onConfirm]);
return (
{
bindShortcut('enter', onConfirm);
- }, [onConfirm]);
+ }, [bindShortcut, onConfirm]);
return (