"use client"; import { useEffect, useState } from "react"; import { Button } from "@nextui-org/react"; import { Plus } from "lucide-react"; import { ProjectType } from "@/types/project"; import ProjectsTable from "./ProjectsTable"; import ProjectDialog from "./ProjectDialog"; import { fetchProjects, createProject, updateProject, deleteProject, } from "./projectsControl"; export default function ProjectsPage() { const [projects, setProjects] = useState([]); useEffect(() => { async function fetchDataEffect() { try { const data = await fetchProjects(); setProjects(data); } catch (error) { console.error("Error in effect:", error.message); } } fetchDataEffect(); }, []); // dialog const [isProjectDialogOpen, setIsProjectDialogOpen] = useState(false); const [editingProject, setEditingProject] = useState( null ); const openDialogForCreate = () => { setIsProjectDialogOpen(true); setEditingProject(null); }; const closeDialog = () => { setIsProjectDialogOpen(false); setEditingProject(null); }; const onSubmit = async (name: string, detail: string) => { if (editingProject) { const updatedProject = await updateProject( editingProject.id, name, detail ); const updatedProjects = projects.map((project) => project.id === updatedProject.id ? updatedProject : project ); setProjects(updatedProjects); } else { const newProject = await createProject(name, detail); setProjects([...projects, newProject]); } closeDialog(); }; const onEditClick = (project: ProjectType) => { setEditingProject(project); setIsProjectDialogOpen(true); }; const onDeleteClick = async (projectId: number) => { try { await deleteProject(projectId); setProjects(projects.filter((project) => project.id !== projectId)); } catch (error) { console.error("Error deleting project:", error); } }; return (

Projects

); }