Skip to content

Commit 36987cc

Browse files
authored
fix: Cluster overview resize problems (kyma-project#4349)
* fix: Cluster overview resize problems * little cleanup * little cleanup
1 parent 2b78362 commit 36987cc

File tree

2 files changed

+57
-27
lines changed

2 files changed

+57
-27
lines changed

src/components/Extensibility/ExtensibilityInjections.jsx

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { useEffect, useState } from 'react';
1+
import { useEffect, useMemo, useState } from 'react';
22
import { ExtensibilityErrBoundary } from 'components/Extensibility/ExtensibilityErrBoundary';
33
import { useGetSchema } from 'hooks/useGetSchema';
44

@@ -43,23 +43,39 @@ export function ExtensibilityInjectionCore({ resMetaData, root }) {
4343
const filter = injection?.target.filter || injection?.filter || null;
4444
const items = data?.items || [];
4545

46+
const stableFilter = useMemo(() => filter, [filter]);
47+
// eslint-disable-next-line react-hooks/exhaustive-deps
48+
const stableItems = useMemo(() => [...items], [items.length]);
49+
const stableRoot = useMemo(() => root, [root]);
50+
4651
useEffect(() => {
47-
if (!resource && !isStatic) {
48-
return;
49-
}
50-
Promise.all(
51-
items.map(async (item) => {
52-
if (filter) {
53-
const [value] = await jsonata(filter, { item, root });
54-
return value ? item : false;
55-
}
56-
return item;
57-
}),
58-
).then((results) => {
59-
setFilteredItems(results.filter(Boolean));
60-
});
52+
if (!resource && !isStatic) return;
53+
54+
let canceled = false;
55+
56+
const run = async () => {
57+
const results = await Promise.all(
58+
stableItems.map(async (item) => {
59+
if (stableFilter) {
60+
const [value] = await jsonata(stableFilter, {
61+
item,
62+
root: stableRoot,
63+
});
64+
return value ? item : false;
65+
}
66+
return item;
67+
}),
68+
);
69+
70+
if (!canceled) setFilteredItems(results.filter(Boolean));
71+
};
72+
73+
run();
74+
return () => {
75+
canceled = true;
76+
};
6177
// eslint-disable-next-line react-hooks/exhaustive-deps
62-
}, [resource, isStatic, filter, JSON.stringify(items)]);
78+
}, [resource, isStatic, stableFilter, stableItems, stableRoot]);
6379

6480
if (loading && !data) {
6581
return null;

src/components/Extensibility/components/Widget.jsx

Lines changed: 25 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -148,33 +148,47 @@ export function Widget({
148148
const [visible, setVisible] = useState(true);
149149
const [visibilityError, setVisibilityError] = useState(null);
150150

151+
const stableStructure = useMemo(
152+
() => structure,
153+
// eslint-disable-next-line react-hooks/exhaustive-deps
154+
[structure?.source, structure?.visibility],
155+
);
156+
const stableIndex = useMemo(() => index, [index]);
157+
const stableValue = useMemo(() => value, [value]);
158+
// eslint-disable-next-line react-hooks/exhaustive-deps
159+
const stableArrayItems = useMemo(() => arrayItems, [arrayItems?.length]);
160+
151161
useEffect(() => {
162+
let canceled = false;
163+
152164
const setStatesFromJsonata = async () => {
153-
const [evaluatedChildValue] = await jsonata(structure.source, {
154-
index: index,
165+
const [evaluatedChildValue] = await jsonata(stableStructure.source, {
166+
index: stableIndex,
155167
});
156168
const [result, error] = await jsonata(
157-
structure.visibility?.toString(),
158-
{
159-
value: evaluatedChildValue,
160-
},
169+
stableStructure.visibility?.toString(),
170+
{ value: evaluatedChildValue },
161171
true,
162172
);
173+
if (canceled) return;
163174
setChildValue(evaluatedChildValue);
164175
setVisible(result);
165176
setVisibilityError(error);
166177
};
178+
167179
setStatesFromJsonata();
180+
return () => {
181+
canceled = true;
182+
};
168183
// eslint-disable-next-line react-hooks/exhaustive-deps
169184
}, [
170-
structure.source,
171-
index,
172-
structure.visibility,
185+
stableStructure,
186+
stableIndex,
187+
stableValue,
188+
stableArrayItems,
173189
originalResource,
174190
singleRootResource,
175191
embedResource,
176-
value,
177-
arrayItems,
178192
]);
179193

180194
if (visibilityError) {

0 commit comments

Comments
 (0)