- {#if schema.properties?.[item.value]}
-
- {`${item.value}${
- schema.properties?.[item.value]?.title
- ? ` (title: ${schema.properties?.[item.value]?.title})`
- : ''
- } `}
-
-
-
-
+ {/each}
+ {/if}
+
+ {/key}
-
- {
- schema = $state.snapshot(schema)
- dispatch('change', schema)
- }}
- bind:this={editableSchemaForm}
- bind:schema
- isAppInput
- on:edit={(e) => {
- addPropertyComponent?.openDrawer(e.detail)
- }}
- on:delete={(e) => {
- addPropertyComponent?.handleDeleteArgument([e.detail])
- }}
- dndType="drawer"
- editTab="inputEditor"
- >
- {#snippet addProperty()}
- {
- schema = $state.snapshot(schema)
- editableSchemaForm?.openField(e.detail)
- }}
- >
- {#snippet trigger()}
-
- {/snippet}
-
- {/snippet}
-
-
+ {#snippet children()}
+ schemaFormDrawer?.closeDrawer()}>
+ {
+ addPropertyComponent?.openDrawer(e.detail)
+ }}
+ on:delete={(e) => {
+ addPropertyComponent?.handleDeleteArgument([e.detail])
+ }}
+ {hiddenArgs}
+ editTab="inputEditor"
+ >
+ {#snippet addProperty()}
+ {
+ editableSchemaForm?.openField(argName)
+ }}
+ >
+ {#snippet trigger()}
+
+ {/snippet}
+
+ {/snippet}
+
+
+ {/snippet}
{:else}
diff --git a/frontend/src/lib/components/schema/EditableSchemaSdkWrapper.svelte b/frontend/src/lib/components/schema/EditableSchemaSdkWrapper.svelte
index 87d141901b..c7f6dcc614 100644
--- a/frontend/src/lib/components/schema/EditableSchemaSdkWrapper.svelte
+++ b/frontend/src/lib/components/schema/EditableSchemaSdkWrapper.svelte
@@ -1,10 +1,28 @@
-
+
diff --git a/frontend/src/lib/components/schema/EditableSchemaWrapper.svelte b/frontend/src/lib/components/schema/EditableSchemaWrapper.svelte
index f9142b9a5b..2f0c231689 100644
--- a/frontend/src/lib/components/schema/EditableSchemaWrapper.svelte
+++ b/frontend/src/lib/components/schema/EditableSchemaWrapper.svelte
@@ -16,7 +16,6 @@
noPreview = false,
fullHeight = true,
formatExtension = $bindable(undefined),
- onSchemaChange,
customUi
}: EditableSchemaWrapperProps = $props()
@@ -51,7 +50,6 @@
}
}
}
- onSchemaChange?.({ schema: $state.snapshot(schema) })
}
let suggestedFileExtensions = $state([
@@ -81,9 +79,8 @@
noPopover={customUi?.noAddPopover}
bind:schema
bind:this={addPropertyComponent}
- on:change={() => onSchemaChange?.({ schema: $state.snapshot(schema) })}
- on:addNew={(e) => {
- editableSchemaForm?.openField(e.detail)
+ onAddNew={(argName) => {
+ editableSchemaForm?.openField(argName)
}}
>
{#snippet trigger()}
@@ -99,11 +96,7 @@
onlyMaskPassword
bind:this={editableSchemaForm}
bind:schema
- on:change={() => onSchemaChange?.({ schema: $state.snapshot(schema) })}
isFlowInput
- on:edit={(e) => {
- addPropertyComponent?.openDrawer(e.detail)
- }}
on:delete={(e) => {
addPropertyComponent?.handleDeleteArgument([e.detail])
}}
@@ -117,7 +110,6 @@
noPopover={customUi?.noAddPopover}
bind:schema
bind:this={addPropertyComponent}
- on:change={() => onSchemaChange?.({ schema })}
>
{#snippet trigger()}
void
}
let {
@@ -72,10 +73,11 @@
properties = $bindable(undefined),
order = $bindable(undefined),
requiredProperty = $bindable(undefined),
- displayWebhookWarning = true
+ displayWebhookWarning = true,
+ onDrawerClose = undefined
}: Props = $props()
- let oneOfSelected: string | undefined = $state(undefined)
+ let oneOfSelected: string | undefined = $state(oneOf?.[0]?.title)
const dispatch = createEventDispatcher()
@@ -259,44 +261,13 @@
{#if oneOfSelected && oneOf}
{@const idx = oneOf.findIndex((obj) => obj.title === oneOfSelected)}
{
- if (oneOf?.[idx]) {
- let properties = Object.fromEntries(
- Object.entries(oneOf[idx].properties ?? {}).filter(
- ([k]) => k !== 'label' && k !== 'kind'
- )
- )
- return {
- ...oneOf[idx],
- properties: properties,
- order: Object.keys(properties),
- required: oneOf[idx].required ?? []
- }
- }
- },
- (v) => {
- if (oneOf?.[idx]) {
- const tagKey = oneOf?.find((o) => Object.keys(o.properties ?? {}).includes('kind'))
- ? 'kind'
- : 'label'
- oneOf[idx] = {
- ...(v ?? {}),
- type: 'object',
- properties: {
- ...(v?.properties ?? {}),
- [tagKey]: {
- type: 'string',
- enum: [v?.title ?? '']
- }
- }
- }
- }
- }
- }
- on:change={() => {
- dispatch('schemaChange')
+ onClose={() => {
+ onDrawerClose?.()
}}
+ bind:schema={oneOf[idx]}
+ hiddenArgs={[
+ oneOf?.find((o) => Object.keys(o.properties ?? {}).includes('kind')) ? 'kind' : 'label'
+ ]}
/>
{/if}
{:else if type === 'object' && format !== 'resource-s3_object' && !isDynSelect}
@@ -359,7 +330,6 @@
properties = v.properties
order = v.order
requiredProperty = v.required
- dispatch('schemaChange')
}
}
/>
@@ -382,7 +352,7 @@
- dispatch('schemaChange')} bind:format />
+
{/snippet}
diff --git a/frontend/src/lib/components/schema/SchemaFormDND.svelte b/frontend/src/lib/components/schema/SchemaFormDND.svelte
index ad199cef06..3c392a9a57 100644
--- a/frontend/src/lib/components/schema/SchemaFormDND.svelte
+++ b/frontend/src/lib/components/schema/SchemaFormDND.svelte
@@ -6,9 +6,8 @@
import type { Schema } from '$lib/common'
import { deepEqual } from 'fast-equals'
import type { SchemaDiff } from '$lib/components/schema/schemaUtils.svelte'
- import type { DynamicSelect } from '$lib/utils'
+ import { generateRandomString, type DynamicSelect } from '$lib/utils'
interface Props {
- dndType?: string | undefined
schema: Schema
args?: Record
prettifyHeader?: boolean
@@ -24,10 +23,11 @@
isValid?: boolean
noVariablePicker?: boolean
helperScript?: DynamicSelect.HelperScript
+ className?: string
+ dndType?: string
}
let {
- dndType = undefined,
schema = $bindable(),
args = $bindable(undefined),
prettifyHeader = false,
@@ -42,7 +42,9 @@
diff = {},
nestedClasses = '',
isValid = $bindable(true),
- noVariablePicker = false
+ noVariablePicker = false,
+ className = '',
+ dndType = generateRandomString()
}: Props = $props()
$effect.pre(() => {
@@ -55,14 +57,16 @@
let items = $state(computeItems())
- let dragDisabled = $state(true)
+ let dragDisabledState = $state(true)
function computeItems() {
return (
- (schema?.order ?? Object.keys(schema?.properties ?? {}) ?? []).map((key) => ({
- id: key,
- value: key
- })) ?? []
+ ($state.snapshot(schema?.order) ?? Object.keys(schema?.properties ?? {}) ?? []).map(
+ (key) => ({
+ id: key,
+ value: key
+ })
+ ) ?? []
)
}
@@ -74,23 +78,20 @@
}
function handleConsider(e) {
- dragDisabled = false
+ dragDisabledState = false
const { items: newItems } = e.detail
- items = newItems
+ items = $state.snapshot(newItems)
}
function handleFinalize(e) {
const { items: newItems } = e.detail
-
- dragDisabled = true
- items = newItems
-
+ dragDisabledState = true
+ items = $state.snapshot(newItems)
const newOrder = items.map((item) => item.value)
- // console.log('handleFinalize', newOrder, e.detail)
dispatch('reorder', newOrder)
}
$effect(() => {
- schema && dragDisabled && untrack(() => updateItems())
+ schema && dragDisabledState && untrack(() => updateItems())
})
@@ -118,6 +119,7 @@
{disablePortal}
{disabled}
{helperScript}
+ {className}
bind:schema
dndConfig={disableDnd
? undefined
@@ -125,7 +127,7 @@
items,
flipDurationMs,
dropTargetStyle: {},
- type: dndType ?? 'top-level'
+ type: dndType
}}
{items}
{diff}
diff --git a/frontend/src/lib/components/schema/editable_schema_wrapper.ts b/frontend/src/lib/components/schema/editable_schema_wrapper.ts
index 3b8e034879..736ca0d528 100644
--- a/frontend/src/lib/components/schema/editable_schema_wrapper.ts
+++ b/frontend/src/lib/components/schema/editable_schema_wrapper.ts
@@ -9,5 +9,4 @@ export type EditableSchemaWrapperProps = {
customUi?: {
noAddPopover?: boolean
}
- onSchemaChange?: ({ schema }: { schema: Schema }) => void
}
diff --git a/frontend/src/lib/components/triggers/AddTriggersButton.svelte b/frontend/src/lib/components/triggers/AddTriggersButton.svelte
index 4eea6fee9f..bf5abfa6d2 100644
--- a/frontend/src/lib/components/triggers/AddTriggersButton.svelte
+++ b/frontend/src/lib/components/triggers/AddTriggersButton.svelte
@@ -5,6 +5,7 @@
import type { Placement } from '@floating-ui/core'
import { isCloudHosted } from '$lib/cloud'
import { CloudOff } from 'lucide-svelte'
+ import type { Item } from '$lib/utils'
interface Props {
setDropdownWidthToButtonWidth?: boolean
diff --git a/frontend/src/routes/test_dev/sdk_schema/+page.svelte b/frontend/src/routes/test_dev/sdk_schema/+page.svelte
index a2e3906fc8..37246ea38f 100644
--- a/frontend/src/routes/test_dev/sdk_schema/+page.svelte
+++ b/frontend/src/routes/test_dev/sdk_schema/+page.svelte
@@ -25,5 +25,12 @@
-
-
+{JSON.stringify(schema)}
+ {
+ console.log('onSchemaChange', newSchema)
+ schema = newSchema
+ }}
+/>