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:

ParameterTypeDescription
formFormForm 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 #

  1. Form - Create individual forms
  2. Field - Add fields to forms
  3. ABasicApplication - Use FormStack in applications
  4. CoreFormsEnum - Standard form identifiers

See Also #

© 2025 Orchesty Solutions. All rights reserved.