Skip to content

Commit d057aa1

Browse files
authored
fix: ResourceForm is stuck in loading state on extensibility views (#3874)
* fix: loading schemas gets stuck and inf loop * fix: missing dep
1 parent fa3fe52 commit d057aa1

File tree

6 files changed

+31
-15
lines changed

6 files changed

+31
-15
lines changed

src/components/App/resourceSchemas/resourceSchemas.worker.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -113,7 +113,7 @@ self.onmessage = $event => {
113113
);
114114
if (schemaCustomFormatsResolved) {
115115
self.postMessage({
116-
type: `schemaComputed:${$event.data[1]}`,
116+
type: `schemaComputed:${$event.data[1]}${$event.data[2]}`,
117117
schema: schemaCustomFormatsResolved,
118118
});
119119
return;

src/components/Extensibility/ExtensibilityCreate.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ export function ExtensibilityCreateCore({
100100
loading: loadingOpenAPISchema,
101101
} = useGetSchema({
102102
resource: api,
103+
additionalId: 'Create',
103104
});
104105

105106
const formRules = useMemo(() => {

src/components/Extensibility/ExtensibilityDetails.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export const ExtensibilityDetailsCore = ({
3838

3939
const { schema } = useGetSchema({
4040
resource,
41+
additionalId: 'Details',
4142
});
4243

4344
const jsonata = useJsonata({});

src/hooks/useGetSchema.js

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,12 @@ import {
99
import { useRecoilValue } from 'recoil';
1010
import { schemaWorkerStatusState } from 'state/schemaWorkerStatusAtom';
1111

12-
export const useGetSchema = ({ schemaId, skip, resource }) => {
12+
export const useGetSchema = ({
13+
schemaId,
14+
skip,
15+
resource,
16+
additionalId = '',
17+
}) => {
1318
if (!schemaId && resource) {
1419
const { group, version, kind } = resource;
1520
if (!group) schemaId = `${version}/${kind}`;
@@ -37,13 +42,17 @@ export const useGetSchema = ({ schemaId, skip, resource }) => {
3742
return;
3843
}
3944
if (!areSchemasComputed) return;
40-
sendWorkerMessage('getSchema', schemaId);
4145

42-
addWorkerListener(`schemaComputed:${schemaId}`, ({ schema }) => {
43-
setSchema(schema);
44-
setError(null);
45-
setLoading(false);
46-
});
46+
sendWorkerMessage('getSchema', schemaId, additionalId);
47+
48+
addWorkerListener(
49+
`schemaComputed:${schemaId}${additionalId}`,
50+
({ schema }) => {
51+
setSchema(schema);
52+
setError(null);
53+
setLoading(false);
54+
},
55+
);
4756
addWorkerListener('customError', err => {
4857
setError(err);
4958
setLoading(false);
@@ -52,7 +61,15 @@ export const useGetSchema = ({ schemaId, skip, resource }) => {
5261
setError(err);
5362
setLoading(false);
5463
});
55-
}, [areSchemasComputed, schemaId, setSchema, schema, skip, isWorkerOkay]);
64+
}, [
65+
areSchemasComputed,
66+
schemaId,
67+
setSchema,
68+
schema,
69+
skip,
70+
isWorkerOkay,
71+
additionalId,
72+
]);
5673

5774
return { schema, error, loading };
5875
};

src/shared/ResourceForm/components/ResourceForm.js

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,11 +82,8 @@ export function ResourceForm({
8282
} else if (layoutState?.showEdit?.resource) {
8383
setResource(JSON.parse(JSON.stringify(layoutState.showEdit.resource)));
8484
}
85-
}, [
86-
layoutState?.showCreate?.resource,
87-
layoutState?.showEdit?.resource,
88-
setResource,
89-
]);
85+
// eslint-disable-next-line react-hooks/exhaustive-deps
86+
}, [layoutState?.showCreate?.resource, layoutState?.showEdit?.resource]);
9087

9188
// readonly schema ID, set only once
9289
const resourceSchemaId = useMemo(

src/shared/components/MonacoEditorESM/autocompletion/useAutocompleteWorker.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ export function useAutocompleteWorker({
4343
autocompletionDisabled = true;
4444
}
4545

46-
const { schemas: fetchedSchema, loading, error } = useGetSchema({
46+
const { schema: fetchedSchema, loading, error } = useGetSchema({
4747
schemaId,
4848
skip: autocompletionDisabled || !!predefinedSchema,
4949
});

0 commit comments

Comments
 (0)