Skip to content

Commit 6603e96

Browse files
authored
Setup react hooks linting (#3034)
* Set up linting for react hooks * revert formatting * fix linting issues in themes * more linting issues
1 parent feb198e commit 6603e96

File tree

15 files changed

+38
-21
lines changed

15 files changed

+38
-21
lines changed

.eslintrc-typescript

+9-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
{
22
"parser": "@typescript-eslint/parser",
3-
"extends": ["eslint:recommended", "plugin:@typescript-eslint/recommended"],
3+
"extends": [
4+
"eslint:recommended",
5+
"plugin:@typescript-eslint/recommended",
6+
"plugin:react/recommended",
7+
"plugin:react-hooks/recommended"
8+
],
49
"rules": {
10+
"react/prop-types": 0,
11+
"react/no-find-dom-node": 0,
12+
"react/display-name": 0,
513
"react/jsx-uses-react": 2,
614
"react/jsx-uses-vars": 2,
715
"react/react-in-jsx-scope": 2,

package-lock.json

+1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
"eslint-plugin-import": "^2.26.0",
3030
"eslint-plugin-jsx-a11y": "^6.6.1",
3131
"eslint-plugin-react": "^7.30.1",
32+
"eslint-plugin-react-hooks": "^4.6.0",
3233
"husky": "^8.0.1",
3334
"jest-environment-jsdom": "^27.5.1",
3435
"lerna": "^5.4.3",

packages/bootstrap-4/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ const ArrayFieldTemplate = (props: ArrayFieldTemplateProps) => {
6969
className="p-0 m-0"
7070
>
7171
{items &&
72-
items.map((itemProps: ArrayFieldTemplateItemType) => (
73-
<ArrayFieldItemTemplate {...itemProps} />
72+
items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType) => (
73+
<ArrayFieldItemTemplate key={key} {...itemProps} />
7474
))}
7575
{canAdd && (
7676
<Container className="">

packages/chakra-ui/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,8 @@ const ArrayFieldTemplate = (props: ArrayFieldTemplateProps) => {
6262
<Grid key={`array-item-list-${idSchema.$id}`}>
6363
<GridItem>
6464
{items.length > 0 &&
65-
items.map((itemProps: ArrayFieldTemplateItemType) => (
66-
<ArrayFieldItemTemplate {...itemProps} />
65+
items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType) => (
66+
<ArrayFieldItemTemplate key={key} {...itemProps} />
6767
))}
6868
</GridItem>
6969
{canAdd && (

packages/core/src/components/fields/NullField.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ function NullField<T = any, F = any>(props: FieldProps<T, F>) {
1212
if (formData === undefined) {
1313
onChange(null as unknown as T);
1414
}
15-
}, []);
15+
}, [formData, onChange]);
1616

1717
return null;
1818
}

packages/core/src/components/templates/ArrayFieldTemplate.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -66,8 +66,8 @@ export default function ArrayFieldTemplate<T = any, F = any>(
6666
)}
6767
<div className="row array-item-list">
6868
{items &&
69-
items.map((itemProps: ArrayFieldTemplateItemType) => (
70-
<ArrayFieldItemTemplate {...itemProps} />
69+
items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType) => (
70+
<ArrayFieldItemTemplate key={key} {...itemProps} />
7171
))}
7272
</div>
7373
{canAdd && (

packages/core/src/components/widgets/AltDateWidget.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -123,14 +123,14 @@ function AltDateWidget<T = any, F = any>({
123123
if (value && value !== toDateString(state, time)) {
124124
setState(parseDateString(value, time));
125125
}
126-
}, [value]);
126+
}, [value, state, time]);
127127

128128
useEffect(() => {
129129
if (readyForChange(state)) {
130130
// Only propagate to parent state if we have a complete date{time}
131131
onChange(toDateString(state, time));
132132
}
133-
}, [state, time]);
133+
}, [state, time, onChange]);
134134

135135
const handleChange = (property: keyof DateObject, value: string) => {
136136
setState({ [property]: value });

packages/core/test/ArrayField_test.js

+1
Original file line numberDiff line numberDiff line change
@@ -1442,6 +1442,7 @@ describe("ArrayField", () => {
14421442
set onload(fn) {
14431443
fn({ target: { result: "data:text/plain;base64,x=" } });
14441444
},
1445+
// eslint-disable-next-line @typescript-eslint/no-empty-function
14451446
readAsDataUrl() {},
14461447
});
14471448

packages/core/test/StringField_test.js

+2
Original file line numberDiff line numberDiff line change
@@ -1868,6 +1868,7 @@ describe("StringField", () => {
18681868
set onload(fn) {
18691869
fn({ target: { result: "data:text/plain;base64,x=" } });
18701870
},
1871+
// eslint-disable-next-line @typescript-eslint/no-empty-function
18711872
readAsDataUrl() {},
18721873
});
18731874

@@ -1899,6 +1900,7 @@ describe("StringField", () => {
18991900
set onload(fn) {
19001901
fn({ target: { result: "data:text/plain;base64,x=" } });
19011902
},
1903+
// eslint-disable-next-line @typescript-eslint/no-empty-function
19021904
readAsDataUrl() {},
19031905
});
19041906

packages/core/test/setup-jsdom.js

+3-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
var { JSDOM } = require("jsdom");
1+
import { JSDOM } from "jsdom";
2+
import html from "html";
23

34
// Setup the jsdom environment
45
// @see https://github.com/facebook/react/issues/5046
@@ -15,5 +16,5 @@ global.atob = require("atob");
1516

1617
// HTML debugging helper
1718
global.d = function d(node) {
18-
console.log(require("html").prettyPrint(node.outerHTML, { indent_size: 2 }));
19+
console.log(html.prettyPrint(node.outerHTML, { indent_size: 2 }));
1920
};

packages/fluent-ui/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@ const ArrayFieldTemplate = (props: ArrayFieldTemplateProps) => {
6363
/>
6464
)}
6565
{items.length > 0 &&
66-
items.map((itemProps: ArrayFieldTemplateItemType) => (
67-
<ArrayFieldItemTemplate {...itemProps} />
66+
items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType) => (
67+
<ArrayFieldItemTemplate key={key} {...itemProps} />
6868
))}
6969
{canAdd && (
7070
<span style={rightJustify}>

packages/fluent-ui/src/CheckboxWidget/CheckboxWidget.tsx

+6-3
Original file line numberDiff line numberDiff line change
@@ -43,9 +43,12 @@ const CheckboxWidget = (props: WidgetProps) => {
4343
options,
4444
} = props;
4545

46-
const _onChange = React.useCallback((_, checked?: boolean): void => {
47-
onChange(checked);
48-
}, []);
46+
const _onChange = React.useCallback(
47+
(_, checked?: boolean): void => {
48+
onChange(checked);
49+
},
50+
[onChange]
51+
);
4952

5053
const _onBlur = ({
5154
target: { value },

packages/material-ui/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ const ArrayFieldTemplate = (props: ArrayFieldTemplateProps) => {
6464
)}
6565
<Grid container={true} key={`array-item-list-${idSchema.$id}`}>
6666
{items &&
67-
items.map((itemProps: ArrayFieldTemplateItemType) => (
68-
<ArrayFieldItemTemplate {...itemProps} />
67+
items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType) => (
68+
<ArrayFieldItemTemplate key={key} {...itemProps} />
6969
))}
7070
{canAdd && (
7171
<Grid container justifyContent="flex-end">

packages/mui/src/ArrayFieldTemplate/ArrayFieldTemplate.tsx

+2-2
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,8 @@ const ArrayFieldTemplate = (props: ArrayFieldTemplateProps) => {
6464
)}
6565
<Grid container={true} key={`array-item-list-${idSchema.$id}`}>
6666
{items &&
67-
items.map((itemProps: ArrayFieldTemplateItemType) => (
68-
<ArrayFieldItemTemplate {...itemProps} />
67+
items.map(({ key, ...itemProps }: ArrayFieldTemplateItemType) => (
68+
<ArrayFieldItemTemplate key={key} {...itemProps} />
6969
))}
7070
{canAdd && (
7171
<Grid container justifyContent="flex-end">

0 commit comments

Comments
 (0)