import { useState, useEffect } from 'react'; import { useNavigate } from 'react-router-dom'; import { Column } from 'primereact/column'; import { Button } from 'primereact/button'; import { Tag } from 'primereact/tag'; import BaseCrudTable from '@/core/components/BaseCrudTable'; import BasePageHeader from '@/core/components/BasePageHeader'; import ProjectFormDialog from '../components/ProjectFormDialog'; import { projectService } from '../project.service'; import { PROJECT_STATUS } from '@/core/constants/app.constants'; import type { Project } from '../project.types'; export default function ProjectListView() { const [loading, setLoading] = useState(false); const [projects, setProjects] = useState([]); const [dialogVisible, setDialogVisible] = useState(false); const [editProject, setEditProject] = useState(null); const navigate = useNavigate(); function load() { setLoading(true); projectService.getAll() .then(({ data }) => setProjects((data as { items?: Project[] }).items ?? data as Project[])) .catch(() => setProjects([])) .finally(() => setLoading(false)); } useEffect(() => { load(); }, []); function openCreate() { setEditProject(null); setDialogVisible(true); } function openEdit(p: Project) { setEditProject(p); setDialogVisible(true); } async function onSave(data: Partial) { if (editProject) { await projectService.update(editProject.id, data); } else { await projectService.create(data); } setDialogVisible(false); load(); } return (
} /> navigate(`/projects/${row.id}`)}> { const s = PROJECT_STATUS[row.status]; return ; }} sortable />
); }