diff --git a/app/components/dropdown.tsx b/app/components/dropdown.tsx
new file mode 100644
index 00000000..a89652d9
--- /dev/null
+++ b/app/components/dropdown.tsx
@@ -0,0 +1,55 @@
+'use client';
+
+type DropdownProps = {
+ id: string
+ options?: string[]
+ value: string
+ onChange: (id: string, value: string) => void
+ onFocus?: (id: string) => void
+ onKeyDown?: (id: string, key: string) => void
+ onClick?: (id: string) => void
+ setShowDropdown: (id: boolean) => void
+ showDropdown: boolean
+}
+
+export default function Dropdown(
+ {
+ id,
+ options,
+ value,
+ onChange,
+ onFocus,
+ onKeyDown,
+ setShowDropdown,
+ showDropdown,
+ }: DropdownProps
+) {
+ return (
+
+
+
onChange(id, e.target.value)}
+ onFocus={() => onFocus?.(id)}
+ onKeyDown={(e) => onKeyDown?.(id, e.key)}
+ className="flex-1 min-w-0 block w-full px-3 py-2 rounded-l-md border-0 focus:ring-blue-500 focus:border-blue-500 sm:text-sm"
+ placeholder="Type to search"
+ />
+
+
+
+
+ )
+}
diff --git a/app/profiles/ProfileFilters.tsx b/app/profiles/ProfileFilters.tsx
index ea085b89..b7fab739 100644
--- a/app/profiles/ProfileFilters.tsx
+++ b/app/profiles/ProfileFilters.tsx
@@ -2,6 +2,7 @@
import {useEffect, useRef, useState} from 'react';
import {Gender} from "@prisma/client";
+import Dropdown from "@/app/components/dropdown";
interface FilterProps {
filters: {
@@ -22,6 +23,7 @@ export function ProfileFilters({filters, onFilterChange, onShowFilters, onToggle
const [showFilters, setShowFilters] = useState(true);
const [allCauseAreas, setAllCauseAreas] = useState<{ id: string, name: string }[]>([]);
const [allInterests, setAllInterests] = useState<{ id: string, name: string }[]>([]);
+ const [allConnections, setAllConnections] = useState<{ id: string, name: string }[]>([]);
const [selectedInterests, setSelectedInterests] = useState>(new Set());
const dropdownRef = useRef(null);
const [showDropdown, setShowDropdown] = useState(false);
@@ -35,8 +37,10 @@ export function ProfileFilters({filters, onFilterChange, onShowFilters, onToggle
const data = await res.json();
setAllInterests(data.interests || []);
setAllCauseAreas(data.causeAreas || []);
+ setAllConnections(data.desiredConnections || []);
console.log('All interests:', data.interests);
console.log('All cause areas:', data.causeAreas);
+ console.log('All Connections:', data.desiredConnections);
// console.log('Gender', Gender);
}
} catch (error) {
@@ -72,12 +76,123 @@ export function ProfileFilters({filters, onFilterChange, onShowFilters, onToggle
});
};
- const handleKeyDown = (e: React.KeyboardEvent) => {
- if (e.key === 'Escape') {
+ const handleKeyDown = (key: string) => {
+ if (key === 'Escape') {
setShowDropdown(false);
}
};
+ const dropdownConfig = [
+ {id: "interests",},
+ ]
+
+ const [values, setValues] = useState>({
+ v: "",
+ // showDropdown: false,
+ })
+
+ const handleChange = (id: string, value: string) => {
+ setValues((prev) => ({ ...prev, [id]: value }))
+ }
+
+ const handleFocus = (id: string) => {
+ console.log(`Focused: ${id}`)
+ setShowDropdown[id](true)
+ }
+
+
+ function getDrowDown() {
+ return (
+
+
+
+
+ {dropdownConfig.map(({ id }) => (
+
setShowDropdown[id]}
+ showDropdown={}
+ />
+ ))}
+
+ {(showDropdown) && (
+
+ {/* Filtered interests */}
+ {allInterests
+ .filter(interest =>
+ interest.name.toLowerCase().includes(newInterest.toLowerCase())
+ )
+ .map((interest) => (
+
{
+ onToggleFilter('interests', interest.name);
+ toggleInterest(interest.id);
+ // setNewInterest('');
+ }}
+ >
+
+ {
+ }}
+ onClick={(e) => {
+ e.stopPropagation();
+ }}
+ />
+
+ {interest.name}
+
+
+
+ ))}
+
+ )}
+
+
+ {Array.from(selectedInterests).map(interestId => {
+ const interest = allInterests.find(i => i.id === interestId);
+ if (!interest) return null;
+ return (
+
+ {interest.name}
+
+
+ );
+ })}
+
+
+ )
+ }
return (
@@ -104,8 +219,9 @@ export function ProfileFilters({filters, onFilterChange, onShowFilters, onToggle
className="absolute right-3 top-1/2 transform -translate-y-1/2 text-gray-400 hover:text-gray-600"
type="button"
>
-
-
-
-
-
-
setNewInterest(e.target.value)}
- onFocus={() => setShowDropdown(true)}
- onKeyDown={handleKeyDown}
- className="flex-1 min-w-0 block w-full px-3 py-2 rounded-l-md border-0 focus:ring-blue-500 focus:border-blue-500 sm:text-sm"
- placeholder="Type to search"
- />
-
-
-
-
- {(showDropdown) && (
-
- {/* Filtered interests */}
- {allInterests
- .filter(interest =>
- interest.name.toLowerCase().includes(newInterest.toLowerCase())
- )
- .map((interest) => (
-
{
- onToggleFilter('interests', interest.name);
- toggleInterest(interest.id);
- // setNewInterest('');
- }}
- >
-
- {
- }}
- onClick={(e) => {
- e.stopPropagation();
- }}
- />
-
- {interest.name}
-
-
-
- ))}
-
- )}
-
-
-
- {/* Selected interests */}
-
- {Array.from(selectedInterests).map(interestId => {
- const interest = allInterests.find(i => i.id === interestId);
- if (!interest) return null;
- return (
-
- {interest.name}
-
-
- );
- })}
-
+ {getDrowDown()}
{/**/}
{/* */}