# Frontend Form Generation Prompt ## Overview Generate comprehensive React/TypeScript forms for two main functionalities based on backend API specifications: 1. **Approval Workflow Settings Form** (API: `/approval-workflows/with-client-settings`) 2. **User Levels Management Form** (API: `/user-levels`) --- ## 1. APPROVAL WORKFLOW SETTINGS FORM ### API Endpoint ``` POST /approval-workflows/with-client-settings ``` ### Request Structure ```typescript interface CreateApprovalWorkflowWithClientSettingsRequest { // Workflow details name: string; // required description: string; // required isActive?: boolean; isDefault?: boolean; requiresApproval?: boolean; autoPublish?: boolean; steps: ApprovalWorkflowStepRequest[]; // required, min 1 // Client approval settings clientApprovalSettings: ClientApprovalSettingsRequest; } interface ApprovalWorkflowStepRequest { stepOrder: number; // required stepName: string; // required requiredUserLevelId: number; // required canSkip?: boolean; autoApproveAfterHours?: number; isActive?: boolean; // Multi-branch support fields parentStepId?: number; conditionType?: string; // 'user_level', 'user_level_hierarchy', 'always', 'custom' conditionValue?: string; // JSON string for conditions isParallel?: boolean; branchName?: string; branchOrder?: number; } interface ClientApprovalSettingsRequest { requiresApproval?: boolean; autoPublishArticles?: boolean; approvalExemptUsers: number[]; approvalExemptRoles: number[]; approvalExemptCategories: number[]; requireApprovalFor: string[]; skipApprovalFor: string[]; isActive?: boolean; } ``` ### CURL Request ``` curl -X 'POST' \ 'https://kontenhumas.com/api/approval-workflows/with-client-settings' \ -H 'accept: application/json' \ -H 'Authorization: Bearer eyJhbGciOiJSU....' \ -H 'Content-Type: application/json' \ -d '{ "autoPublish": true, "clientApprovalSettings": { "approvalExemptCategories": [], "approvalExemptRoles": [], "approvalExemptUsers": [], "autoPublishArticles": true, "isActive": true, "requireApprovalFor": [], "requiresApproval": true, "skipApprovalFor": [] }, "description": "Test", "isActive": true, "isDefault": true, "name": "Multi-Branch Jurnalis Approval", "requiresApproval": true, "steps": [ { "stepOrder": 1, "stepName": "Single Approval", "requiredUserLevelId": 12, "conditionType": "user_level_hierarchy", "conditionValue": "{\"applies_to_levels\": [13]}", "branchName": "Single Approval" } ] }' ``` ### Form Requirements #### **Section 1: Workflow Basic Information** - **Workflow Name** (Text Input, Required) - Label: "Workflow Name" - Placeholder: "e.g., Standard Article Approval" - Validation: Required, min 3 characters - **Description** (Textarea, Required) - Label: "Workflow Description" - Placeholder: "Describe the purpose and process of this workflow" - Validation: Required, min 10 characters - **Workflow Settings** (Checkbox Group) - ☐ Is Active (default: true) - ☐ Set as Default Workflow - ☐ Requires Approval (default: true) - ☐ Auto Publish After Approval (default: false) #### **Section 2: Workflow Steps** (Dynamic Array) - **Add Step Button** - Allow adding multiple steps - **Step Configuration** (for each step): - **Step Order** (Number Input, Required) - Label: "Step Order" - Default: Auto-increment (1, 2, 3...) - Validation: Required, unique within workflow - **Step Name** (Text Input, Required) - Label: "Step Name" - Placeholder: "e.g., Editor Review, Manager Approval" - Validation: Required, min 3 characters - **Required User Level** (Select Dropdown, Required) - Label: "Required User Level" - Options: Fetch from `/user-levels` API - Display: `{name} (Level {levelNumber})` - Validation: Required - **Step Settings** (Checkbox Group) - ☐ Can Skip This Step - ☐ Is Active (default: true) - **Auto Approval** (Number Input, Optional) - Label: "Auto Approve After Hours" - Placeholder: "Leave empty for manual approval" - Help Text: "Automatically approve after specified hours" - **Advanced Settings** (Collapsible Section) - **Parent Step** (Select Dropdown, Optional) - Label: "Parent Step (for branching)" - Options: Previous steps in workflow - Help Text: "Select parent step for parallel branches" - **Condition Type** (Select Dropdown, Optional) - Label: "Condition Type" - Options: ['always', 'user_level', 'user_level_hierarchy', 'custom'] - Default: 'always' - **Condition Value** (Text Input, Optional) - Label: "Condition Value (JSON)" - Placeholder: '{"minLevel": 3}' - Help Text: "JSON string for custom conditions" - **Branch Settings** (Checkbox Group) - ☐ Is Parallel Step - **Branch Name** (Text Input, Optional) - Label: "Branch Name" - Placeholder: "e.g., technical, content" - **Branch Order** (Number Input, Optional) - Label: "Branch Order" - **Step Actions** - Move Up/Down buttons - Delete Step button - Duplicate Step button #### **Section 3: Client Approval Settings** - **Global Approval Settings** (Checkbox Group) - ☐ Requires Approval (default: true) - ☐ Auto Publish Articles (default: false) - ☐ Is Active (default: true) - **Exemptions** (Multi-select sections) - **Exempt Users** (Multi-select) - Label: "Users Exempt from Approval" - Options: Fetch from `/users` API - Display: `{fullname} ({username})` - Searchable: Yes - **Exempt Roles** (Multi-select) - Label: "Roles Exempt from Approval" - Options: Fetch from `/user-roles` API - Display: `{roleName}` - Searchable: Yes - **Exempt Categories** (Multi-select) - Label: "Categories Exempt from Approval" - Options: Fetch from `/article-categories` API - Display: `{categoryName}` - Searchable: Yes - **Content Type Rules** (Dynamic Arrays) - **Require Approval For** (Tag Input) - Label: "Content Types Requiring Approval" - Placeholder: "e.g., news, article, blog" - Help Text: "Press Enter to add content type" - **Skip Approval For** (Tag Input) - Label: "Content Types Skipping Approval" - Placeholder: "e.g., announcement, update" - Help Text: "Press Enter to add content type" ### Form Features - **Real-time Validation** - **Step-by-step Wizard** (Optional) - **Preview Mode** - Show workflow visualization - **Save as Draft** functionality - **Form Reset** with confirmation - **Auto-save** every 30 seconds --- ## 2. USER LEVELS MANAGEMENT FORM ### API Endpoint ``` POST /user-levels ``` ### Request Structure ```typescript interface UserLevelsCreateRequest { name: string; // required aliasName: string; // required levelNumber: number; // required parentLevelId?: number; provinceId?: number; group?: string; isApprovalActive?: boolean; isActive?: boolean; } ``` ### Form Requirements #### **Section 1: Basic Information** - **Level Name** (Text Input, Required) - Label: "Level Name" - Placeholder: "e.g., Senior Editor, Manager, Publisher" - Validation: Required, min 3 characters, unique - **Alias Name** (Text Input, Required) - Label: "Alias Name" - Placeholder: "e.g., SENIOR_EDITOR, MANAGER, PUBLISHER" - Validation: Required, uppercase, unique - Help Text: "Short identifier for system use" - **Level Number** (Number Input, Required) - Label: "Level Number" - Placeholder: "e.g., 1, 2, 3" - Validation: Required, unique, positive integer - Help Text: "Higher number = higher authority" #### **Section 2: Hierarchy Settings** - **Parent Level** (Select Dropdown, Optional) - Label: "Parent Level" - Options: Fetch from `/user-levels` API - Display: `{name} (Level {levelNumber})` - Help Text: "Select parent level for hierarchy" - **Province** (Select Dropdown, Optional) - Label: "Province" - Options: Fetch from `/provinces` API - Display: `{provinceName}` - Help Text: "Geographic scope for this level" - **Group** (Text Input, Optional) - Label: "Group" - Placeholder: "e.g., Editorial, Management, Technical" - Help Text: "Group classification for organization" #### **Section 3: Approval Settings** - **Approval Settings** (Checkbox Group) - ☐ Is Approval Active (default: true) - Help Text: "Users with this level can participate in approval process" - ☐ Is Active (default: true) - Help Text: "Level is available for assignment" ### Form Features - **Level Number Validation** - Prevent duplicate level numbers - **Hierarchy Visualization** - Show level hierarchy tree - **Bulk Operations** - Create multiple levels at once - **Import/Export** - CSV import/export functionality - **Level Preview** - Show how level fits in hierarchy --- ## 3. COMMON FORM COMPONENTS ### **Form Layout** - **Responsive Design** - Mobile-first approach - **Multi-step Wizard** - For complex forms - **Tabbed Interface** - For different sections - **Collapsible Sections** - For advanced settings ### **Validation** - **Real-time Validation** - Show errors as user types - **Cross-field Validation** - Validate relationships between fields - **Server-side Validation** - Handle API validation errors - **Custom Validation Rules** - Business logic validation ### **User Experience** - **Auto-complete** - For select fields - **Search Functionality** - For large option lists - **Drag & Drop** - For reordering steps/items - **Keyboard Navigation** - Full keyboard support - **Accessibility** - ARIA labels, screen reader support ### **Data Management** - **Form State Management** - Redux/Zustand - **Local Storage** - Save draft forms - **API Integration** - Axios/Fetch with error handling - **Loading States** - Spinners, skeleton screens - **Success/Error Messages** - Toast notifications ### **Styling Requirements** - **Design System** - Consistent with existing app - **Dark/Light Mode** - Theme support - **Custom Components** - Reusable form components - **Animation** - Smooth transitions - **Icons** - Meaningful icons for actions --- ## 4. IMPLEMENTATION NOTES ### **API Integration** ```typescript // Example API calls const createWorkflow = async (data: CreateApprovalWorkflowWithClientSettingsRequest) => { const response = await fetch('/api/approval-workflows/with-client-settings', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify(data) }); return response.json(); }; const createUserLevel = async (data: UserLevelsCreateRequest) => { const response = await fetch('/api/user-levels', { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify(data) }); return response.json(); }; ``` ### **Form Libraries** - **React Hook Form** - For form management - **Yup/Zod** - For validation - **React Select** - For advanced select components - **React DnD** - For drag and drop - **React Query** - For API state management ### **Component Structure** ``` components/ ├── forms/ │ ├── ApprovalWorkflowForm/ │ │ ├── index.tsx │ │ ├── WorkflowBasicInfo.tsx │ │ ├── WorkflowSteps.tsx │ │ ├── ClientSettings.tsx │ │ └── StepForm.tsx │ └── UserLevelsForm/ │ ├── index.tsx │ ├── BasicInfo.tsx │ ├── HierarchySettings.tsx │ └── ApprovalSettings.tsx ├── common/ │ ├── FormField.tsx │ ├── DynamicArray.tsx │ ├── MultiSelect.tsx │ └── ValidationMessage.tsx ``` ### **State Management** ```typescript // Form state structure interface FormState { workflowForm: { data: CreateApprovalWorkflowWithClientSettingsRequest; errors: Record; isValid: boolean; isSubmitting: boolean; }; userLevelsForm: { data: UserLevelsCreateRequest; errors: Record; isValid: boolean; isSubmitting: boolean; }; } ``` This prompt provides comprehensive specifications for generating both forms with all necessary fields, validation rules, user experience considerations, and implementation details based on the backend API structures.