Appearance
Form Template System Architecture
Overview
The Cavai form template system provides pre-configured form layouts that automatically create complete forms with multiple input fields, validation, and styling. This system eliminates code duplication and provides a consistent user experience.
Architecture Components
1. Template Definitions (defaults.ts)
Location: /src/pages/Chatbots/components/BuilderVisuals/Blocks/data/defaults.ts
Templates are defined as complete block objects containing:
- Main form properties (formProperties)
- All form input sub-blocks (formInputProperties-1, formInputProperties-2, etc.)
- Submit button block (formSubmitButtonProperties)
Available Templates:
- Basic Form: Default template with name, address, phone (Norwegian), email, terms checkbox
- Contact Form: Simple contact form with name, email, message
- Survey Form: Advanced form with dropdown, rating slider, feedback
2. Template Helper (formTemplateHelper.ts)
Location: /src/pages/Chatbots/components/BuilderVisuals/Configuration/helpers/formTemplateHelper.ts
Key Functions:
generateBasicFormTemplate(formBlockName)- Creates basic form blocksgenerateContactFormTemplate(formBlockName)- Creates contact form blocksgenerateSurveyFormTemplate(formBlockName)- Creates survey form blocksremoveExistingFormBlocks()- Cleans up existing form inputsaddTemplateBlocks()- Adds template blocks to store
Template Block Structure:
typescript
{
blockTypeToCreate: 'formInputProperties',
targetBlockPath: formBlockName,
keepSelectedBlockPath: true,
additionalProperties: {
type: 'text',
displayName: 'Text Input #1',
},
settings: {
label: 'Full Name',
placeholder: 'Enter your full name',
required: true,
validation: { required: true, minLength: 2, maxLength: 50 }
}
}3. Automatic Template Application
Default Form Creation: When users add a form block via AddBlockTool, the Basic Form template is automatically applied:
javascript
// AddBlockTool.vue
if (blockTypeToCreate === BLOCKS.FORM) {
this.addFormWithBasicTemplate(object)
}Manual Template Selection: Users can change templates via FormConfiguration.vue dropdown:
- Templates are loaded from
formTemplatesarray - Template application removes existing inputs and adds new ones
- Real-time preview updates
Implementation Benefits
1. Single Source of Truth
- Templates defined once in
defaults.ts - Helper functions convert to block creation format
- No code duplication between template definitions
2. Eliminated Redundancies
Before Optimization:
- Template data in 3 places (defaults.ts, formTemplateHelper.ts, blocks.ts)
- Unused generate methods in blocks.ts
- Inconsistent styling and validation across templates
After Optimization:
- Templates defined only in defaults.ts
- Helper functions reference defaults.ts
- Removed unused generate methods
- Consistent validation and styling
3. User Experience Improvements
- New forms start with practical basic template
- No empty forms requiring manual input addition
- Norwegian phone number defaults for local users
- Required validation on essential fields
Template Specifications
Basic Form Template (Default)
Use Case: General purpose form for collecting user information
Fields:
- Full Name (text, required, 2-50 chars)
- Address (text, required, 5-100 chars)
- Phone Number (tel, required, Norwegian +47, 8 digits max)
- Email Address (email, required)
- Terms Checkbox (checkbox, required)
- Submit Button (blue background, white text)
Contact Form Template
Use Case: Simple contact/inquiry forms
Fields:
- Full Name (text, required, 2-50 chars)
- Email Address (email, required)
- Message (textarea, required, 10-500 chars, 4 rows)
- Submit Button ("Send Message", purple background)
Survey Form Template
Use Case: Feedback and survey collection
Fields:
- How did you hear about us? (dropdown, 5 options)
- Rate your experience (range slider, 1-5 stars)
- Additional Comments (textarea, optional, max 300 chars)
- Submit Button ("Submit Survey", green background)
Usage Guidelines
For Developers
Adding New Templates:
- Define template object in
defaults.ts - Add to
formTemplatesarray - Create generator function in
formTemplateHelper.ts - Add template handling in
FormConfiguration.vue
Template Object Structure:
typescript
const formTemplateExample = {
formProperties: { /* main form config */ },
'formInputProperties-1': { /* first input */ },
'formInputProperties-2': { /* second input */ },
'formSubmitButtonProperties': { /* submit button */ }
}For Users
Creating Forms:
- Add Form block via AddBlockTool - Basic template automatically applied
- Customize individual inputs via configuration panel
- Change template via FormConfiguration dropdown if needed
Template Selection:
- Basic Form: General purpose, Norwegian phone defaults
- Contact Form: Simple name/email/message
- Survey Form: Advanced with dropdown and rating
Technical Implementation
Form Creation Flow
- User clicks "Add Form" in AddBlockTool
addFormWithBasicTemplate()called automatically- Form block created in store
- Basic template blocks added via
addTemplateBlocks() - Form appears with all inputs pre-configured
Template Application Flow
- User selects template in FormConfiguration
removeExistingFormBlocks()cleans current inputs- Template generator creates new block definitions
addTemplateBlocks()adds blocks to store- Form updates with new template structure
Validation Integration
- Per-input validation automatically configured
- HTML5 attributes applied (required, minlength, maxlength, pattern)
- Country-specific phone validation for Norwegian numbers
- Custom error messages for better UX
Future Enhancements
Planned Features
- Template preview thumbnails
- Custom template creation UI
- Template import/export functionality
- Industry-specific template packs
- Multi-language template support
Extension Points
- Add new input types to templates
- Create conditional field logic
- Implement template versioning
- Add template analytics/usage tracking
Migration Notes
From Old System
- Removed unused
generateFormBlocksaction from blocks.ts - Eliminated duplicate template definitions
- Consolidated helper functions
- Updated FormConfiguration to use new architecture
Backward Compatibility
- Existing forms continue to work unchanged
- Legacy template structure still supported
- Gradual migration path for custom implementations