From e1df2f036f89d9ae408c9feb4c7f5bcb542fd8b9 Mon Sep 17 00:00:00 2001 From: Ruben Fiszel Date: Sun, 31 Aug 2025 16:19:04 +0000 Subject: [PATCH] fix(frontend): make resource a separate top-level type in schema editor for clarity --- .../lib/components/EditableSchemaForm.svelte | 26 +- .../lib/components/ObjectTypeNarrowing.svelte | 21 - .../lib/components/ResourceNarrowing.svelte | 22 + .../lib/components/ResourceTypePicker.svelte | 127 +++--- .../components/common/tabs/TabContent.svelte | 24 +- .../schema/EditableSchemaDrawer.svelte | 24 +- .../schema/FlowPropertyEditor.svelte | 406 +++++++++--------- .../components/schema/PropertyEditor.svelte | 68 ++- 8 files changed, 348 insertions(+), 370 deletions(-) delete mode 100644 frontend/src/lib/components/ObjectTypeNarrowing.svelte create mode 100644 frontend/src/lib/components/ResourceNarrowing.svelte diff --git a/frontend/src/lib/components/EditableSchemaForm.svelte b/frontend/src/lib/components/EditableSchemaForm.svelte index 181f4038ce..edaa506dc4 100644 --- a/frontend/src/lib/components/EditableSchemaForm.svelte +++ b/frontend/src/lib/components/EditableSchemaForm.svelte @@ -220,15 +220,12 @@ function computeSelected(property: any) { if (!opened) return '' - return property.type !== 'object' - ? property.type - : property.format === 'resource-s3_object' - ? 'S3' - : property.format?.startsWith('dynselect-') - ? 'dynselect' - : property.oneOf && property.oneOf.length >= 2 - ? 'oneOf' - : 'object' + if (property.type !== 'object') return property.type + if (property.format === 'resource-s3_object') return 'S3' + if (property.format?.startsWith('dynselect-')) return 'dynselect' + if (property.oneOf && property.oneOf.length >= 2) return 'oneOf' + if (property.format?.startsWith('resource-')) return 'resource' + return 'object' } export function openField(key: string) { @@ -359,10 +356,11 @@ ['Number', 'number'], ['Integer', 'integer'], ['Object', 'object'], + ['Resource', 'resource'], ['OneOf', 'oneOf'], ['Array', 'array'], ['Boolean', 'boolean'], - ['S3 Object', 'S3'] + ['S3', 'S3'] ] if (showDynSelectOpt) { typeOptions.push(['DynSelect', 'dynselect']) @@ -680,6 +678,7 @@ bind:selected={ () => computeSelected(schema.properties[opened ?? '']), (v) => { + const isResource = v == 'resource' const isS3 = v == 'S3' const isOneOf = v == 'oneOf' const isDynSelect = v == 'dynselect' @@ -700,13 +699,18 @@ nullable: undefined, required: undefined } - if (isS3) { schema.properties[argName] = { ...emptyProperty, type: 'object', format: 'resource-s3_object' } + } else if (isResource) { + schema.properties[argName] = { + ...emptyProperty, + type: 'object', + format: 'resource-' + } } else if (isDynSelect) { const functionName = argName.replace(/\s+/g, '_') schema.properties[argName] = { diff --git a/frontend/src/lib/components/ObjectTypeNarrowing.svelte b/frontend/src/lib/components/ObjectTypeNarrowing.svelte deleted file mode 100644 index 6c0ed70116..0000000000 --- a/frontend/src/lib/components/ObjectTypeNarrowing.svelte +++ /dev/null @@ -1,21 +0,0 @@ - - - { - resource = e.detail - format = resource != undefined ? `resource-${resource}` : undefined - dispatch('change', format) - }} - value={resource} - nonePickable={true} -/> diff --git a/frontend/src/lib/components/ResourceNarrowing.svelte b/frontend/src/lib/components/ResourceNarrowing.svelte new file mode 100644 index 0000000000..a2443ce7e1 --- /dev/null +++ b/frontend/src/lib/components/ResourceNarrowing.svelte @@ -0,0 +1,22 @@ + + + { + resource = e.detail + format = `resource-${resource ?? ''}` + }} + value={resource} + nonePickable={true} +/> diff --git a/frontend/src/lib/components/ResourceTypePicker.svelte b/frontend/src/lib/components/ResourceTypePicker.svelte index c5c6a0e879..ee8f3f464f 100644 --- a/frontend/src/lib/components/ResourceTypePicker.svelte +++ b/frontend/src/lib/components/ResourceTypePicker.svelte @@ -5,8 +5,6 @@ import { workspaceStore } from '$lib/stores' import IconedResourceType from './IconedResourceType.svelte' import { Button, ClearableInput } from './common' - import Popover from './meltComponents/Popover.svelte' - import { offset, flip, shift } from 'svelte-floating-ui/dom' import Label from './Label.svelte' import Tooltip from './Tooltip.svelte' import Badge from './common/badge/Badge.svelte' @@ -46,84 +44,61 @@ ) -