diff --git a/src/app/admin/page.tsx b/src/app/admin/page.tsx index 0a381fa..be9b3f8 100644 --- a/src/app/admin/page.tsx +++ b/src/app/admin/page.tsx @@ -7,6 +7,78 @@ import Link from "next/link"; import { FolderOpenDot } from "lucide-react"; import { getAllBusinessApplicationQuery } from "@/lib/data/applicationQuery"; import { BusinessActionButtons } from "./BusinessActionButtons"; +import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"; + +interface ApplicationData { + id: any; + user_id: any; + username: any; + business_type_id: any; + business_type_value: any; + project_application_id: any; + business_name: any; + created_at: any; + is_in_us: any; + is_for_sale: any; + pitch_deck_url: any; + community_size: any; + is_generating_revenue: any; + money_raised_to_date: any; + location: any; + status: any; +} + +function ApplicationTable({ applications }: { applications: ApplicationData[] }) { + if (!applications || applications.length === 0) { + return ( + + + No business applications found + + + ); + } + + return applications.map((application: ApplicationData) => ( + + {application.business_name} + + + {application.username} + + + + {application.pitch_deck_url && ( + + {application.pitch_deck_url} + + )} + + + + + + + + + + + {application.community_size} + {application.money_raised_to_date} + {application.location} + + {application.project_application_id && ( + + + + )} + + + + + + )); +} export default async function AdminPage() { const client = createSupabaseClient(); @@ -18,11 +90,7 @@ export default async function AdminPage() { const uid = userData.user!.id; const { data: roleData, error: roleDataError } = await getUserRole(client, uid); - if (roleDataError) { - redirect("/"); - } - - if (roleData!.role != "admin") { + if (roleDataError || roleData!.role != "admin") { redirect("/"); } @@ -33,77 +101,53 @@ export default async function AdminPage() { console.log(businessApplicationError); } + const pendingApplications = businessApplicationData?.filter((app) => app.status === "pending") || []; + const approvedApplications = businessApplicationData?.filter((app) => app.status === "approve") || []; + const rejectedApplications = businessApplicationData?.filter((app) => app.status === "rejecte") || []; + return (
-
- - A list of business applications. - - - Business Name - User Account - Pitch Deck URL - Is In US? - Is For Sale? - Generate Revenue - Community Size - Money raised to date - Location - Project - - - - - {businessApplicationData && businessApplicationData.length > 0 ? ( - businessApplicationData.map((application) => ( - - {application.business_name} - - - {application.username} - - - - {application.pitch_deck_url && ( - - {application.pitch_deck_url} - - )} - - - - - - - - - - - {application.community_size} - {application.money_raised_to_date} - {application.location} - - {application.project_application_id && ( - - - - )} - - - - + + + Pending ({pendingApplications.length}) + Approved ({approvedApplications.length}) + Rejected ({rejectedApplications.length}) + + + {["pending", "approved", "rejected"].map((status) => ( + +
+ {status.charAt(0).toUpperCase() + status.slice(1)} business applications + + + Business Name + User Account + Pitch Deck URL + Is In US? + Is For Sale? + Generate Revenue + Community Size + Money raised to date + Location + Project + Actions - )) - ) : ( - - - No business applications found - - - )} - -
-
+ + + + + + + ))} +
); } diff --git a/src/lib/data/applicationQuery.ts b/src/lib/data/applicationQuery.ts new file mode 100644 index 0000000..99e614b --- /dev/null +++ b/src/lib/data/applicationQuery.ts @@ -0,0 +1,28 @@ +import { SupabaseClient } from "@supabase/supabase-js"; + +export const getAllBusinessApplicationQuery = (client: SupabaseClient) => { + return client.from("business_application").select( + ` + id, + ...user_id!inner ( + user_id:id, + username + ), + ...business_type_id!inner ( + business_type_id:id, + business_type_value:value + ), + project_application_id, + business_name, + created_at, + is_in_us, + is_for_sale, + pitch_deck_url, + community_size, + is_generating_revenue, + money_raised_to_date, + location, + status + ` + ); +};