Browse Source
Merge pull request #2114 from mslourens/clear_form_action
Clear form action
gh-pages
Martin McKeaveney
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with
79 additions and
1 deletions
-
packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/ClearForm.svelte
-
packages/builder/src/components/design/PropertiesPanel/PropertyControls/EventsEditor/actions/index.js
-
packages/client/src/constants.js
-
packages/client/src/utils/buttonActions.js
-
packages/standard-components/manifest.json
-
packages/standard-components/src/forms/InnerForm.svelte
|
|
|
@ -0,0 +1,35 @@ |
|
|
|
<script> |
|
|
|
import { Select, Label } from "@budibase/bbui" |
|
|
|
import { currentAsset, store } from "builderStore" |
|
|
|
import { getActionProviderComponents } from "builderStore/dataBinding" |
|
|
|
|
|
|
|
export let parameters |
|
|
|
|
|
|
|
$: actionProviders = getActionProviderComponents( |
|
|
|
$currentAsset, |
|
|
|
$store.selectedComponentId, |
|
|
|
"ClearForm" |
|
|
|
) |
|
|
|
</script> |
|
|
|
|
|
|
|
<div class="root"> |
|
|
|
<Label small>Form</Label> |
|
|
|
<Select |
|
|
|
bind:value={parameters.componentId} |
|
|
|
options={actionProviders} |
|
|
|
getOptionLabel={x => x._instanceName} |
|
|
|
getOptionValue={x => x._id} |
|
|
|
/> |
|
|
|
</div> |
|
|
|
|
|
|
|
<style> |
|
|
|
.root { |
|
|
|
display: grid; |
|
|
|
column-gap: var(--spacing-l); |
|
|
|
row-gap: var(--spacing-s); |
|
|
|
grid-template-columns: 60px 1fr; |
|
|
|
align-items: center; |
|
|
|
max-width: 800px; |
|
|
|
margin: 0 auto; |
|
|
|
} |
|
|
|
</style> |
|
|
|
@ -5,6 +5,7 @@ import ExecuteQuery from "./ExecuteQuery.svelte" |
|
|
|
import TriggerAutomation from "./TriggerAutomation.svelte" |
|
|
|
import ValidateForm from "./ValidateForm.svelte" |
|
|
|
import LogOut from "./LogOut.svelte" |
|
|
|
import ClearForm from "./ClearForm.svelte" |
|
|
|
|
|
|
|
// Defines which actions are available to configure in the front end.
|
|
|
|
// Unfortunately the "name" property is used as the identifier so please don't
|
|
|
|
@ -42,4 +43,8 @@ export default [ |
|
|
|
name: "Log Out", |
|
|
|
component: LogOut, |
|
|
|
}, |
|
|
|
{ |
|
|
|
name: "Clear Form", |
|
|
|
component: ClearForm, |
|
|
|
}, |
|
|
|
] |
|
|
|
|
|
|
|
@ -6,6 +6,7 @@ export const ActionTypes = { |
|
|
|
ValidateForm: "ValidateForm", |
|
|
|
RefreshDatasource: "RefreshDatasource", |
|
|
|
SetDataProviderQuery: "SetDataProviderQuery", |
|
|
|
ClearForm: "ClearForm", |
|
|
|
} |
|
|
|
|
|
|
|
export const ApiVersion = "1" |
|
|
|
|
|
|
|
@ -86,6 +86,14 @@ const logoutHandler = async () => { |
|
|
|
await authStore.actions.logOut() |
|
|
|
} |
|
|
|
|
|
|
|
const clearFormHandler = async (action, context) => { |
|
|
|
return await executeActionHandler( |
|
|
|
context, |
|
|
|
action.parameters.componentId, |
|
|
|
ActionTypes.ClearForm |
|
|
|
) |
|
|
|
} |
|
|
|
|
|
|
|
const handlerMap = { |
|
|
|
["Save Row"]: saveRowHandler, |
|
|
|
["Delete Row"]: deleteRowHandler, |
|
|
|
@ -95,6 +103,7 @@ const handlerMap = { |
|
|
|
["Validate Form"]: validateFormHandler, |
|
|
|
["Refresh Datasource"]: refreshDatasourceHandler, |
|
|
|
["Log Out"]: logoutHandler, |
|
|
|
["Clear Form"]: clearFormHandler, |
|
|
|
} |
|
|
|
|
|
|
|
const confirmTextMap = { |
|
|
|
|
|
|
|
@ -1647,7 +1647,8 @@ |
|
|
|
"hasChildren": true, |
|
|
|
"illegalChildren": ["section"], |
|
|
|
"actions": [ |
|
|
|
"ValidateForm" |
|
|
|
"ValidateForm", |
|
|
|
"ClearForm" |
|
|
|
], |
|
|
|
"styles": ["size"], |
|
|
|
"settings": [ |
|
|
|
|
|
|
|
@ -64,6 +64,13 @@ |
|
|
|
}) |
|
|
|
return get(formState).valid |
|
|
|
}, |
|
|
|
clear: () => { |
|
|
|
const fields = Object.keys(fieldMap) |
|
|
|
fields.forEach(field => { |
|
|
|
const { fieldApi } = fieldMap[field] |
|
|
|
fieldApi.clearValue() |
|
|
|
}) |
|
|
|
}, |
|
|
|
} |
|
|
|
|
|
|
|
// Provide both form API and state to children |
|
|
|
@ -72,6 +79,7 @@ |
|
|
|
// Action context to pass to children |
|
|
|
const actions = [ |
|
|
|
{ type: ActionTypes.ValidateForm, callback: formApi.validate }, |
|
|
|
{ type: ActionTypes.ClearForm, callback: formApi.clear }, |
|
|
|
] |
|
|
|
|
|
|
|
// Creates an API for a specific field |
|
|
|
@ -108,8 +116,27 @@ |
|
|
|
|
|
|
|
return !newError |
|
|
|
} |
|
|
|
|
|
|
|
const clearValue = () => { |
|
|
|
const { fieldState } = fieldMap[field] |
|
|
|
const newValue = initialValues[field] ?? defaultValue |
|
|
|
fieldState.update(state => { |
|
|
|
state.value = newValue |
|
|
|
state.error = null |
|
|
|
return state |
|
|
|
}) |
|
|
|
|
|
|
|
formState.update(state => { |
|
|
|
state.values = { ...state.values, [field]: newValue } |
|
|
|
delete state.errors[field] |
|
|
|
state.valid = Object.keys(state.errors).length === 0 |
|
|
|
return state |
|
|
|
}) |
|
|
|
} |
|
|
|
|
|
|
|
return { |
|
|
|
setValue, |
|
|
|
clearValue, |
|
|
|
validate: () => { |
|
|
|
const { fieldState } = fieldMap[field] |
|
|
|
setValue(get(fieldState).value, true) |
|
|
|
|