From 003a6c35d9f4a8fc2648d5836861b9d3142371ee Mon Sep 17 00:00:00 2001 From: Oliwia Gowor Date: Mon, 7 Apr 2025 07:00:04 +0200 Subject: [PATCH 1/5] fix: stuck in loading --- src/hooks/useGetSchema.js | 9 +++++---- src/shared/ResourceForm/components/ResourceForm.js | 1 + src/shared/components/MonacoEditorESM/Editor.js | 9 +++++---- .../autocompletion/useAutocompleteWorker.js | 6 ++++-- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/hooks/useGetSchema.js b/src/hooks/useGetSchema.js index 93b103cd0f..cd6e5f6f26 100644 --- a/src/hooks/useGetSchema.js +++ b/src/hooks/useGetSchema.js @@ -23,17 +23,18 @@ export const useGetSchema = ({ schemaId, skip, resource }) => { const isWorkerOkay = isWorkerAvailable && !schemasError; const [schema, setSchema] = useState(null); const [error, setError] = useState(null); - const [loading, setLoading] = useState(!isWorkerOkay ? false : !skip); - + const [loading, setLoading] = useState(true); useEffect(() => { setSchema(null); setError(null); - setLoading(!isWorkerOkay ? false : !skip); + setLoading(true); // eslint-disable-next-line react-hooks/exhaustive-deps }, [schemaId]); useEffect(() => { - if (!areSchemasComputed || schema || skip || !isWorkerOkay) { + if (!areSchemasComputed) return; + if (schema || skip || !isWorkerOkay) { + setLoading(false); return; } sendWorkerMessage('getSchema', schemaId); diff --git a/src/shared/ResourceForm/components/ResourceForm.js b/src/shared/ResourceForm/components/ResourceForm.js index 8a9c767226..dff486e63b 100644 --- a/src/shared/ResourceForm/components/ResourceForm.js +++ b/src/shared/ResourceForm/components/ResourceForm.js @@ -203,6 +203,7 @@ export function ResourceForm({ schemaId={resourceSchemaId} updateValueOnParentChange={true} setEditorError={setEditorError} + schema={schema} /> ); editor = renderEditor diff --git a/src/shared/components/MonacoEditorESM/Editor.js b/src/shared/components/MonacoEditorESM/Editor.js index 573e6a48d2..44241d6b66 100644 --- a/src/shared/components/MonacoEditorESM/Editor.js +++ b/src/shared/components/MonacoEditorESM/Editor.js @@ -1,4 +1,4 @@ -import { useEffect, useRef } from 'react'; +import { useEffect, useRef, useState } from 'react'; import { MessageStrip } from '@ui5/webcomponents-react'; import { Spinner } from 'shared/components/Spinner/Spinner'; @@ -29,7 +29,7 @@ export function Editor({ onFocus, options = {}, // IEditorOptions, check Monaco API for the list of options placeholder = null, - ...rest + schema, }) { const { t } = useTranslation(); const prevValueRef = useRef(value); @@ -45,6 +45,7 @@ export function Editor({ autocompletionDisabled, readOnly, language, + schema, }); // set autocompletion global context to the current editor and initialize an editor instance @@ -90,11 +91,11 @@ export function Editor({ className="resource-form__wrapper" style={{ height, minHeight: height }} > - {loading ? ( + {loading && (
- ) : null} + )}
{placeholder && !!!value && (
{placeholder}
diff --git a/src/shared/components/MonacoEditorESM/autocompletion/useAutocompleteWorker.js b/src/shared/components/MonacoEditorESM/autocompletion/useAutocompleteWorker.js index ff2d43b56f..4925ea337a 100644 --- a/src/shared/components/MonacoEditorESM/autocompletion/useAutocompleteWorker.js +++ b/src/shared/components/MonacoEditorESM/autocompletion/useAutocompleteWorker.js @@ -32,6 +32,7 @@ export function useAutocompleteWorker({ autocompletionDisabled, readOnly, language, + schema: predefinedSchema, }) { const [schemaId] = useState(predefinedSchemaId || Math.random().toString()); @@ -42,11 +43,12 @@ export function useAutocompleteWorker({ autocompletionDisabled = true; } - const { schema, loading, error } = useGetSchema({ + const { fetchedSchema, loading, error } = useGetSchema({ schemaId, - skip: autocompletionDisabled, + skip: autocompletionDisabled | !!predefinedSchema, }); + const schema = predefinedSchema || fetchedSchema; /** * Call this before initializing Monaco. This function alters Monaco global config to set up JSON-based * autocompletion. From 1b122e0f4164bf4ef4512e3f20ccba2e2aca01f4 Mon Sep 17 00:00:00 2001 From: Oliwia Gowor Date: Mon, 7 Apr 2025 07:12:49 +0200 Subject: [PATCH 2/5] fix: cleanup --- src/shared/components/MonacoEditorESM/Editor.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/shared/components/MonacoEditorESM/Editor.js b/src/shared/components/MonacoEditorESM/Editor.js index 44241d6b66..6afeb3912e 100644 --- a/src/shared/components/MonacoEditorESM/Editor.js +++ b/src/shared/components/MonacoEditorESM/Editor.js @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from 'react'; +import { useEffect, useRef } from 'react'; import { MessageStrip } from '@ui5/webcomponents-react'; import { Spinner } from 'shared/components/Spinner/Spinner'; From cad92d0a5650fd47584beffd8beec34547333cb9 Mon Sep 17 00:00:00 2001 From: Oliwia Gowor Date: Mon, 7 Apr 2025 09:03:50 +0200 Subject: [PATCH 3/5] fix: no schemas --- src/hooks/useGetSchema.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/hooks/useGetSchema.js b/src/hooks/useGetSchema.js index cd6e5f6f26..296dc541ac 100644 --- a/src/hooks/useGetSchema.js +++ b/src/hooks/useGetSchema.js @@ -32,11 +32,11 @@ export const useGetSchema = ({ schemaId, skip, resource }) => { }, [schemaId]); useEffect(() => { - if (!areSchemasComputed) return; if (schema || skip || !isWorkerOkay) { setLoading(false); return; } + if (!areSchemasComputed) return; sendWorkerMessage('getSchema', schemaId); addWorkerListener(`schemaComputed:${schemaId}`, ({ schema }) => { From 7588792254eeef92ae0f80c0a7d0162791414e57 Mon Sep 17 00:00:00 2001 From: Oliwia Gowor Date: Tue, 8 Apr 2025 21:49:34 +0200 Subject: [PATCH 4/5] fix: review adjustments --- src/shared/ResourceForm/fields/Editor.js | 2 ++ .../autocompletion/useAutocompleteWorker.js | 8 +++++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/shared/ResourceForm/fields/Editor.js b/src/shared/ResourceForm/fields/Editor.js index 67cadd0f36..0d562e9852 100644 --- a/src/shared/ResourceForm/fields/Editor.js +++ b/src/shared/ResourceForm/fields/Editor.js @@ -11,6 +11,7 @@ export function Editor({ convert = true, schemaId, setEditorError, + schema, ...props }) { const { t } = useTranslation(); @@ -85,6 +86,7 @@ export function Editor({ error={error} schemaId={schemaId} placeholder={t('clusters.wizard.editor-placeholder')} + schema={schema} /> ); } diff --git a/src/shared/components/MonacoEditorESM/autocompletion/useAutocompleteWorker.js b/src/shared/components/MonacoEditorESM/autocompletion/useAutocompleteWorker.js index 4925ea337a..47ae38fc26 100644 --- a/src/shared/components/MonacoEditorESM/autocompletion/useAutocompleteWorker.js +++ b/src/shared/components/MonacoEditorESM/autocompletion/useAutocompleteWorker.js @@ -34,7 +34,9 @@ export function useAutocompleteWorker({ language, schema: predefinedSchema, }) { - const [schemaId] = useState(predefinedSchemaId || Math.random().toString()); + const [schemaId] = useState( + predefinedSchema ? predefinedSchemaId || Math.random().toString() : null, + ); if (!autocompletionDisabled && !predefinedSchemaId) { console.warn( @@ -43,9 +45,9 @@ export function useAutocompleteWorker({ autocompletionDisabled = true; } - const { fetchedSchema, loading, error } = useGetSchema({ + const { schemas: fetchedSchema, loading, error } = useGetSchema({ schemaId, - skip: autocompletionDisabled | !!predefinedSchema, + skip: autocompletionDisabled || !!predefinedSchema, }); const schema = predefinedSchema || fetchedSchema; From 1beb52542c30bd3e37ffd1dce013d95f90b14c48 Mon Sep 17 00:00:00 2001 From: Oliwia Gowor Date: Wed, 9 Apr 2025 08:36:11 +0200 Subject: [PATCH 5/5] fix: schemaId --- .../MonacoEditorESM/autocompletion/useAutocompleteWorker.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/shared/components/MonacoEditorESM/autocompletion/useAutocompleteWorker.js b/src/shared/components/MonacoEditorESM/autocompletion/useAutocompleteWorker.js index 47ae38fc26..b9b4524536 100644 --- a/src/shared/components/MonacoEditorESM/autocompletion/useAutocompleteWorker.js +++ b/src/shared/components/MonacoEditorESM/autocompletion/useAutocompleteWorker.js @@ -34,9 +34,7 @@ export function useAutocompleteWorker({ language, schema: predefinedSchema, }) { - const [schemaId] = useState( - predefinedSchema ? predefinedSchemaId || Math.random().toString() : null, - ); + const [schemaId] = useState(predefinedSchemaId || Math.random().toString()); if (!autocompletionDisabled && !predefinedSchemaId) { console.warn(