Skip to content

Commit d269b9c

Browse files
authored
fix: Fix more problematic react immutability (kyma-project#4479)
* fix all * try to fix ColumnInput
1 parent dd12640 commit d269b9c

File tree

4 files changed

+21
-14
lines changed

4 files changed

+21
-14
lines changed

eslint.config.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ export default defineConfig(
2929
'react/react-in-jsx-scope': 'off',
3030
'react/prop-types': 'off',
3131
'react-hooks/refs': 'warn',
32-
'react-hooks/immutability': 'warn',
3332

3433
// TypeScript
3534
'@typescript-eslint/no-explicit-any': 'off',

src/components/BusolaExtensions/ColumnsInput.tsx

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export function ColumnsInput({
3030
);
3131
}
3232

33-
return columns.map((value) => {
33+
return columns.map((value, index) => {
3434
return (
3535
<div key={value.path} className="columns-input">
3636
<CheckBox
@@ -45,13 +45,14 @@ export function ColumnsInput({
4545
<Input
4646
value={value.name}
4747
onInput={(e) => {
48-
value.name = e.target.value;
49-
setColumns([...columns]);
48+
const columnsCopy = [...columns];
49+
columnsCopy[index].name = e.target.value;
50+
setColumns(columnsCopy);
5051
}}
5152
className="full-width"
5253
required
5354
placeholder={t('extensibility.starter-modal.headers.field-name')}
54-
disabled={!value.isSelected ? true : false}
55+
disabled={!value.isSelected}
5556
accessibleName={t('common.labels.name')}
5657
/>
5758
<Input

src/resources/ServiceAccounts/ServiceAccountCreate.jsx

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,13 +53,18 @@ export default function ServiceAccountCreate({
5353
useEffect(() => {
5454
if (layoutState?.showEdit?.resource) return;
5555

56-
setServiceAccount(
57-
cloneDeep(initialServiceAccount) ||
58-
createServiceAccountTemplate(namespace),
59-
);
60-
setInitialResource(
61-
initialServiceAccount || createServiceAccountTemplate(namespace),
62-
);
56+
const timeoutID = setTimeout(() => {
57+
setServiceAccount(
58+
cloneDeep(initialServiceAccount) ||
59+
createServiceAccountTemplate(namespace),
60+
);
61+
setInitialResource(
62+
initialServiceAccount || createServiceAccountTemplate(namespace),
63+
);
64+
}, 0);
65+
return () => {
66+
clearTimeout(timeoutID);
67+
};
6368
}, [initialServiceAccount, namespace, layoutState?.showEdit?.resource]);
6469

6570
const isEdit = useMemo(
@@ -90,9 +95,10 @@ export default function ServiceAccountCreate({
9095
});
9196
jp.value(serviceAccount, '$.imagePullSecrets', newImages);
9297

93-
if (!newImages.length) delete serviceAccount.imagePullSecrets;
98+
const newServiceAccount = { ...serviceAccount };
99+
if (!newImages.length) delete newServiceAccount.imagePullSecrets;
94100

95-
setServiceAccount({ ...serviceAccount });
101+
setServiceAccount(newServiceAccount);
96102
};
97103

98104
async function afterServiceAccountCreate(defaultAfterCreateFn) {

src/shared/ResourceForm/fields/MultiInput.jsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ export function MultiInput({
8686
};
8787

8888
const setEntry = (newVal, index) => {
89+
// eslint-disable-next-line react-hooks/immutability
8990
internalValue[index] = newVal;
9091
setInternalValue([...internalValue]);
9192
};

0 commit comments

Comments
 (0)