feat: Implement dynamic filtering for agent search by adding a filters parameter to the search service and utilizing it in the profiles page.
This commit is contained in:
@@ -326,6 +326,18 @@ function ProfilesPageContent() {
|
|||||||
params.city = location;
|
params.city = location;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Add dynamic profile field filters
|
||||||
|
const activeFilters = Object.entries(filters).reduce((acc, [key, values]) => {
|
||||||
|
if (values && values.length > 0) {
|
||||||
|
acc[key] = values;
|
||||||
|
}
|
||||||
|
return acc;
|
||||||
|
}, {} as Record<string, string[]>);
|
||||||
|
|
||||||
|
if (Object.keys(activeFilters).length > 0) {
|
||||||
|
params.filters = activeFilters;
|
||||||
|
}
|
||||||
|
|
||||||
const response = await agentsService.searchAgents(params);
|
const response = await agentsService.searchAgents(params);
|
||||||
setAgents(response.data);
|
setAgents(response.data);
|
||||||
setTotalPages(response.totalPages);
|
setTotalPages(response.totalPages);
|
||||||
@@ -336,7 +348,7 @@ function ProfilesPageContent() {
|
|||||||
} finally {
|
} finally {
|
||||||
setLoading(false);
|
setLoading(false);
|
||||||
}
|
}
|
||||||
}, [currentPage, searchQuery, activeTypeId, searchParams]);
|
}, [currentPage, searchQuery, activeTypeId, searchParams, filters]);
|
||||||
|
|
||||||
// Fetch agents when filters change (only after initialization)
|
// Fetch agents when filters change (only after initialization)
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ export interface SearchAgentsParams {
|
|||||||
limit?: number;
|
limit?: number;
|
||||||
sortBy?: 'createdAt' | 'averageRating' | 'totalReviews' | 'firstName';
|
sortBy?: 'createdAt' | 'averageRating' | 'totalReviews' | 'firstName';
|
||||||
sortOrder?: 'asc' | 'desc';
|
sortOrder?: 'asc' | 'desc';
|
||||||
|
filters?: Record<string, string[]>;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Public agent listing response
|
// Public agent listing response
|
||||||
@@ -173,6 +174,9 @@ class AgentsService {
|
|||||||
if (params.limit) queryParams.set('limit', String(params.limit));
|
if (params.limit) queryParams.set('limit', String(params.limit));
|
||||||
if (params.sortBy) queryParams.set('sortBy', params.sortBy);
|
if (params.sortBy) queryParams.set('sortBy', params.sortBy);
|
||||||
if (params.sortOrder) queryParams.set('sortOrder', params.sortOrder);
|
if (params.sortOrder) queryParams.set('sortOrder', params.sortOrder);
|
||||||
|
if (params.filters && Object.keys(params.filters).length > 0) {
|
||||||
|
queryParams.set('filters', JSON.stringify(params.filters));
|
||||||
|
}
|
||||||
|
|
||||||
const queryString = queryParams.toString();
|
const queryString = queryParams.toString();
|
||||||
const url = queryString ? `${this.basePath}?${queryString}` : this.basePath;
|
const url = queryString ? `${this.basePath}?${queryString}` : this.basePath;
|
||||||
|
|||||||
Reference in New Issue
Block a user