"use client"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"; import { useEffect, useState } from "react"; import { Clock3Icon, UserIcon, UsersIcon } from "lucide-react"; import { Separator } from "@/components/ui/separator"; import { ProjectCard } from "@/components/projectCard"; import { getALlFundedStatusQuery, getAllBusinessTypeQuery } from "@/lib/data/dropdownQuery"; import { createSupabaseClient } from "@/lib/supabase/clientComponentClient"; import { useQuery } from "@supabase-cache-helpers/postgrest-react-query"; import { searchProjectsQuery, FilterParams, FilterProjectQueryParams } from "@/lib/data/projectQuery"; import { Input } from "@/components/ui/input"; import { Button } from "@/components/ui/button"; import Link from "next/link"; interface Project { project_id: string; project_name: string; published_time: string; project_short_description: string; card_image_url: string; project_status: { value: string; }; min_investment: number; total_investment: number; target_investment: number; investment_deadline: string; tags: { tag_name: string; }[]; business_type: { value: string; }; business_location: string; } const ProjectSection = ({ filteredProjects }: { filteredProjects: Project[] }) => { interface Tags { tag_name: string; } if (!filteredProjects) { return
No projects found!
; } return (

Deals

The deals attracting the most interest right now

{/* Block for all the deals */}
{filteredProjects.map((item, index) => ( tag.tag_name)} /> ))}
); }; const ShowFilter = ({ filterParams, clearAll }: { filterParams: FilterParams; clearAll: () => void }) => { const { searchTerm, tagsFilter, projectStatusFilter, businessTypeFilter, sortByTimeFilter } = filterParams; if (!searchTerm && !tagsFilter && !projectStatusFilter && !businessTypeFilter && !sortByTimeFilter) { return
; } if ( projectStatusFilter === "all" && businessTypeFilter === "all" && sortByTimeFilter === "all" && (!tagsFilter || tagsFilter.length === 0) ) { return
; } return (
{searchTerm && ( )} {tagsFilter && tagsFilter.map((tag: string) => ( ))} {projectStatusFilter && projectStatusFilter !== "all" && ( )} {businessTypeFilter && businessTypeFilter !== "all" && ( )} {sortByTimeFilter && sortByTimeFilter !== "all" && ( )} {/* Clear All button */}
); }; export default function Deals() { const supabase = createSupabaseClient(); const [searchTerm, setSearchTerm] = useState(""); const [searchTermVisual, setSearchTermVisual] = useState(""); const [sortByTimeFilter, setSortByTimeFilter] = useState("all"); const [businessTypeFilter, setBusinessTypeFilter] = useState("all"); const [tagFilter, setTagFilter] = useState([]); const [projectStatusFilter, setProjectStatusFilter] = useState("all"); const [page, setPage] = useState(1); const [pageSize, setPageSize] = useState(4); const filterParams: FilterParams = { searchTerm, tagsFilter: tagFilter, projectStatusFilter, businessTypeFilter, sortByTimeFilter, }; const filterProjectQueryParams: FilterProjectQueryParams = { searchTerm: "", tagsFilter: [], projectStatusFilter: "all", businessTypeFilter: "all", sortByTimeFilter: "all", page, pageSize, }; const { data: projectStatus, isLoading: isLoadingFunded, error: fundedLoadingError, } = useQuery(getALlFundedStatusQuery(supabase)); const { data: businessType, isLoading: isLoadingBusinessType, error: businessTypeLoadingError, } = useQuery(getAllBusinessTypeQuery(supabase)); const { data: projects, isLoading: isLoadingProjects, error: projectsLoadingError, } = useQuery(searchProjectsQuery(supabase, filterProjectQueryParams)); const clearAll = () => { setSearchTerm(""); setTagFilter([]); setProjectStatusFilter("all"); setBusinessTypeFilter("all"); setSortByTimeFilter("all"); }; const handlePageSizeChange = (value: number) => { setPageSize(value); setPage(1); }; useEffect(() => { setSearchTerm(searchTermVisual); }, [searchTermVisual]); return (

Investment Opportunities


Browse current investment opportunities on B2DVenture.

All companies are vetted & pass due diligence.

{/* Search Input and Filters */}
setSearchTermVisual(e.target.value)} onKeyDown={(e) => { if (e.key === "Enter") { setSearchTerm(e.currentTarget.value); } }} /> {/* Posted At Filter */} {/* Business Type Filter */} {/* Project Status Filter */}
{/* Active Filters */} {/* Project Cards Section */} {isLoadingProjects ? (
Loading...
) : projectsLoadingError ? (
Error loading projects.
) : projects ? ( ) : (
No projects found!
)} {/* Pagination Controls */}
Page Size:
); }