import React, { useState } from 'react' import { FaEye, FaEdit, FaPlus, FaTimes, FaSave, FaTrash, FaQuestionCircle } from 'react-icons/fa' import { HrEvaluation360Template, HrQuestionGroup, HrEvaluationQuestion, QuestionTypeEnum, HrQuestionOption, AssessorTypeEnum, getQuestionTypeText, } from '../../../types/hr' import DataTable, { Column } from '../../../components/common/DataTable' import { mockEvaluation360Templates } from '../../../mocks/mockEvaluation360Templates' import Widget from '../../../components/common/Widget' import { Container } from '@/components/shared' const Degree360Templates: React.FC = () => { const [templateSearchTerm, setTemplateSearchTerm] = useState('') // Modal states const [showTemplateModal, setShowTemplateModal] = useState(false) const [showQuestionModal, setShowQuestionModal] = useState(false) const [showQuestionItemModal, setShowQuestionItemModal] = useState(false) const [selectedTemplate, setSelectedTemplate] = useState(null) const [selectedQuestionGroup, setSelectedQuestionGroup] = useState(null) const [selectedQuestion, setSelectedQuestion] = useState(null) const [isEditMode, setIsEditMode] = useState(false) // Form states const [templateForm, setTemplateForm] = useState({ name: '', description: '', isActive: true, assessorTypes: [] as AssessorTypeEnum[], }) const [questionGroupForm, setQuestionGroupForm] = useState({ groupName: '', description: '', weight: 0, order: 0, }) const [questionForm, setQuestionForm] = useState({ questionText: '', questionType: QuestionTypeEnum.Rating, isRequired: true, order: 0, weight: 0, options: [] as HrQuestionOption[], }) // Filter templates const filteredTemplates = mockEvaluation360Templates.filter((template) => { const searchLower = templateSearchTerm.toLowerCase() return ( template.name.toLowerCase().includes(searchLower) || template.description.toLowerCase().includes(searchLower) ) }) // Statistics const totalTemplates = mockEvaluation360Templates.length const activeTemplates = mockEvaluation360Templates.filter((t) => t.isActive).length // Event handlers const handleNewTemplate = () => { setTemplateForm({ name: '', description: '', isActive: true, assessorTypes: [], }) setSelectedTemplate(null) setIsEditMode(false) setShowTemplateModal(true) } const handleEditTemplate = (template: HrEvaluation360Template) => { setTemplateForm({ name: template.name, description: template.description, isActive: template.isActive, assessorTypes: template.assessorTypes || [], }) setSelectedTemplate(template) setIsEditMode(true) setShowTemplateModal(true) } const handleViewTemplate = (template: HrEvaluation360Template) => { setTemplateForm({ name: template.name, description: template.description, isActive: template.isActive, assessorTypes: template.assessorTypes || [], }) setSelectedTemplate(template) setShowTemplateModal(true) setIsEditMode(false) } const handleSaveTemplate = () => { console.log('Saving template:', templateForm) setShowTemplateModal(false) } const handleDeleteTemplate = (template: HrEvaluation360Template) => { if (confirm(`"${template.name}" şablonunu silmek istediğinizden emin misiniz?`)) { console.log('Deleting template:', template.id) } } const handleAddQuestionGroup = () => { setQuestionGroupForm({ groupName: '', description: '', weight: 0, order: 0, }) setSelectedQuestionGroup(null) setShowQuestionModal(true) } const handleEditQuestionGroup = (group: HrQuestionGroup) => { setQuestionGroupForm({ groupName: group.groupName, description: group.description || '', weight: group.weight, order: group.order, }) setSelectedQuestionGroup(group) setShowQuestionModal(true) } const handleSaveQuestionGroup = () => { console.log('Saving question group:', questionGroupForm) setShowQuestionModal(false) } const handleAddQuestion = (group: HrQuestionGroup) => { setQuestionForm({ questionText: '', questionType: QuestionTypeEnum.Rating, isRequired: true, order: 0, weight: 0, options: [], }) setSelectedQuestion(null) setSelectedQuestionGroup(group) setShowQuestionItemModal(true) } const handleEditQuestion = (question: HrEvaluationQuestion, group: HrQuestionGroup) => { setQuestionForm({ questionText: question.questionText, questionType: question.questionType, isRequired: question.isRequired, order: question.order, weight: question.weight, options: question.options || [], }) setSelectedQuestion(question) setSelectedQuestionGroup(group) setShowQuestionItemModal(true) } const handleSaveQuestion = () => { console.log('Saving question:', questionForm) setShowQuestionItemModal(false) } // Table columns const templateColumns: Column[] = [ { key: 'name', header: 'Şablon Adı', sortable: true, render: (template) => (
{template.name}
{template.description}
), }, { key: 'questionGroups', header: 'Soru Grupları', render: (template) => ( {template.questionGroups?.length || 0} grup ), }, { key: 'assessorTypes', header: 'Değerlendirecekler', render: (template) => { const assessorLabels = { [AssessorTypeEnum.Self]: 'Kendi', [AssessorTypeEnum.Manager]: 'Yönetici', [AssessorTypeEnum.Peer]: 'Meslektaş', [AssessorTypeEnum.Subordinate]: 'Ast', [AssessorTypeEnum.Customer]: 'Müşteri', [AssessorTypeEnum.OtherDepartment]: 'Diğer Departman', [AssessorTypeEnum.HRUpperManagement]: 'İK/Üst Yönetim', [AssessorTypeEnum.External]: 'Dış Paydaş', } const assessorTypes = template.assessorTypes || [] return (
{assessorTypes.map((type) => ( {assessorLabels[type] || type} ))} {assessorTypes.length === 0 && ( Belirtilmemiş )}
) }, }, { key: 'isActive', header: 'Durum', render: (template) => ( {template.isActive ? 'Aktif' : 'Pasif'} ), }, { key: 'actions', header: 'İşlemler', render: (template) => (
), }, ] return (
{/* Header */}

360° Şablonlar

360 derece değerlendirme şablonlarını yönetin

{/* Statistics */}
setTemplateSearchTerm(e.target.value)} className="w-full border border-gray-300 rounded-md px-3 py-1.5 text-sm focus:ring-2 focus:ring-purple-500 focus:border-purple-500" />
{/* Templates Table */}
{/* Template Modal */} {showTemplateModal && (

{isEditMode ? 'Şablon Düzenle' : selectedTemplate ? 'Şablon Detayı' : 'Yeni Şablon'}

{/* Basic Information */}
setTemplateForm({ ...templateForm, name: e.target.value })} className="w-full border border-gray-300 rounded-md px-3 py-1.5 text-sm focus:ring-2 focus:ring-purple-500 focus:border-purple-500" disabled={!isEditMode && !!selectedTemplate} />