"use client" import type { components } from "@shared/api/__generated__/openapi.types" import type { JSX } from "react" import { PlusIcon } from "lucide-react" import { FunctionComponent, useState } from "react" import { useRouter } from "next/navigation" import { ProjectCard } from "@entities/ProjectCard" import { useBreadcrumbs } from "@shared/context/BreadcrumbsContext" import { CreateProjectModal, DeleteProjectModal, EditProjectModal, RenameProjectModal, } from "@features/project" import api from "@shared/api" import { useDebounce } from "@shared/hooks/useDebounce" import { Button } from "@shared/ui" import { ProjectCardSkeleton } from "@shared/ui/Skeleton" import { ProjectsHeader, type ProjectStatusEnum, } from "@widgets/Projects/ProjectsHeader" import { IProjectsPageProps } from "./ProjectsPage.d" import styles from "./ProjectsPage.module.scss" type ProjectRead = components["schemas"]["ProjectRead"] export const ProjectsPage: FunctionComponent< IProjectsPageProps > = (): JSX.Element => { useBreadcrumbs([{ label: "Проекты", href: "/projects" }]) const router = useRouter() const [isCreateModalOpen, setIsCreateModalOpen] = useState(false) const [editProject, setEditProject] = useState(null) const [renameProject, setRenameProject] = useState(null) const [deleteProject, setDeleteProject] = useState(null) const [search, setSearch] = useState("") const [statusFilter, setStatusFilter] = useState("") const debouncedSearch = useDebounce(search, 300) const { data: projects, isLoading: projectsLoading, refetch: refetchProjects, } = api.useQuery("get", "/api/projects/", { params: { query: { search: debouncedSearch || undefined, status: statusFilter || undefined, }, }, }) return (

Мои проекты

Управляйте своими последними проектами

{ await refetchProjects() }} /> {editProject && ( { if (!open) setEditProject(null) }} project={editProject} onUpdated={async () => { await refetchProjects() }} /> )} {renameProject && ( { if (!open) setRenameProject(null) }} project={renameProject} onRenamed={async () => { await refetchProjects() }} /> )} {deleteProject && ( { if (!open) setDeleteProject(null) }} project={deleteProject} onDeleted={async () => { await refetchProjects() }} /> )}
{projectsLoading ? Array.from({ length: 6 }).map((_, i) => ( )) : projects?.map((project) => ( router.push(`/projects/${project.id}`)} onEdit={() => setEditProject(project)} onRename={() => setRenameProject(project)} onDelete={() => setDeleteProject(project)} /> ))}
{!projectsLoading && projects?.length === 0 && (

{search || statusFilter ? "Проекты не найдены" : "У вас пока нет проектов"}

)}
) }