Files
techzaa-frontend/src/components/admin/projects/ManageProject.tsx
T

75 lines
1.9 KiB
TypeScript
Raw Normal View History

2026-05-13 22:23:18 +06:00
import {
useDeleteProject,
useProjects,
useUpdateProject,
} from "@/hooks/queries/useProjects";
2026-05-11 00:23:38 +06:00
import { useState } from "react";
import { T_projects } from "@/types/projects.type";
import { EditProjectModal } from "./EditProjectModal";
2026-05-13 22:23:18 +06:00
import { ProjectCard } from "./ProjectCard";
2026-05-11 00:23:38 +06:00
export default function ManageProject() {
const { data: projectsData, isLoading } = useProjects();
const updateMutation = useUpdateProject();
const deleteMutation = useDeleteProject();
2026-05-13 22:23:18 +06:00
const [selectedProject, setSelectedProject] = useState<T_projects | null>(
null,
);
2026-05-11 00:23:38 +06:00
const projects: T_projects[] = projectsData?.data?.data?.result || [];
const handleUpdate = (data: Partial<T_projects>) => {
if (selectedProject) {
2026-05-13 22:23:18 +06:00
updateMutation.mutate(
2026-05-24 21:50:36 +06:00
{ id: selectedProject._id, data },
2026-05-13 22:23:18 +06:00
{
onSuccess: () => setSelectedProject(null),
},
);
2026-05-11 00:23:38 +06:00
}
};
const handleDelete = (id: string) => {
if (window.confirm("Are you sure you want to delete this project?")) {
deleteMutation.mutate(id);
}
};
2026-05-13 22:23:18 +06:00
if (isLoading)
return (
<div className="p-10 text-center animate-pulse">Loading Projects...</div>
);
2026-05-11 00:23:38 +06:00
return (
<div className="p-8 max-w-5xl mx-auto">
<header className="mb-10">
2026-05-13 22:23:18 +06:00
<h1 className="text-4xl font-extrabold">Manage Projects</h1>
<p className="text-muted-foreground">
Edit, update or remove your portfolio items.
</p>
2026-05-11 00:23:38 +06:00
</header>
<div className="grid grid-cols-1 gap-6">
{projects.map((item) => (
2026-05-13 22:23:18 +06:00
<ProjectCard
2026-05-24 21:50:36 +06:00
key={item._id}
2026-05-13 22:23:18 +06:00
project={item}
onEdit={setSelectedProject}
2026-05-11 00:23:38 +06:00
onDelete={handleDelete}
/>
))}
</div>
{selectedProject && (
2026-05-13 22:23:18 +06:00
<EditProjectModal
project={selectedProject}
onClose={() => setSelectedProject(null)}
2026-05-11 00:23:38 +06:00
onSave={handleUpdate}
/>
)}
</div>
);
2026-05-13 22:23:18 +06:00
}