Loading Projects...
;
+
+ return (
+
+
+
+
+ {projects.map((item) => (
+
+ ))}
+
+
+ {selectedProject && (
+
setSelectedProject(null)}
+ onSave={handleUpdate}
+ />
+ )}
+
+ );
+}
\ No newline at end of file
diff --git a/src/pages/admins/components/projects/ProjectCard.tsx b/src/pages/admins/components/projects/ProjectCard.tsx
new file mode 100644
index 0000000..0262027
--- /dev/null
+++ b/src/pages/admins/components/projects/ProjectCard.tsx
@@ -0,0 +1,62 @@
+import { Edit, Trash2, ExternalLink } from "lucide-react";
+import { T_projects } from "@/types/projects.type";
+import { Link } from "react-router-dom";
+
+interface ProjectCardProps {
+ project: T_projects;
+ onEdit: (project: T_projects) => void;
+ onDelete: (id: string) => void;
+}
+
+export const ProjectCard = ({ project, onEdit, onDelete }: ProjectCardProps) => {
+ return (
+
+
+
+ {project.name}
+ {project.isFeatured && (
+
+ Featured
+
+ )}
+
+
+ {project.description}
+
+
+ {project.technologies.slice(0, 4).map((tech) => (
+
+ {tech}
+
+ ))}
+
+
+
+
+
+
+ {project.liveLink && (
+
+
+
+ )}
+
+
+ );
+};
\ No newline at end of file
diff --git a/src/types/projects.type.ts b/src/types/projects.type.ts
index 13b8fa8..88a2977 100644
--- a/src/types/projects.type.ts
+++ b/src/types/projects.type.ts
@@ -2,6 +2,7 @@ import { ProjectCategory } from "@/enums/projectCategory";
import { ProjectStatus } from "@/enums/projectStatus";
export type T_projects = {
+ id:string;
name: string;
description: string;
thumbnail?: string;