import React, { useState } from "react"; import { FaEye, FaEdit, FaPlus, FaTimes, FaSave, FaTrash, FaQuestionCircle, } from "react-icons/fa"; import { HrEvaluation360Template, HrQuestionGroup, HrEvaluationQuestion, QuestionTypeEnum, HrQuestionOption, AssessorTypeEnum, } from "../../../types/hr"; import DataTable, { Column } from "../../../components/common/DataTable"; import { mockEvaluation360Templates } from "../../../mocks/mockEvaluation360Templates"; import Widget from "../../../components/common/Widget"; 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} />