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

-
+ ); }