improve rawvalue handling for lightweightarg input

This commit is contained in:
Ruben Fiszel
2024-08-06 15:34:57 +02:00
parent 4b2aa1310d
commit aec0e12e57
3 changed files with 29 additions and 25 deletions

View File

@@ -96,18 +96,15 @@
$: render && changeDefaultValue(inputCat, defaultValue)
$: rawValue && evalRawValueToValue()
$: (rawValue || inputCat === 'object') && evalRawValueToValue()
$: validateInput(pattern, value, required)
$: {
if (inputCat === 'object') {
evalValueToRaw()
}
}
function evalRawValueToValue() {
if (rawValue) {
if (!rawValue || rawValue === '') {
value = undefined
error = ''
} else {
try {
value = JSON.parse(rawValue)
error = ''
@@ -124,7 +121,7 @@
} else {
// If value is undefined, set rawValue to empty object
// This is to prevent the textarea from being empty
rawValue = '{}'
rawValue = ''
}
}

View File

@@ -27,12 +27,8 @@
export let overrideAllowKindChange: boolean = true
export let originalType: string | undefined = undefined
let kind: 'none' | 'pattern' | 'enum' | 'resource' | 'format' | 'base64' = computeKind(
enum_,
contentEncoding,
pattern,
format
)
let kind: 'none' | 'pattern' | 'enum' | 'resource' | 'format' | 'base64' | 'date-time' =
computeKind(enum_, contentEncoding, pattern, format)
const allowKindChange = overrideAllowKindChange || originalType === 'string'
@@ -55,6 +51,15 @@
// 'jsonpointer',
]
const FIELD_SETTINGS = [
['None', 'none'],
['File', 'base64', 'Encoded as Base 64'],
['Enum', 'enum'],
['Datetime', 'date-time'],
['Format', 'format'],
['Pattern', 'pattern']
]
$: format =
kind == 'resource' ? (resource != undefined ? `resource-${resource}` : 'resource') : format
$: pattern = patternStr == '' ? undefined : patternStr
@@ -111,6 +116,9 @@
if (e.detail != 'enum') {
enum_ = undefined
}
if (e.detail == 'date-time') {
format = 'date-time'
}
if (e.detail == 'none') {
pattern = undefined
format = undefined
@@ -122,7 +130,7 @@
}
}}
>
{#each [['None', 'none'], ['File', 'base64', 'Encoded as Base 64'], ['Enum', 'enum'], ['Format', 'format'], ['Pattern', 'pattern']] as x}
{#each FIELD_SETTINGS as x}
<ToggleButton value={x[1]} label={x[0]} tooltip={x[2]} showTooltipIcon={Boolean(x[2])} />
{/each}
</ToggleButtonGroup>

View File

@@ -495,7 +495,7 @@ export function isObject(obj: any) {
export function debounce(func: (...args: any[]) => any, wait: number) {
let timeout: any
return function(...args: any[]) {
return function (...args: any[]) {
// @ts-ignore
const context = this
clearTimeout(timeout)
@@ -505,7 +505,7 @@ export function debounce(func: (...args: any[]) => any, wait: number) {
export function throttle<T>(func: (...args: any[]) => T, wait: number) {
let timeout: any
return function(...args: any[]) {
return function (...args: any[]) {
if (!timeout) {
timeout = setTimeout(() => {
timeout = null
@@ -721,7 +721,7 @@ export async function tryEvery({
try {
await tryCode()
break
} catch (err) { }
} catch (err) {}
i++
}
if (i >= times) {
@@ -883,7 +883,7 @@ export function computeKind(
contentEncoding: 'base64' | 'binary' | undefined,
pattern: string | undefined,
format: string | undefined
): 'base64' | 'none' | 'pattern' | 'enum' | 'resource' | 'format' {
): 'base64' | 'none' | 'pattern' | 'enum' | 'resource' | 'format' | 'date-time' {
if (enum_ != undefined) {
return 'enum'
}
@@ -893,6 +893,9 @@ export function computeKind(
if (pattern != undefined) {
return 'pattern'
}
if (format == 'date-time') {
return 'date-time'
}
if (format != undefined && format != '') {
if (format?.startsWith('resource')) {
return 'resource'
@@ -950,10 +953,7 @@ export function isDeployable(
return false
}
if (
deployUiSettings.include_type != undefined &&
!deployUiSettings.include_type.includes(type)
) {
if (deployUiSettings.include_type != undefined && !deployUiSettings.include_type.includes(type)) {
return false
}
@@ -972,4 +972,3 @@ export const ALL_DEPLOYABLE: WorkspaceDeployUISettings = {
include_path: [],
include_type: ['script', 'flow', 'app', 'resource', 'variable', 'secret']
}