"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:
);
}