import React, { useState, useEffect } from 'react' import { FaTimes, FaSave, FaUsers, FaPlus, FaTrash } from 'react-icons/fa' import { MmApprovalWorkflow, MmApprovalWorkflowLevel, RequestTypeEnum, ApprovalLevelEnum, } from '../../../types/mm' import MultiSelectEmployee from '../../../components/common/MultiSelectEmployee' import { mockDepartments } from '../../../mocks/mockDepartments' interface ApprovalWorkflowModalProps { isOpen: boolean onClose: () => void onSave: (workflow: MmApprovalWorkflow) => void workflow?: MmApprovalWorkflow | null mode: 'create' | 'view' | 'edit' } const ApprovalWorkflowModal: React.FC = ({ isOpen, onClose, onSave, workflow, mode, }) => { const [formData, setFormData] = useState>({ name: '', departmentId: '', requestType: RequestTypeEnum.Material, amountThreshold: 0, approvalLevels: [], isActive: true, }) useEffect(() => { if (mode === 'create') { // Reset form to initial empty state for new workflow setFormData({ name: '', departmentId: '', requestType: RequestTypeEnum.Material, amountThreshold: 0, approvalLevels: [], isActive: true, }) } else if (workflow) { // Load existing workflow data for view/edit modes setFormData(workflow) } }, [workflow, mode]) const handleInputChange = ( e: React.ChangeEvent, ) => { const { name, value, type } = e.target setFormData((prev) => ({ ...prev, [name]: type === 'number' ? parseFloat(value) || 0 : type === 'checkbox' ? (e.target as HTMLInputElement).checked : value, })) } const addApprovalLevel = () => { const newLevel: MmApprovalWorkflowLevel = { id: `level-${Date.now()}`, workflowId: formData.id || '', level: ApprovalLevelEnum.Supervisor, approverUserIds: [], approverNames: [], sequence: (formData.approvalLevels?.length || 0) + 1, isRequired: true, isParallel: false, } setFormData((prev) => ({ ...prev, approvalLevels: [...(prev.approvalLevels || []), newLevel], })) } const removeApprovalLevel = (index: number) => { setFormData((prev) => ({ ...prev, approvalLevels: prev.approvalLevels?.filter((_, i) => i !== index) || [], })) } const updateApprovalLevel = ( index: number, field: keyof MmApprovalWorkflowLevel, value: string | number | boolean | string[] | undefined, ) => { setFormData((prev) => ({ ...prev, approvalLevels: prev.approvalLevels?.map((level, i) => i === index ? { ...level, [field]: value } : level, ) || [], })) } const handleApproverNamesChange = (index: number, employees: string[]) => { updateApprovalLevel(index, 'approverNames', employees) } const handleSubmit = (e: React.FormEvent) => { e.preventDefault() if (mode !== 'view') { const newWorkflow: MmApprovalWorkflow = { id: workflow?.id || `WF-${Date.now()}`, name: formData.name || '', departmentId: formData.departmentId || '', requestType: formData.requestType || RequestTypeEnum.Material, amountThreshold: formData.amountThreshold || 0, approvalLevels: formData.approvalLevels || [], isActive: formData.isActive ?? true, creationTime: workflow?.creationTime || new Date(), lastModificationTime: new Date(), } onSave(newWorkflow) } onClose() } if (!isOpen) return null const isReadOnly = mode === 'view' const modalTitle = mode === 'create' ? 'Yeni Onay Süreci' : mode === 'edit' ? 'Onay Sürecini Düzenle' : 'Onay Süreci Detayları' return (

{modalTitle}

{/* Temel Bilgiler */}

Temel Bilgiler

{/* Onay Seviyeleri */}

Onay Seviyeleri

{!isReadOnly && ( )}
{formData.approvalLevels?.map((level, index) => (
Seviye {level.sequence} {!isReadOnly && ( )}
handleApproverNamesChange(index, employees)} disabled={isReadOnly} placeholder="Onaylayıcı seçin..." className="mt-1" />
updateApprovalLevel( index, 'timeoutDays', parseInt(e.target.value) || undefined, ) } readOnly={isReadOnly} min="1" className="mt-1 block w-full text-sm border border-gray-300 rounded-md px-2 py-1 focus:outline-none focus:ring-1 focus:ring-blue-500" />
))}
{formData.approvalLevels?.length === 0 && (
Henüz onay seviyesi eklenmedi
)}
{/* Action Buttons */}
{mode !== 'view' && ( )}
) } export default ApprovalWorkflowModal