"use client"; import { useState, useEffect, forwardRef, useImperativeHandle } from "react"; import { useRouter } from "next/navigation"; import { useSession } from "next-auth/react"; import { Card, CardHeader, CardContent } from "@/components/ui/Card"; import Button from "@/components/ui/Button"; import { Input } from "@/components/ui/Input"; import { formatDateForInput } from "@/lib/utils"; import { useTranslation } from "@/lib/i18n"; import ProjectContactSelector from "@/components/ProjectContactSelector"; const ProjectForm = forwardRef(function ProjectForm({ initialData = null }, ref) { const { t } = useTranslation(); const { data: session } = useSession(); const [form, setForm] = useState({ contract_id: "", project_name: "", address: "", plot: "", district: "", unit: "", city: "", investment_number: "", finish_date: "", completion_date: "", wp: "", contact: "", notes: "", coordinates: "", wartosc_zlecenia: "", project_type: "design", assigned_to: "", }); const [contracts, setContracts] = useState([]); const [users, setUsers] = useState([]); const [loading, setLoading] = useState(false); const router = useRouter(); const isEdit = !!initialData; useEffect(() => { // Fetch contracts fetch("/api/contracts") .then((res) => res.json()) .then(setContracts); // Fetch users for assignment fetch("/api/projects/users") .then((res) => res.json()) .then(setUsers); }, []); // Update form state when initialData changes (for edit mode) useEffect(() => { if (initialData) { setForm({ contract_id: "", project_name: "", address: "", plot: "", district: "", unit: "", city: "", investment_number: "", finish_date: "", completion_date: "", wp: "", contact: "", notes: "", coordinates: "", wartosc_zlecenia: "", project_type: "design", assigned_to: "", ...initialData, // Ensure these defaults are preserved if not in initialData project_type: initialData.project_type || "design", assigned_to: initialData.assigned_to || "", wartosc_zlecenia: initialData.wartosc_zlecenia || "", // Format dates for input if they exist finish_date: initialData.finish_date ? formatDateForInput(initialData.finish_date) : "", completion_date: initialData.completion_date ? formatDateForInput(initialData.completion_date) : "", }); } }, [initialData]); function handleChange(e) { setForm({ ...form, [e.target.name]: e.target.value }); } async function saveProject() { setLoading(true); try { const res = await fetch( isEdit ? `/api/projects/${initialData.project_id}` : "/api/projects", { method: isEdit ? "PUT" : "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify(form), } ); if (res.ok) { const project = await res.json(); if (isEdit) { router.push(`/projects/${project.project_id}`); } else { router.push("/projects"); } } else { alert(t('projects.saveError')); } } catch (error) { console.error("Error saving project:", error); alert(t('projects.saveError')); } finally { setLoading(false); } } async function handleSubmit(e) { e.preventDefault(); await saveProject(); } // Expose save function to parent component useImperativeHandle(ref, () => ({ saveProject })); return (

{isEdit ? t('projects.editProjectDetails') : t('projects.projectDetails')}

{/* Contract and Project Type Section */}
{/* Basic Information Section */}

{t('projects.basicInformation')}

{/* Additional Information Section */}

{t('projects.additionalInfo')}

{session?.user?.role === 'team_lead' && (
)}