Breadcrumb
- Sabre Red 360 Software Development Kit Help
- Web Red Apps
- Web Modules
- UI Contributions
- Custom Form Component
Custom Form Component
Allows creation of user-defined forms and using them as a React component. The idea behind it is the same as in Custom Forms but instead of showing a modal we expose react component that can be used as a part of Red App UI.
Setup
Same as in case the of Custom Forms first thing that is needed is a declarative definition of the form. It can be either a string in a defined format or a dedicated data object.
const initialCustomFormState: CustomForm = {
title: 'Passenger Data',
fields: [
{
id: 'firstName'
},
{
id: 'lastName'
},
{
id: 'title'
},
{
id: "email",
"validation": {
mandatory: true,
regex: "^\\w+@\\w+(\\.\\w+)+$",
error: "Provide a valid email address"
}
}
]
};
Note
|
com.sabre.redapp.example3.web.custom.forms SDK sample project contains many examples of using the service and shows how to create menus and forms with all available features like field types, field validation, action buttons and layouts. |
The difference between Custom Forms Service and Custom Form as a component is that this schema is now provided to the react component imported from sabre-ngv-custom-forms/components/CustomForm
. Additionally the custom form schema should be used as a state of external
component so values of the form can be accessed.
constructor(props) {
super(props)
this.state = {customFormState: initialCustomFormState, myState: '0', errors: []};
}
<CustomFormComponent customFormSchema={this.state.customFormState} ... />
Communication between custom form and Red App component
Communication between Custom Form Component and Red App component that contains it is facilitated by two methods: onFormChange
and onError
. The first one is obligatory. Both are executed whenever the state of the custom form changes. onFormChange
contains current form model, including current field values. The second one contain list of field validation errors, it consists of pairs field id and error message.
The full declaration of Custom Form Component looks like this
<CustomFormComponent
customFormSchema={this.state.customFormState}
onFormChange={(form: CustomForm) => {
this.setState({customFormState: form})
}}
onErrorsChange={(errors: FieldError[]) => {
this.setState({errors: errors})
}}
/>
Limitations
The current version of the component does not support
-
action elements of custom form schema, communication, and performing actions are based on state, not button event.
-
title filed in schema is not supported in any way.
-
mandatory element validation native for custom form is not supported, it has to be done during onChange method execution.
Note
|
_com.sabre.redapp.example3.web.application.sidepanel SDK sample project contains example usage of the component and shows how to create it and communicate with parent component. |