FormStack
Overview #
FormStack is a container for multiple forms. When building an application, you use FormStack to group related forms together (e.g., authorization form, configuration form, advanced settings form).
Purpose:
- Group multiple forms into a single configuration interface
- Organize related settings
- Return all forms from
getFormStack()method
Location: orchesty-nodejs-sdk/lib/Application/Model/Form/FormStack.ts
When to Use #
Use FormStack in every application's getFormStack() method to:
- Return authorization credentials form
- Add configuration forms
- Group related settings into separate forms
- Organize complex application settings
Methods #
addForm() #
public addForm(form: Form): this
Adds a form to the stack.
Parameters:
| Parameter | Type | Description |
|---|---|---|
form | Form | Form to add |
Returns: this - Fluent interface
getForms() #
public getForms(): Form[]
Returns all forms in the stack.
Returns: Form[] - Array of forms
toArray() #
public toArray(): Record<string, IForm>
Converts the stack to a dictionary of forms keyed by form key.
Returns: Record<string, IForm> - Forms object
Usage Examples #
Basic Usage #
import Form from '../../lib/Application/Model/Form/Form';
import FormStack from '../../lib/Application/Model/Form/FormStack';
import CoreFormsEnum from '../../lib/Application/Base/CoreFormsEnum';
public getFormStack(): FormStack {
// Create authorization form
const authForm = new Form(
CoreFormsEnum.AUTHORIZATION_FORM,
'Authorization'
);
// ... add fields to authForm
// Create form stack and add form
const formStack = new FormStack();
formStack.addForm(authForm);
return formStack;
}
Multiple Forms #
From: orchesty-nodejs-sdk/test/Application/TestBasicApplication.ts
public getFormStack(): FormStack {
// Authorization form
const userField = new Field(FieldType.TEXT, USER, 'Username');
const passwordField = new Field(FieldType.PASSWORD, PASSWORD, 'Password');
const authForm = new Form(CoreFormsEnum.AUTHORIZATION_FORM, 'Authorization');
authForm.addField(userField);
authForm.addField(passwordField);
// Configuration form
const hostField = new Field(FieldType.TEXT, 'host', 'Database Host');
const databaseField = new Field(FieldType.TEXT, 'database', 'Database Name');
const configForm = new Form('configForm', 'Configuration');
configForm.addField(hostField);
configForm.addField(databaseField);
// Add both forms to stack
const formStack = new FormStack();
formStack.addForm(authForm);
formStack.addForm(configForm);
return formStack;
}
Advanced Settings #
public getFormStack(): FormStack {
// 1. Authorization
const apiKeyField = new Field(FieldType.PASSWORD, 'api_key', 'API Key');
const authForm = new Form(CoreFormsEnum.AUTHORIZATION_FORM, 'Authorization');
authForm.addField(apiKeyField);
// 2. Basic Configuration
const endpointField = new Field(FieldType.URL, 'endpoint', 'API Endpoint');
const configForm = new Form('configForm', 'Configuration');
configForm.addField(endpointField);
// 3. Advanced Settings
const timeoutField = new Field(FieldType.NUMBER, 'timeout', 'Timeout (seconds)');
timeoutField.setValue('30');
const retryField = new Field(FieldType.CHECKBOX, 'enable_retry', 'Enable Retry');
const advancedForm = new Form('advancedForm', 'Advanced Settings');
advancedForm.addField(timeoutField);
advancedForm.addField(retryField);
// Add all forms to stack
const formStack = new FormStack();
formStack
.addForm(authForm)
.addForm(configForm)
.addForm(advancedForm);
return formStack;
}
Common Patterns #
Pattern 1: Optional Configuration Forms #
public getFormStack(): FormStack {
const formStack = new FormStack();
// Always include authorization
formStack.addForm(this.getAuthForm());
// Conditionally add other forms
if (this.needsConfiguration()) {
formStack.addForm(this.getConfigForm());
}
if (this.hasAdvancedSettings()) {
formStack.addForm(this.getAdvancedForm());
}
return formStack;
}
Pattern 2: Form Sections #
public getFormStack(): FormStack {
const formStack = new FormStack();
// Section 1: Credentials
formStack.addForm(this.createCredentialsForm());
// Section 2: Connection Settings
formStack.addForm(this.createConnectionForm());
// Section 3: Feature Toggles
formStack.addForm(this.createFeaturesForm());
return formStack;
}
private createCredentialsForm(): Form {
const form = new Form(CoreFormsEnum.AUTHORIZATION_FORM, 'Credentials');
// ... add fields
return form;
}
Next Steps #
- Form - Create individual forms
- Field - Add fields to forms
- ABasicApplication - Use FormStack in applications
- CoreFormsEnum - Standard form identifiers
See Also #
- Form - Form class
- IForm - Form interface
- CoreFormsEnum - Form keys
- Test Example - FormStack usage