diff --git a/frontend/src/app/(dashboard)/fundraising/page.tsx b/frontend/src/app/(dashboard)/fundraising/page.tsx
index 71d51f4..d810100 100644
--- a/frontend/src/app/(dashboard)/fundraising/page.tsx
+++ b/frontend/src/app/(dashboard)/fundraising/page.tsx
@@ -2,7 +2,8 @@
import React from "react";
import { motion } from "framer-motion";
-import { HandCoins } from "lucide-react";
+import { HandCoins, CirclePlus } from "lucide-react";
+import EmptyState from "@/components/EmptyState";
export default function FundraisingPage() {
return (
@@ -26,8 +27,13 @@ export default function FundraisingPage() {
-
-
Fundraising module coming soon...
+
+
);
diff --git a/frontend/src/app/(dashboard)/groups/page.tsx b/frontend/src/app/(dashboard)/groups/page.tsx
index 2168aee..8494585 100644
--- a/frontend/src/app/(dashboard)/groups/page.tsx
+++ b/frontend/src/app/(dashboard)/groups/page.tsx
@@ -2,7 +2,8 @@
import React from "react";
import { motion } from "framer-motion";
-import { Users } from "lucide-react";
+import { Users, UserPlus } from "lucide-react";
+import EmptyState from "@/components/EmptyState";
export default function GroupsPage() {
return (
@@ -26,8 +27,13 @@ export default function GroupsPage() {
-
-
Groups module coming soon...
+
+
);
diff --git a/frontend/src/app/(dashboard)/user/transactions/components/EmptyState.tsx b/frontend/src/app/(dashboard)/user/transactions/components/EmptyState.tsx
index e922ff5..a01bcc1 100644
--- a/frontend/src/app/(dashboard)/user/transactions/components/EmptyState.tsx
+++ b/frontend/src/app/(dashboard)/user/transactions/components/EmptyState.tsx
@@ -1,8 +1,12 @@
+import { Receipt } from "lucide-react";
+import BaseEmptyState from "@/components/EmptyState";
+
export default function EmptyState() {
return (
-
-
No transactions yet
-
Your transactions will appear here once you start using Paymesh.
-
+
);
}
diff --git a/frontend/src/components/EmptyState.tsx b/frontend/src/components/EmptyState.tsx
new file mode 100644
index 0000000..c840dbe
--- /dev/null
+++ b/frontend/src/components/EmptyState.tsx
@@ -0,0 +1,49 @@
+import { type LucideIcon } from "lucide-react";
+import { cn } from "@/lib/utils";
+import { Button } from "@/components/ui/button";
+
+interface EmptyStateProps {
+ icon: LucideIcon;
+ title: string;
+ description: string;
+ action?: {
+ label: string;
+ onClick?: () => void;
+ href?: string;
+ };
+ className?: string;
+}
+
+export default function EmptyState({
+ icon: Icon,
+ title,
+ description,
+ action,
+ className,
+}: EmptyStateProps) {
+ const content = (
+
+
+
+
+
{title}
+
{description}
+ {action && (
+
+ )}
+
+ );
+
+ return content;
+}
diff --git a/frontend/src/components/TaskList.tsx b/frontend/src/components/TaskList.tsx
index 7c7ecad..f212c4f 100644
--- a/frontend/src/components/TaskList.tsx
+++ b/frontend/src/components/TaskList.tsx
@@ -4,7 +4,9 @@
import React from "react";
import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card";
import { Badge } from "@/components/ui/badge";
+import { SearchX } from "lucide-react";
import type { CompletedTask } from "@/types/task";
+import EmptyState from "@/components/EmptyState";
interface TaskListProps {
tasks: CompletedTask[];
@@ -13,10 +15,11 @@ interface TaskListProps {
export function TaskList({ tasks }: TaskListProps) {
if (tasks.length === 0) {
return (
-
-
No tasks found
-
Try adjusting your filters to see more results
-
+
);
}