"use client"; import React, { useState } from "react"; import { Button } from "@/components/ui/button"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogTrigger } from "@/components/ui/dialog"; import { PlusIcon, SettingsIcon, UsersIcon, WorkflowIcon } from "@/components/icons"; import { ApprovalWorkflowForm } from "@/components/form/ApprovalWorkflowForm"; import { UserLevelsForm } from "@/components/form/UserLevelsForm"; import { useWorkflowModal } from "@/components/modals/WorkflowModalProvider"; import { useWorkflowStatusCheck } from "@/hooks/useWorkflowStatusCheck"; import { CreateApprovalWorkflowWithClientSettingsRequest, UserLevelsCreateRequest, UserLevel, getUserLevels, getApprovalWorkflowComprehensiveDetails, ComprehensiveWorkflowResponse, createUserLevel, } from "@/service/approval-workflows"; function TenantSettingsContent() { const [activeTab, setActiveTab] = useState("workflows"); const [isUserLevelDialogOpen, setIsUserLevelDialogOpen] = useState(false); const [workflow, setWorkflow] = useState(null); const [userLevels, setUserLevels] = useState([]); const [isLoading, setIsLoading] = useState(false); const [isEditingWorkflow, setIsEditingWorkflow] = useState(false); const { checkWorkflowStatus } = useWorkflowStatusCheck(); const { showWorkflowModal } = useWorkflowModal(); // Load data on component mount React.useEffect(() => { loadData(); }, []); const loadData = async () => { setIsLoading(true); try { const [comprehensiveWorkflowRes, userLevelsRes] = await Promise.all([ getApprovalWorkflowComprehensiveDetails(4), // Using workflow ID 4 as per API example getUserLevels(), ]); if (!comprehensiveWorkflowRes?.error) { setWorkflow(comprehensiveWorkflowRes?.data?.data || null); } else { setWorkflow(null); } if (!userLevelsRes?.error) { setUserLevels(userLevelsRes?.data?.data || []); } } catch (error) { console.error("Error loading data:", error); } finally { setIsLoading(false); } }; const handleWorkflowSave = async (data: CreateApprovalWorkflowWithClientSettingsRequest) => { setIsEditingWorkflow(false); await loadData(); // Reload data after saving }; const handleUserLevelSave = async (data: UserLevelsCreateRequest) => { try { const response = await createUserLevel(data); if (response?.error) { console.error("Error creating user level:", response?.message); // You can add error handling here (e.g., show error message) } else { console.log("User level created successfully:", response); // You can add success handling here (e.g., show success message) } } catch (error) { console.error("Error creating user level:", error); } setIsUserLevelDialogOpen(false); await loadData(); // Reload data after saving }; const handleBulkUserLevelSave = async (data: UserLevelsCreateRequest[]) => { setIsUserLevelDialogOpen(false); await loadData(); // Reload data after saving }; return (

Tenant Settings

Manage approval workflows and user levels for your tenant

Approval Workflows User Levels {/* Approval Workflows Tab */}

Approval Workflow Setup

{workflow && !isEditingWorkflow && ( )}
{isEditingWorkflow ? ( Setup Approval Workflow ({ stepOrder: step.stepOrder, stepName: step.stepName, requiredUserLevelId: step.requiredUserLevelId, canSkip: step.canSkip, autoApproveAfterHours: step.autoApproveAfterHours, isActive: step.isActive, conditionType: step.conditionType, conditionValue: step.conditionValue, })) || [], clientApprovalSettings: { approvalExemptCategories: workflow.clientSettings.exemptCategoriesDetails || [], approvalExemptRoles: workflow.clientSettings.exemptRolesDetails || [], approvalExemptUsers: workflow.clientSettings.exemptUsersDetails || [], autoPublishArticles: workflow.clientSettings.autoPublishArticles, isActive: workflow.clientSettings.isActive, requireApprovalFor: workflow.clientSettings.requireApprovalFor || [], requiresApproval: workflow.clientSettings.requiresApproval, skipApprovalFor: workflow.clientSettings.skipApprovalFor || [] } } : undefined} onSave={handleWorkflowSave} onCancel={() => setIsEditingWorkflow(false)} /> ) : workflow ? ( {workflow.workflow.name}
{workflow.workflow.isDefault && ( Default )} {workflow.workflow.isActive ? ( Active ) : ( Inactive )}

{workflow.workflow.description}

{workflow.workflow.totalSteps}
Total Steps
{workflow.workflow.activeSteps}
Active Steps
{workflow.workflow.requiresApproval ? 'Yes' : 'No'}
Requires Approval
{workflow.workflow.autoPublish ? 'Yes' : 'No'}
Auto Publish
{/* Workflow Steps Overview */} {workflow.steps && workflow.steps.length > 0 && (

Workflow Steps

{workflow.steps.map((step: any, index: number) => (
{step.stepOrder}
{step.stepName}
{step.conditionType && `Condition: ${step.conditionType}`} {step.autoApproveAfterHours && ` • Auto-approve after ${step.autoApproveAfterHours}h`} {step.requiredUserLevelName && ` • Required Level: ${step.requiredUserLevelName}`}
{step.canSkip && ( Can Skip )} {step.isParallel && ( Parallel )} {step.isActive && ( Active )} {step.isFirstStep && ( First Step )} {step.isLastStep && ( Last Step )}
))}
)} {/* Client Settings */}

Client Settings

Default Workflow
{workflow.clientSettings.defaultWorkflowName}
Auto Publish Articles
{workflow.clientSettings.autoPublishArticles ? 'Yes' : 'No'}
Requires Approval
{workflow.clientSettings.requiresApproval ? 'Yes' : 'No'}
Settings Active
{workflow.clientSettings.isActive ? 'Yes' : 'No'}
{/* Statistics */}

Workflow Statistics

Total Articles Processed
{workflow.statistics.totalArticlesProcessed}
Pending Articles
{workflow.statistics.pendingArticles}
Approved Articles
{workflow.statistics.approvedArticles}
Rejected Articles
{workflow.statistics.rejectedArticles}
Average Processing Time
{workflow.statistics.averageProcessingTime}h
Most Active Step
{workflow.statistics.mostActiveStep || 'N/A'}
{/* Workflow Metadata */}

Workflow Information

Client ID
{workflow.workflow.clientId}
Created At
{new Date(workflow.workflow.createdAt).toLocaleString()}
Updated At
{new Date(workflow.workflow.updatedAt).toLocaleString()}
Workflow ID
{workflow.workflow.id}
Has Branches
{workflow.workflow.hasBranches ? 'Yes' : 'No'}
Max Step Order
{workflow.workflow.maxStepOrder}
) : (

No Workflow Configured

Set up your approval workflow to manage content approval process

)}
{/* User Levels Tab */}

User Levels

Create New User Level setIsUserLevelDialogOpen(false)} />
{/* User Levels Summary */} {userLevels.length > 0 && (
{userLevels.length}
Total User Levels
{userLevels.filter(ul => ul.isActive).length}
Active Levels
{userLevels.filter(ul => ul.isApprovalActive).length}
Approval Active
{userLevels.filter(ul => ul.parentLevelId).length}
Child Levels
)} {/* User Levels Hierarchy */} {userLevels.length > 0 && ( User Levels Hierarchy
{userLevels .filter(ul => !ul.parentLevelId) // Root levels .sort((a, b) => a.levelNumber - b.levelNumber) .map(rootLevel => (
{/* Root Level */}
{rootLevel.levelNumber}
{rootLevel.name}
{rootLevel.aliasName} • {rootLevel.group || 'No group'}
{rootLevel.isActive && ( Active )} {rootLevel.isApprovalActive && ( Approval Active )}
{/* Child Levels */} {userLevels .filter(ul => ul.parentLevelId === rootLevel.id) .sort((a, b) => a.levelNumber - b.levelNumber) .map(childLevel => (
{childLevel.levelNumber}
{childLevel.name}
{childLevel.aliasName} • {childLevel.group || 'No group'}
{childLevel.isActive && ( Active )} {childLevel.isApprovalActive && ( Approval )}
))}
))}
)}
{userLevels.length > 0 ? userLevels.map((userLevel) => ( {userLevel.name}
Level {userLevel.levelNumber} {userLevel.isActive ? ( Active ) : ( Inactive )}
Alias: {userLevel.aliasName}
{userLevel.group && (
Group: {userLevel.group}
)}
Approval Active: {userLevel.isApprovalActive ? 'Yes' : 'No'}
{userLevel.parentLevelId && (
Parent Level: { userLevels.length > 0 ? userLevels.find(ul => ul.id === userLevel.parentLevelId)?.name || `Level ${userLevel.parentLevelId}` : `Level ${userLevel.parentLevelId}`}
)} {userLevel.provinceId && (
Province: Province {userLevel.provinceId}
)}
Created: {userLevel.createdAt ? new Date(userLevel.createdAt).toLocaleDateString() : 'N/A'}
)) : ''}
{userLevels.length === 0 && !isLoading && (

No User Levels Found

Create your first user level to define approval hierarchy

)}
); } export default function TenantSettingsPage() { return ; }