25 KiB
Workflow Page Requirements
This document contains the complete frontend requirements for the workflow management page and its views/components. All UI components are dynamically generated from backend metadata—no hardcoding required.
Table of Contents
- Overview
- Page Structure and Layout
- User Interactions and Functionality
- Backend Routes and API Integration
- Field and Attribute Reference
- Dynamic Rendering Guidelines
Overview
The workflow management page enables users to manage and monitor workflows that are already running or completed. The frontend consists of a single page (/workflows) with different views/states:
- List View - Browse, search, filter, and sort workflows
- Detail View - View complete workflow information, messages, and logs (expandable sections, roll down to see more)
- Edit View - Edit workflow properties (can be shown as popup/modal or inline edit)
All views use backend-driven UI generation, meaning field definitions, labels, validation rules, and UI structure come entirely from backend metadata through the /api/attributes/ChatWorkflow endpoint. Views are managed through component state and UI extensions (expandable sections, popups, modals) within the same page, not as separate routes.
Page Structure and Layout
Workflow Management Page (/workflows)
The workflow management page uses different views/states and UI extensions to handle different user interactions. Views are managed through component state and UI extensions (expandable sections, popups, modals) within the same page component.
List View
State: view === 'list' or selectedWorkflowId === null
What the user sees:
-
Main Content Area:
- Table or card grid displaying all workflows
- Each workflow row/card shows: name, status badge, last activity timestamp, progress indicators
- Clickable rows/cards that expand to show Detail View (expandable section or roll down)
-
Search and Filter Controls:
- General search input box (searches across all text fields)
- Field-specific filter controls (one filter per visible field)
- Active filter indicators (chips/badges showing applied filters)
- "Clear all filters" button when filters are active
-
Sorting Controls:
- Clickable column headers with sort indicators (up/down arrows)
- Visual indication of current sort field and direction
- Support for multi-level sorting
-
Pagination Controls:
- Page information display ("Page X of Y", "Showing 1-20 of 45 workflows")
- Previous/Next page buttons
- Page number buttons
- Page size selector (10, 20, 50, 100 items per page)
Detail View (Expandable Section)
State: view === 'detail' and selectedWorkflowId !== null
UI Pattern: Expandable section that rolls down from the selected workflow row, or inline expansion within the list
What the user sees:
-
Workflow Header Section:
- Workflow name (editable indicator if user has permission)
- Status badge with color coding
- Key metrics (progress indicators, timestamps)
-
Workflow Information Section:
- All workflow properties displayed as formatted fields
- Read-only fields shown as formatted text
- Editable fields shown with edit indicators (if user has permission)
- Special formatting:
- Status → Color-coded badge
- Timestamps → Relative time ("2 hours ago") or absolute date/time
- Progress fields → Progress bars
- Select fields → Display localized labels (not enum values)
-
Messages Section:
- List of all messages in chronological order
- Each message shows: role (user/assistant/system), content, timestamp, attached files
- Message threading support (if
parentMessageIdexists) - Pagination controls if many messages
- Delete button for each message (if user has permission)
-
Logs Section:
- List of execution logs in reverse chronological order (newest first)
- Color-coded by type (info/warning/error)
- Progress indicators if
progressfield exists - Filter controls by log type
- Pagination controls if many logs
-
Action Buttons:
- Edit button (if user has permission and editable fields exist)
- Delete button (if user has permission)
-
Real-Time Updates (when workflow is running):
- Status indicator that updates automatically
- New messages appearing in the messages list
- New logs appearing in the logs viewer
- Progress indicators updating
- Activity indicators showing workflow is active
Workflow Edit Page (/workflows/{workflowId}/edit)
What the user sees:
-
Form Section:
- Dynamic form with editable workflow fields only
- Field labels with required indicators (asterisk for required fields)
- Help text/tooltips from field descriptions
- Input validation errors displayed inline
-
Action Buttons:
- Save button (submits form)
- Cancel button (navigates back to detail page)
-
Confirmation Dialogs:
- Delete confirmation dialog (on workflow detail page)
- Message deletion confirmation dialog
- File deletion confirmation dialog
User Interactions and Functionality
Browsing and Discovery
Search Functionality:
- User types in general search box
- Frontend debounces input (300-500ms delay)
- Search applies across all text fields in workflow objects
- Results update automatically
- Page resets to page 1 when search changes
Field Filtering:
- User selects field to filter by
- Frontend shows appropriate filter UI based on field type:
- Text fields → Text input with operator selection (contains, equals, startsWith, endsWith)
- Select fields → Dropdown with options from backend metadata
- Integer fields → Number input with comparison operators (gt, gte, lt, lte) or range inputs
- Timestamp fields → Date picker with comparison operators or date range picker
- Checkbox fields → Boolean toggle (true/false/any)
- User applies filter → Filter appears as active chip/badge
- User can remove individual filters
- Multiple filters work together (AND logic)
- Page resets to page 1 when filters change
Sorting:
- User clicks column header
- Sort direction toggles (asc → desc → remove)
- Multiple columns can be sorted (multi-level sorting)
- Sort indicators show on column headers
- All filters and search preserved when sorting
Pagination:
- User clicks page number or navigation button
- Page updates and data refetches
- All filters, search, and sort preserved
- User changes page size → Page resets to 1, data refetches
View Switching:
- User clicks workflow row/card → Expands Detail View (expandable section rolls down, or switches to Detail View state)
- User clicks workflow name → Expands Detail View (expandable section rolls down, or switches to Detail View state)
- User clicks collapse/back button → Collapses Detail View, returns to List View
Viewing Workflow Details
Information Display:
- All workflow fields displayed using dynamic rendering
- Read-only fields shown as formatted text
- Editable fields shown with edit indicators
- Special fields formatted appropriately (status badges, timestamps, progress bars)
Messages Display:
- Messages shown in chronological order (
publishedAt) - Role-based styling (user/assistant/system)
- Attached files displayed with download/view options
- Threading support for parent-child message relationships
- Pagination if many messages
Logs Display:
- Logs shown in reverse chronological order (newest first)
- Color-coded by type (info/warning/error)
- Progress indicators displayed if available
- Filtering by log type supported
Real-Time Monitoring (when workflow is running):
- Status polling every 2-5 seconds
- New messages polling every 2-3 seconds (incremental loading)
- New logs polling every 2-3 seconds (incremental loading)
- All polling stops when workflow status changes to "completed", "stopped", or "error"
- Completion message shown when workflow finishes
Editing Workflows
Form Interaction:
- User clicks "Edit" button → Opens Edit View as popup/modal overlay
- Form pre-populated with current workflow values
- User modifies fields
- Client-side validation shows errors immediately
- User clicks Save → Form validates and submits
- User clicks Cancel → Closes popup/modal, returns to Detail View
Form Validation:
- Required field validation (shows error if empty)
- Type validation (e.g., integer fields must be numbers)
- Select field validation (value must be in options array)
- Validation errors displayed inline below fields
Form Submission:
- Only changed fields sent (or all form data)
- Success → Close popup/modal, refresh Detail View data, show success message
- Error handling:
- 403 (permission denied) → Show permission error in popup
- 400 (validation errors) → Display backend validation errors in popup
- Other errors → Show generic error message in popup
Managing Messages
Message Actions:
- User clicks delete button on message
- Confirmation dialog appears
- User confirms → Message deleted, list updates
- User cancels → Dialog closes, no action
File Actions:
- User clicks delete button on file attachment
- Confirmation dialog appears
- User confirms → File removed from message, display updates
- User cancels → Dialog closes, no action
Deleting Workflows
Delete Action:
- User clicks delete button (on detail page or list)
- Confirmation dialog appears with workflow name
- Warning about permanent deletion
- User confirms → Workflow deleted
- User cancels → Dialog closes, no action
Delete Success Handling:
- Success message displayed
- If Detail View is expanded → Collapse Detail View, return to List View
- If in List View → Remove workflow from list or refresh
Backend Routes and API Integration
Complete Route Reference
All backend routes used by workflow pages:
| Route | Method | Purpose | When Used |
|---|---|---|---|
/api/workflows/ |
GET | Get all workflows (with pagination) | Initial page load, pagination changes, sort changes, filter changes, search changes |
/api/workflows/{workflowId} |
GET | Get workflow details | Detail View expansion, Edit View popup open |
/api/workflows/{workflowId} |
PUT | Update workflow | Edit form submission in popup |
/api/workflows/{workflowId} |
DELETE | Delete workflow | User confirms deletion in popup |
/api/workflows/{workflowId}/status |
GET | Get current workflow status | Real-time polling (every 2-5s when running, Detail View expanded) |
/api/workflows/{workflowId}/messages |
GET | Get workflow messages | Detail View expansion, refresh, real-time polling (every 2-3s when running) |
/api/workflows/{workflowId}/messages |
GET | Get new messages (incremental) | Real-time polling with messageId parameter (Detail View expanded) |
/api/workflows/{workflowId}/messages/{messageId} |
DELETE | Delete message | User confirms message deletion in popup |
/api/workflows/{workflowId}/messages/{messageId}/files/{fileId} |
DELETE | Delete file from message | User confirms file deletion in popup |
/api/workflows/{workflowId}/logs |
GET | Get workflow logs | Detail View expansion, refresh, real-time polling (every 2-3s when running) |
/api/workflows/{workflowId}/logs |
GET | Get new logs (incremental) | Real-time polling with logId parameter (Detail View expanded) |
/api/attributes/ChatWorkflow |
GET | Get field definitions | Page load (once per page) - used to generate all UI components |
API Request Patterns
Pagination Request:
GET /api/workflows/?pagination={"page":1,"pageSize":20,"sort":[],"filters":null}
paginationparameter is JSON-encoded string- If user wants all workflows: omit
paginationparameter entirely - Filters structure:
{"search":"query","fieldName":"value",...}
Incremental Loading (Polling):
GET /api/workflows/{workflowId}/messages?messageId={lastMessageId}
GET /api/workflows/{workflowId}/logs?logId={lastLogId}
- Used for real-time updates
- Only fetch new items after the specified ID
- Prevents reloading all data
Update Request:
PUT /api/workflows/{workflowId}
Content-Type: application/json
Body: {fieldName: value, ...}
- Send only changed fields or all form data
- Handle 403 (permission denied) and 400 (validation errors)
Delete Requests:
DELETE /api/workflows/{workflowId}
DELETE /api/workflows/{workflowId}/messages/{messageId}
DELETE /api/workflows/{workflowId}/messages/{messageId}/files/{fileId}
- All delete operations require user confirmation
- Handle 403 (permission denied) and 404 (not found) gracefully
Response Handling
Paginated Response:
{
"items": [...],
"pagination": {
"currentPage": 1,
"pageSize": 20,
"totalItems": 45,
"totalPages": 3,
"sort": [...],
"filters": {...}
}
}
Error Responses:
- 403 Forbidden → Show permission error message
- 404 Not Found → Show "not found" error message
- 400 Bad Request → Display validation errors from response
- 500 Internal Server Error → Show generic error message
Field and Attribute Reference
Complete Field List
The following is a comprehensive list of all parameters, attributes, and fields that will be displayed for workflows. All of these are provided by the backend through the /api/attributes/ChatWorkflow endpoint and should never be hardcoded in the frontend.
Core Workflow Fields
Identification Fields:
id- Unique workflow identifier (text, readonly, not required, visible)mandateId- ID of the mandate this workflow belongs to (text, readonly, not required, visible)
Status and Configuration Fields:
status- Current workflow status (select, editable, not required, visible)- Options: "running", "completed", "stopped", "error"
- Each option has localized labels (en/fr)
name- Workflow name (text, editable, required, visible)workflowMode- Workflow execution mode (select, editable, not required, visible)- Options: "Dynamic", "Automation", "Actionplan"
- Each option has localized labels (en/fr)
maxSteps- Maximum number of iterations in react mode (integer, editable, not required, visible)
Progress Tracking Fields:
currentRound- Current round number in workflow execution (integer, readonly, not required, visible)currentTask- Current task number within the current round (integer, readonly, not required, visible)currentAction- Current action number within the current task (integer, readonly, not required, visible)totalTasks- Total number of tasks in the workflow (integer, readonly, not required, visible)totalActions- Total number of actions in the workflow (integer, readonly, not required, visible)
Timestamp Fields:
startedAt- When the workflow started (timestamp, readonly, not required, visible)lastActivity- Timestamp of last activity (timestamp, readonly, not required, visible)
Related Data Fields (Lists):
logs- List of workflow log entries (text/list, readonly, not required, visible)messages- List of workflow messages (text/list, readonly, not required, visible)stats- List of workflow statistics (text/list, readonly, not required, visible)tasks- List of tasks in the workflow (text/list, readonly, not required, visible)expectedFormats- List of expected file format extensions (text/list, readonly, not required, visible)
Pagination Parameters
Request Parameters (PaginationParams):
page- Current page number (1-based, minimum 1)pageSize- Number of items per page (minimum 1, maximum 1000)sort- Array of sort field configurations- Each sort field contains:
field- Field name to sort by (must match a workflow field name)direction- Sort direction: "asc" or "desc"
- Each sort field contains:
filters- Filter criteria dictionarysearch- General search term (searches across all text fields, case-insensitive)- Field-specific filters:
{fieldName: value}or{fieldName: {operator: "operator", value: value}} - Supported operators: "equals", "contains", "startsWith", "endsWith", "gt", "gte", "lt", "lte", "in", "notIn"
Response Metadata (PaginationMetadata):
currentPage- Current page number (1-based)pageSize- Number of items per pagetotalItems- Total number of items across all pages (after filters applied)totalPages- Total number of pages (calculated from totalItems / pageSize)sort- Current sort configuration applied (array of SortField objects)filters- Current filters applied (mirrors request filters)
Attribute Definition Structure
Each field returned from /api/attributes/ChatWorkflow contains:
name- Field name (e.g., "status", "name", "lastActivity")type- Field data type (e.g., "text", "select", "integer", "timestamp", "checkbox")label- Localized field label (object with language keys: {"en": "English Label", "fr": "French Label"})description- Field description textrequired- Boolean indicating if field is requiredreadonly- Boolean indicating if field is read-onlyeditable- Boolean indicating if field can be edited (inverse of readonly)visible- Boolean indicating if field should be displayed in UIoptions- Array of options for select fields (each option hasvalueand localizedlabel)
Dynamic Rendering Guidelines
The frontend must render all UI components dynamically based on backend metadata. No field definitions, labels, validation rules, or UI structure should be hardcoded.
Table Column Generation
When rendering the workflow list table:
- Fetch attribute definitions from
/api/attributes/ChatWorkflow - Filter attributes where
visible: trueto determine which columns to display - Use
labelproperty for column headers (select appropriate language based on user preference) - Use
typeproperty to determine how to format cell values:textfields → Display as plain textselectfields → Display value using label from options array (match value to option.value, then display option.label)integerfields → Display as formatted numbertimestampfields → Format as relative time ("2 hours ago") or absolute date/time based on user preferencecheckboxfields → Display as checkmark icon or boolean indicator
- Use
readonlyproperty to determine if column should be sortable (readonly fields may still be sortable, but editable fields definitely are) - Generate click handlers for column headers to update sort parameters and refetch data
Filter Control Generation
When rendering filter controls:
- Fetch attribute definitions from
/api/attributes/ChatWorkflow - Filter attributes where
visible: trueto determine which filters to show - For each visible field, generate appropriate filter UI based on
type:textfields → Text input filter (supports "contains", "equals", "startsWith", "endsWith" operators)selectfields → Dropdown filter with options fromoptionsarray (use localized labels)integerfields → Number range filter (min/max inputs) or single number input with comparison operators (gt, gte, lt, lte)timestampfields → Date range picker or single date picker with comparison operatorscheckboxfields → Boolean toggle filter (true/false/any)
- Use
labelproperty for filter labels (localized) - When user applies filter, update
filtersobject in pagination parameters and refetch data - Display active filters as chips/badges showing field label and value
- Allow removing individual filters by removing them from
filtersobject
Search Implementation
For general search functionality:
- Display a single search input box (not field-specific)
- When user types, update
filters.searchin pagination parameters - Debounce search input (wait 300-500ms after user stops typing before sending request)
- Search applies across all text fields in the workflow object
- Reset to page 1 when search query changes
- Combine search with field-specific filters (both are in the
filtersobject)
Form Field Generation
When rendering edit forms:
- Fetch attribute definitions from
/api/attributes/ChatWorkflow - Filter attributes where
visible: trueANDeditable: trueto determine which fields to show - For each editable field, generate appropriate form input based on
type:textfields → Text inputselectfields → Dropdown/select input with options fromoptionsarray (use localized labels)integerfields → Number input with appropriate min/max constraintstimestampfields → Date/time pickercheckboxfields → Checkbox input
- Use
labelproperty for field labels (localized) - Use
requiredproperty to show required indicators (asterisk, etc.) - Use
descriptionproperty to show help text or tooltips - Validate form before submission:
- Check all
required: truefields have values - Validate types (e.g., integer fields must be numbers)
- Validate select fields (value must be in options array)
- Check all
- On submit, send only changed fields or all form data to update endpoint
Display Formatting
When displaying field values:
- Use
typeproperty to determine formatting:text→ Display as-is (may need HTML escaping)select→ Look up value inoptionsarray and display localized labelinteger→ Format with thousand separators if neededtimestamp→ Format as relative time or absolute date/timecheckbox→ Display as checkmark icon or "Yes"/"No" text
- Handle
nullorundefinedvalues gracefully (show "-" or "Not set") - For list fields (logs, messages, stats), render as expandable sections or separate tables
- Use
readonlyproperty to determine if field should show edit indicators
Real-Time Polling
When monitoring running workflows:
-
Status Polling:
- Poll every 2-5 seconds if workflow status is "running"
- Stop polling if status is "completed", "stopped", or "error"
- Update status badge and workflow information on each poll
-
Message Polling (Incremental Loading):
- Store ID of last displayed message
- Poll every 2-3 seconds for messages after last message ID
- Append new messages to list (don't reload all)
- Only poll if workflow is "running"
-
Log Polling (Incremental Loading):
- Store ID of last displayed log
- Poll every 2-3 seconds for logs after last log ID
- Prepend new logs to list (newest first)
- Only poll if workflow is "running"
-
Polling Management:
- Stop all polling when workflow completes
- Show completion message
- Update UI to indicate workflow is finished
Localization
All labels and options support multiple languages:
- Use user's preferred language (from user settings or browser locale)
- Access localized labels from
labelobject:label[userLanguage]orlabel.enas fallback - For select options, use
option.label[userLanguage]oroption.label.enas fallback - If label for current language is missing, fall back to English
Key Principles
- Never hardcode field names, labels, types, or validation rules
- Always fetch attribute definitions from backend before rendering UI
- Use attribute metadata to determine what to display and how to display it
- Support all field types dynamically - if backend adds new types, frontend should handle them
- Respect
visible,editable,readonly, andrequiredflags from backend - Use localized labels from backend metadata
- Generate filters, forms, and tables entirely from attribute definitions
- When backend adds new fields, frontend should automatically display them without code changes
- Handle all error cases gracefully (403, 404, 400, 500)
- Provide user feedback for all actions (loading states, success messages, error messages)
Summary
This document provides complete frontend requirements for the workflow management page and its views/components. All requirements follow the principle of backend-driven UI generation—no hardcoding of field definitions, labels, or validation rules. The frontend should dynamically generate all UI components from backend metadata provided through the /api/attributes/ChatWorkflow endpoint.
Key Architecture Pattern: The workflow management interface is a single page (/workflows) with different views managed through component state. Detail View is shown as an expandable section (roll down from selected workflow row), and Edit View is shown as a popup/modal overlay. All interactions happen within the same page component without separate routes.
For generic patterns that apply across all entity types (not just workflows), see the Dynamic Forms and Pagination documentation.