"use client"; import { useState, useEffect } from "react"; import { useRouter } from "next/navigation"; import { Card, CardHeader, CardContent } from "@/components/ui/Card"; import Button from "@/components/ui/Button"; import { Input } from "@/components/ui/Input"; import PageContainer from "@/components/ui/PageContainer"; import PageHeader from "@/components/ui/PageHeader"; import { useTranslation } from "@/lib/i18n"; export default function NewTaskSetPage() { const { t } = useTranslation(); const router = useRouter(); const [taskTemplates, setTaskTemplates] = useState([]); const [formData, setFormData] = useState({ name: "", description: "", task_category: "design", selectedTemplates: [] }); const [isSubmitting, setIsSubmitting] = useState(false); useEffect(() => { // Fetch available task templates const fetchTemplates = async () => { try { const response = await fetch('/api/tasks/templates'); if (response.ok) { const data = await response.json(); setTaskTemplates(data); } } catch (error) { console.error('Error fetching templates:', error); } }; fetchTemplates(); }, []); const handleSubmit = async (e) => { e.preventDefault(); if (!formData.name.trim()) { alert("Nazwa zestawu jest wymagana"); return; } if (formData.selectedTemplates.length === 0) { alert("Wybierz przynajmniej jeden szablon zadania"); return; } setIsSubmitting(true); try { // Create the task set const createResponse = await fetch('/api/task-sets', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ name: formData.name.trim(), description: formData.description.trim(), task_category: formData.task_category }) }); if (!createResponse.ok) { throw new Error('Failed to create task set'); } const { id: setId } = await createResponse.json(); // Add templates to the set const templatesData = { templates: formData.selectedTemplates.map((templateId, index) => ({ task_id: templateId, sort_order: index })) }; const updateResponse = await fetch(`/api/task-sets/${setId}`, { method: 'PUT', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(templatesData) }); if (!updateResponse.ok) { throw new Error('Failed to add templates to task set'); } router.push('/task-sets'); } catch (error) { console.error('Error creating task set:', error); alert('Wystąpił błąd podczas tworzenia zestawu zadań'); } finally { setIsSubmitting(false); } }; const toggleTemplate = (templateId) => { setFormData(prev => ({ ...prev, selectedTemplates: prev.selectedTemplates.includes(templateId) ? prev.selectedTemplates.filter(id => id !== templateId) : [...prev.selectedTemplates, templateId] })); }; const moveTemplate = (fromIndex, toIndex) => { const newSelected = [...formData.selectedTemplates]; const [moved] = newSelected.splice(fromIndex, 1); newSelected.splice(toIndex, 0, moved); setFormData(prev => ({ ...prev, selectedTemplates: newSelected })); }; return (
{/* Basic info */}

Informacje podstawowe

setFormData(prev => ({ ...prev, name: e.target.value }))} placeholder="np. Standardowe zadania projektowe" required />
setFormData(prev => ({ ...prev, description: e.target.value }))} placeholder="Opcjonalny opis zestawu" />
{/* Template selection */}

Wybrane szablony zadań

Wybrano: {formData.selectedTemplates.length} szablonów

{formData.selectedTemplates.length > 0 ? (
{formData.selectedTemplates.map((templateId, index) => { const template = taskTemplates.find(t => t.task_id === templateId); return (
{index + 1}. {template?.name || 'Nieznany szablon'}
); })}
) : (

Brak wybranych szablonów

)}
{/* Available templates */}

Dostępne szablony zadań

Wybierz szablony, które chcesz dodać do zestawu

{taskTemplates.map((template) => ( ))}
{taskTemplates.length === 0 && (

Brak dostępnych szablonów zadań. Najpierw utwórz szablony w zakładce "Szablony zadań".

)}
{/* Actions */}
); }