diff --git a/frontend/src/AppBuilder/WidgetManager/widgets/form.js b/frontend/src/AppBuilder/WidgetManager/widgets/form.js index 7ab4bd26a6..2d8eb7f0a8 100644 --- a/frontend/src/AppBuilder/WidgetManager/widgets/form.js +++ b/frontend/src/AppBuilder/WidgetManager/widgets/form.js @@ -362,6 +362,9 @@ export const formConfig = { exposedVariables: { data: {}, isValid: true, + isVisible: true, + isDisabled: false, + isLoading: false, }, actions: [ { @@ -372,6 +375,21 @@ export const formConfig = { handle: 'resetForm', displayName: 'Reset Form', }, + { + handle: 'setVisibility', + displayName: 'Set visibility', + params: [{ handle: 'setVisibility', displayName: 'Set Visibility', defaultValue: '{{true}}', type: 'toggle' }], + }, + { + handle: 'setDisable', + displayName: 'Set Disable', + params: [{ handle: 'setDisable', displayName: 'Set Disable', defaultValue: '{{false}}', type: 'toggle' }], + }, + { + handle: 'setLoading', + displayName: 'Set Loading', + params: [{ handle: 'setLoading', displayName: 'Set Loading', defaultValue: '{{false}}', type: 'toggle' }], + }, ], definition: { others: { diff --git a/frontend/src/AppBuilder/Widgets/Form/Form.jsx b/frontend/src/AppBuilder/Widgets/Form/Form.jsx index b61d40c194..afeb4cf844 100644 --- a/frontend/src/AppBuilder/Widgets/Form/Form.jsx +++ b/frontend/src/AppBuilder/Widgets/Form/Form.jsx @@ -8,6 +8,7 @@ import { onComponentClick, removeFunctionObjects } from '@/_helpers/appUtils'; import { deepClone } from '@/_helpers/utilities/utils.helpers'; import RenderSchema from './RenderSchema'; import useStore from '@/AppBuilder/_stores/store'; +import { useExposeState } from '@/AppBuilder/_hooks/useExposeVariables'; import { shallow } from 'zustand/shallow'; import { CONTAINER_FORM_CANVAS_PADDING, @@ -55,6 +56,13 @@ export const Form = function Form(props) { visibility, disabledState, } = properties; + const { isDisabled, isVisible, isLoading } = useExposeState( + properties.loadingState, + properties.visibility, + properties.disabledState, + setExposedVariables, + setExposedVariable + ); const backgroundColor = ['#fff', '#ffffffff'].includes(styles.backgroundColor) && darkMode ? '#232E3C' : styles.backgroundColor; const computedStyles = { @@ -62,7 +70,7 @@ export const Form = function Form(props) { borderRadius: borderRadius ? parseFloat(borderRadius) : 0, border: `${SUBCONTAINER_CANVAS_BORDER_WIDTH}px solid ${borderColor}`, height, - display: visibility ? 'flex' : 'none', + display: isVisible ? 'flex' : 'none', position: 'relative', boxShadow, flexDirection: 'column', @@ -305,17 +313,24 @@ export const Form = function Form(props) { }} componentType="Form" /> + {isDisabled && ( +