mirror of
https://github.com/CompassConnections/Compass.git
synced 2026-03-02 13:58:18 -05:00
Add age filtering
This commit is contained in:
@@ -6,6 +6,8 @@ export async function GET(request: Request) {
|
||||
const url = new URL(request.url);
|
||||
const page = parseInt(url.searchParams.get("page") || "1");
|
||||
const gender = url.searchParams.get("gender");
|
||||
const minAge = url.searchParams.get("minAge");
|
||||
const maxAge = url.searchParams.get("maxAge");
|
||||
const interests = url.searchParams.get("interests")?.split(",").filter(Boolean) || [];
|
||||
const causeAreas = url.searchParams.get("causeAreas")?.split(",").filter(Boolean) || [];
|
||||
const searchQuery = url.searchParams.get("search") || "";
|
||||
@@ -28,6 +30,23 @@ export async function GET(request: Request) {
|
||||
};
|
||||
}
|
||||
|
||||
// Add age filtering
|
||||
const currentYear = new Date().getFullYear();
|
||||
if (minAge || maxAge) {
|
||||
where.profile = {
|
||||
...where.profile,
|
||||
birthYear: {}
|
||||
};
|
||||
|
||||
if (minAge) {
|
||||
where.profile.birthYear.lte = currentYear - parseInt(minAge);
|
||||
}
|
||||
|
||||
if (maxAge) {
|
||||
where.profile.birthYear.gte = currentYear - parseInt(maxAge);
|
||||
}
|
||||
}
|
||||
|
||||
// OR
|
||||
// if (interests.length > 0) {
|
||||
// where.profile = {
|
||||
|
||||
@@ -9,6 +9,8 @@ interface FilterProps {
|
||||
interests: string[];
|
||||
causeAreas: string[];
|
||||
searchQuery: string;
|
||||
minAge?: number;
|
||||
maxAge?: number;
|
||||
};
|
||||
onFilterChange: (key: string, value: any) => void;
|
||||
onShowFilters: (value: boolean) => void;
|
||||
@@ -134,11 +136,35 @@ export function ProfileFilters({filters, onFilterChange, onShowFilters, onToggle
|
||||
))}
|
||||
</select>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-sm font-medium text-gray-700 dark:text-white mb-1">Min Age</label>
|
||||
<input
|
||||
type="number"
|
||||
min="18"
|
||||
max="100"
|
||||
className="w-full p-2 border rounded-lg"
|
||||
value={filters.minAge || ''}
|
||||
onChange={(e) => onFilterChange('minAge', e.target.value ? parseInt(e.target.value) : undefined)}
|
||||
placeholder="Min"
|
||||
/>
|
||||
</div>
|
||||
<div>
|
||||
<label className="block text-sm font-medium text-gray-700 dark:text-white mb-1">Max Age</label>
|
||||
<input
|
||||
type="number"
|
||||
min="18"
|
||||
max="100"
|
||||
className="w-full p-2 border rounded-lg"
|
||||
value={filters.maxAge || ''}
|
||||
onChange={(e) => onFilterChange('maxAge', e.target.value ? parseInt(e.target.value) : undefined)}
|
||||
placeholder="Max"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="relative" ref={dropdownRef}>
|
||||
<label className="block text-sm font-medium text-gray-700 dark:text-white mb-2">
|
||||
Interests
|
||||
Core Interests
|
||||
</label>
|
||||
<div className="relative">
|
||||
<div className="flex items-center border border-gray-300 rounded-md shadow-sm">
|
||||
|
||||
@@ -19,6 +19,8 @@ export default function ProfilePage() {
|
||||
const [images, setImages] = useState<string[]>([])
|
||||
const [filters, setFilters] = useState({
|
||||
gender: '',
|
||||
minAge: null,
|
||||
maxAge: null,
|
||||
interests: [] as string[],
|
||||
causeAreas: [] as string[],
|
||||
searchQuery: '',
|
||||
@@ -43,6 +45,8 @@ export default function ProfilePage() {
|
||||
const params = new URLSearchParams();
|
||||
|
||||
if (filters.gender) params.append('gender', filters.gender);
|
||||
if (filters.minAge) params.append('minAge', filters.minAge);
|
||||
if (filters.maxAge) params.append('maxAge', filters.maxAge);
|
||||
if (filters.interests.length > 0) params.append('interests', filters.interests.join(','));
|
||||
if (filters.causeAreas.length > 0) params.append('causeAreas', filters.causeAreas.join(','));
|
||||
if (filters.searchQuery) params.append('search', filters.searchQuery);
|
||||
|
||||
Reference in New Issue
Block a user