mirror of
https://github.com/windmill-labs/windmill.git
synced 2026-09-07 08:02:40 +00:00
Fix unreactive navbar wizard (#5963)
* fix unreactive AppPicker * migrate StaticInputEditor to svelte 5
This commit is contained in:
+58
-18
@@ -1,4 +1,7 @@
|
||||
<script lang="ts">
|
||||
import { createBubbler, stopPropagation } from 'svelte/legacy'
|
||||
|
||||
const bubble = createBubbler()
|
||||
import type { InputType, StaticInput, StaticOptions } from '../../../inputType'
|
||||
import ArrayStaticInputEditor from '../ArrayStaticInputEditor.svelte'
|
||||
import ResourcePicker from '$lib/components/ResourcePicker.svelte'
|
||||
@@ -26,32 +29,61 @@
|
||||
import S3FilePicker from '$lib/components/S3FilePicker.svelte'
|
||||
import FileUpload from '$lib/components/common/fileUpload/FileUpload.svelte'
|
||||
|
||||
export let componentInput: StaticInput<any> | undefined
|
||||
export let fieldType: InputType | undefined = undefined
|
||||
export let subFieldType: InputType | undefined = undefined
|
||||
export let selectOptions: StaticOptions['selectOptions'] | undefined = undefined
|
||||
export let placeholder: string | undefined = undefined
|
||||
export let format: string | undefined = undefined
|
||||
export let id: string | undefined
|
||||
interface Props {
|
||||
componentInput: StaticInput<any> | undefined
|
||||
fieldType?: InputType | undefined
|
||||
subFieldType?: InputType | undefined
|
||||
selectOptions?: StaticOptions['selectOptions'] | undefined
|
||||
placeholder?: string | undefined
|
||||
format?: string | undefined
|
||||
id: string | undefined
|
||||
}
|
||||
|
||||
let {
|
||||
componentInput = $bindable(),
|
||||
fieldType = undefined,
|
||||
subFieldType = undefined,
|
||||
selectOptions = undefined,
|
||||
placeholder = undefined,
|
||||
format = undefined,
|
||||
id
|
||||
}: Props = $props()
|
||||
|
||||
const appContext = getContext<AppViewerContext>('AppViewerContext')
|
||||
|
||||
$: componentInput && appContext?.onchange?.()
|
||||
let s3FileUploadRawMode = false
|
||||
let s3FilePicker: S3FilePicker | undefined = undefined
|
||||
$effect(() => {
|
||||
componentInput && appContext?.onchange?.()
|
||||
})
|
||||
let s3FileUploadRawMode = $state(false)
|
||||
let s3FilePicker: S3FilePicker | undefined = $state(undefined)
|
||||
</script>
|
||||
|
||||
{#key subFieldType}
|
||||
{#if componentInput?.type === 'static'}
|
||||
{#if fieldType === 'number' || fieldType === 'integer'}
|
||||
<input on:keydown|stopPropagation type="number" bind:value={componentInput.value} />
|
||||
<input
|
||||
onkeydown={stopPropagation(bubble('keydown'))}
|
||||
type="number"
|
||||
bind:value={componentInput.value}
|
||||
/>
|
||||
{:else if fieldType === 'textarea'}
|
||||
<textarea use:autosize on:keydown|stopPropagation bind:value={componentInput.value}
|
||||
<textarea
|
||||
use:autosize
|
||||
onkeydown={stopPropagation(bubble('keydown'))}
|
||||
bind:value={componentInput.value}
|
||||
></textarea>
|
||||
{:else if fieldType === 'date'}
|
||||
<input on:keydown|stopPropagation type="date" bind:value={componentInput.value} />
|
||||
<input
|
||||
onkeydown={stopPropagation(bubble('keydown'))}
|
||||
type="date"
|
||||
bind:value={componentInput.value}
|
||||
/>
|
||||
{:else if fieldType === 'time'}
|
||||
<input on:keydown|stopPropagation type="time" bind:value={componentInput.value} />
|
||||
<input
|
||||
onkeydown={stopPropagation(bubble('keydown'))}
|
||||
type="time"
|
||||
bind:value={componentInput.value}
|
||||
/>
|
||||
{:else if fieldType === 'datetime'}
|
||||
<DateTimeInput bind:value={componentInput.value} />
|
||||
{:else if fieldType === 'boolean'}
|
||||
@@ -60,7 +92,7 @@
|
||||
{#if subFieldType === 'db-table'}
|
||||
<DBTableSelect bind:componentInput {selectOptions} {id} />
|
||||
{:else}
|
||||
<select on:keydown|stopPropagation bind:value={componentInput.value}>
|
||||
<select onkeydown={stopPropagation(bubble('keydown'))} bind:value={componentInput.value}>
|
||||
{#each selectOptions ?? [] as option}
|
||||
{#if typeof option == 'string'}
|
||||
<option value={option}>
|
||||
@@ -114,7 +146,7 @@
|
||||
{#if componentInput?.value && typeof componentInput?.value == 'object' && 'label' in componentInput?.value && (componentInput.value?.['value'] == undefined || typeof componentInput.value?.['value'] == 'string')}
|
||||
<div class="flex flex-col gap-1 w-full">
|
||||
<input
|
||||
on:keydown|stopPropagation
|
||||
onkeydown={stopPropagation(bubble('keydown'))}
|
||||
placeholder="Label"
|
||||
type="text"
|
||||
bind:value={componentInput.value['label']}
|
||||
@@ -395,13 +427,21 @@
|
||||
</div>
|
||||
</div>
|
||||
{:else if fieldType === 'app-path'}
|
||||
<AppPicker bind:value={componentInput.value} />
|
||||
<AppPicker
|
||||
bind:value={
|
||||
() => componentInput!.value,
|
||||
(v) => {
|
||||
componentInput!.value = v
|
||||
componentInput = $state.snapshot(componentInput)
|
||||
}
|
||||
}
|
||||
/>
|
||||
{:else}
|
||||
<div class="flex gap-1 relative w-full">
|
||||
<textarea
|
||||
rows="1"
|
||||
use:autosize
|
||||
on:keydown|stopPropagation
|
||||
onkeydown={stopPropagation(bubble('keydown'))}
|
||||
placeholder={placeholder ?? 'Static value'}
|
||||
bind:value={componentInput.value}
|
||||
class="!pr-12"
|
||||
|
||||
Reference in New Issue
Block a user