fix: clear app form on submit option (#7428)

This commit is contained in:
Diego Imbert
2025-12-22 10:40:11 +00:00
committed by GitHub
parent 5f2101a32b
commit 980dfcc366
4 changed files with 47 additions and 2 deletions
@@ -111,6 +111,10 @@
{id}
doOnSuccess={resolvedConfig.onSuccess}
doOnError={resolvedConfig.onError}
clearFormInputs={{
selected: resolvedConfig.clearFormInputs.selected,
onClear: () => runnableComponent?.setArgs({})
}}
{errorHandledByComponent}
{extraQueryParams}
autoRefresh={false}
@@ -123,6 +123,10 @@
{outputs}
doOnSuccess={resolvedConfig.onSuccess}
doOnError={resolvedConfig.onError}
clearFormInputs={{
selected: resolvedConfig.clearFormInputs.selected,
onClear: () => runnableComponent?.setArgs({})
}}
{errorHandledByComponent}
>
{#if noInputs}
@@ -78,6 +78,10 @@
doOnSuccess?: SideEffectAction
doOnSubmit?: SideEffectAction
doOnError?: SideEffectAction
clearFormInputs?: {
selected: 'never' | 'onSuccess' | 'onSubmit' | 'onError'
onClear: () => void
}
render: boolean
recomputeIds?: string[]
outputs: {
@@ -115,6 +119,7 @@
doOnSuccess = undefined,
doOnSubmit = undefined,
doOnError = undefined,
clearFormInputs,
render,
recomputeIds = [],
outputs,
@@ -194,6 +199,10 @@
}
async function handleSubmitSideEffect() {
if (clearFormInputs) {
if (clearFormInputs.selected === 'onSubmit') clearFormInputs.onClear()
}
if (!doOnSubmit) return
if (doOnSubmit.selected == 'none') return
@@ -202,6 +211,10 @@
}
export async function handleSideEffect(success: boolean, errorMessage?: string) {
if (clearFormInputs) {
if (!success && clearFormInputs.selected === 'onError') clearFormInputs.onClear()
if (success && clearFormInputs.selected === 'onSuccess') clearFormInputs.onClear()
}
const sideEffect = success ? doOnSuccess : doOnError
if (recomputeIds && success) {
@@ -214,7 +227,11 @@
await executeSideEffect(sideEffect, success, errorMessage)
}
async function executeSideEffect(sideEffect: SideEffectAction, success: boolean = true, errorMessage?: string) {
async function executeSideEffect(
sideEffect: SideEffectAction,
success: boolean = true,
errorMessage?: string
) {
if (!sideEffect) return
switch (sideEffect.selected) {
@@ -820,6 +820,24 @@ const onErrorClick = {
}
} as const
const clearFormInputs = {
type: 'oneOf',
tooltip: 'When to clear the form inputs',
selected: 'never',
labels: {
never: 'Never',
onSuccess: 'On success',
onSubmit: 'On submit',
onError: 'On error'
},
configuration: {
never: {},
onSuccess: {},
onSubmit: {},
onError: {}
}
} as const
const paginationOneOf = {
type: 'oneOf',
selected: 'auto',
@@ -1728,7 +1746,8 @@ export const components = {
},
onSuccess: onSuccessClick,
onSubmit: onSubmitClick,
onError: onErrorClick
onError: onErrorClick,
clearFormInputs
}
}
},
@@ -1779,6 +1798,7 @@ export const components = {
onSuccess: onSuccessClick,
onSubmit: onSubmitClick,
onError: onErrorClick,
clearFormInputs,
disabled: {
fieldType: 'boolean',
type: 'static',