From bf35095e8de58ad1120a8e005c7a6c517a6fe612 Mon Sep 17 00:00:00 2001 From: Elias Meire Date: Fri, 31 Jan 2025 12:07:12 +0100 Subject: [PATCH] Fix condition to show schema preview when in table/json view --- packages/editor-ui/src/api/schemaPreview.ts | 6 ++-- packages/editor-ui/src/components/RunData.vue | 35 +++++++++++-------- .../src/components/VirtualSchema.vue | 2 +- .../src/components/VirtualSchemaHeader.vue | 2 +- .../src/stores/schemaPreview.store.ts | 20 +++++++---- 5 files changed, 38 insertions(+), 27 deletions(-) diff --git a/packages/editor-ui/src/api/schemaPreview.ts b/packages/editor-ui/src/api/schemaPreview.ts index 1b6c9cbee0..9250993929 100644 --- a/packages/editor-ui/src/api/schemaPreview.ts +++ b/packages/editor-ui/src/api/schemaPreview.ts @@ -2,7 +2,7 @@ import { request } from '@/utils/apiUtils'; import type { JSONSchema7 } from 'json-schema'; export type GetSchemaPreviewOptions = { - nodeName: string; + nodeType: string; version: number; resource?: string; operation?: string; @@ -16,9 +16,9 @@ export const getSchemaPreview = async ( baseUrl: string, options: GetSchemaPreviewOptions, ): Promise => { - const { nodeName, version, resource, operation } = options; + const { nodeType, version, resource, operation } = options; const versionString = padVersion(version); - const path = ['schemas', nodeName, versionString, resource, operation].filter(Boolean).join('/'); + const path = ['schemas', nodeType, versionString, resource, operation].filter(Boolean).join('/'); return await request({ method: 'GET', baseURL: baseUrl, diff --git a/packages/editor-ui/src/components/RunData.vue b/packages/editor-ui/src/components/RunData.vue index 498d01e1cf..c5e1b7d4ea 100644 --- a/packages/editor-ui/src/components/RunData.vue +++ b/packages/editor-ui/src/components/RunData.vue @@ -62,7 +62,7 @@ import { useWorkflowsStore } from '@/stores/workflows.store'; import { executionDataToJson } from '@/utils/nodeTypesUtils'; import { getGenericHints } from '@/utils/nodeViewUtils'; import { searchInObject } from '@/utils/objectUtils'; -import { clearJsonKey, isEmpty } from '@/utils/typesUtils'; +import { clearJsonKey, isEmpty, isPresent } from '@/utils/typesUtils'; import { isEqual, isObject } from 'lodash-es'; import { N8nBlockUi, @@ -561,19 +561,24 @@ const isSchemaPreviewEnabled = computed( ); const hasPreviewSchema = asyncComputed(async () => { - if (!node.value || !isSchemaPreviewEnabled.value) return false; - const { - type, - typeVersion, - parameters: { resource, operation }, - } = node.value; - const preview = await schemaPreviewStore.getSchemaPreview({ - nodeName: type, - version: typeVersion, - resource: resource as string, - operation: operation as string, - }); - return preview.ok; + if (!isSchemaPreviewEnabled.value || props.nodes.length === 0) return false; + const nodes = props.nodes + .filter((n) => n.depth === 1) + .map((n) => workflowsStore.getNodeByName(n.name)) + .filter(isPresent); + + for (const connectedNode of nodes) { + const { type, typeVersion, parameters } = connectedNode; + const hasPreview = await schemaPreviewStore.getSchemaPreview({ + nodeType: type, + version: typeVersion, + resource: parameters.resource as string, + operation: parameters.operation as string, + }); + + if (hasPreview.ok) return true; + } + return false; }, false); watch(node, (newNode, prevNode) => { @@ -1622,7 +1627,7 @@ defineExpose({ enterEditMode });
diff --git a/packages/editor-ui/src/components/VirtualSchema.vue b/packages/editor-ui/src/components/VirtualSchema.vue index 8c112bf92b..5aac9e57a8 100644 --- a/packages/editor-ui/src/components/VirtualSchema.vue +++ b/packages/editor-ui/src/components/VirtualSchema.vue @@ -152,7 +152,7 @@ async function getSchemaPreview(node: INodeUi | null) { } = node; return await schemaPreviewStore.getSchemaPreview({ - nodeName: type, + nodeType: type, version: typeVersion, resource: resource as string, operation: operation as string, diff --git a/packages/editor-ui/src/components/VirtualSchemaHeader.vue b/packages/editor-ui/src/components/VirtualSchemaHeader.vue index 875ffaa17d..cdf87f168d 100644 --- a/packages/editor-ui/src/components/VirtualSchemaHeader.vue +++ b/packages/editor-ui/src/components/VirtualSchemaHeader.vue @@ -124,7 +124,7 @@ const emit = defineEmits<{ } .notice { - margin-left: var(--spacing-xl); + margin-left: var(--spacing-2xl); margin-top: var(--spacing-2xs); margin-bottom: 0; } diff --git a/packages/editor-ui/src/stores/schemaPreview.store.ts b/packages/editor-ui/src/stores/schemaPreview.store.ts index be4cbebbae..e1039f271b 100644 --- a/packages/editor-ui/src/stores/schemaPreview.store.ts +++ b/packages/editor-ui/src/stores/schemaPreview.store.ts @@ -7,17 +7,20 @@ import type { JSONSchema7 } from 'json-schema'; export const useSchemaPreviewStore = defineStore('schemaPreview', () => { // Type cast to avoid 'Type instantiation is excessively deep and possibly infinite' - const schemaPreviews = reactive>(new Map()) as Map; + const schemaPreviews = reactive>>(new Map()) as Map< + string, + Result + >; const rootStore = useRootStore(); function getSchemaPreviewKey({ - nodeName, + nodeType, version, operation, resource, }: schemaPreviewApi.GetSchemaPreviewOptions) { - return `${nodeName}_${version}_${resource ?? 'all'}_${operation ?? 'all'}`; + return `${nodeType}_${version}_${resource ?? 'all'}_${operation ?? 'all'}`; } async function getSchemaPreview( @@ -25,14 +28,17 @@ export const useSchemaPreviewStore = defineStore('schemaPreview', () => { ): Promise> { const key = getSchemaPreviewKey(options); const cached = schemaPreviews.get(key); - if (cached) return createResultOk(cached); + if (cached) return cached; try { const preview = await schemaPreviewApi.getSchemaPreview(rootStore.baseUrl, options); - schemaPreviews.set(key, preview); - return createResultOk(preview); + const result = createResultOk(preview); + schemaPreviews.set(key, result); + return result; } catch (error) { - return createResultError(error); + const result = createResultError(error); + schemaPreviews.set(key, result); + return result; } }