diff --git a/lib/features/agents/data/agents_repository.dart b/lib/features/agents/data/agents_repository.dart index 6bdbfb9..4c84d6f 100644 --- a/lib/features/agents/data/agents_repository.dart +++ b/lib/features/agents/data/agents_repository.dart @@ -89,10 +89,16 @@ class AgentsRepository { } /// Get filterable profile fields: GET /profile-fields/filterable + /// When `agentTypeId` is provided, backend scopes filters to that agent type + globals. /// Response: { success, data: [...] } - Future> getFilterableFields() async { + Future> getFilterableFields({String? agentTypeId}) async { try { - final response = await _dio.get(ApiConstants.filterableFields); + final response = await _dio.get( + ApiConstants.filterableFields, + queryParameters: agentTypeId != null && agentTypeId.isNotEmpty + ? {'agentTypeId': agentTypeId} + : null, + ); final data = response.data['data'] as List; return data .map((e) => FilterableField.fromJson(e as Map)) diff --git a/lib/features/agents/presentation/providers/search_agents_provider.dart b/lib/features/agents/presentation/providers/search_agents_provider.dart index 2dd385d..e9e1142 100644 --- a/lib/features/agents/presentation/providers/search_agents_provider.dart +++ b/lib/features/agents/presentation/providers/search_agents_provider.dart @@ -78,7 +78,7 @@ class SearchAgentsNotifier extends StateNotifier { try { final results = await Future.wait([ _repository.getAgentTypes(), - _repository.getFilterableFields(), + _repository.getFilterableFields(agentTypeId: state.selectedAgentTypeId), ]); if (!mounted) return; state = state.copyWith( @@ -92,6 +92,28 @@ class SearchAgentsNotifier extends StateNotifier { } } + /// Re-fetch filterable fields scoped to the currently selected agent type. + /// Called whenever the user switches agent types so irrelevant filters disappear. + Future _refreshFilterFields(String? agentTypeId) async { + try { + final fields = + await _repository.getFilterableFields(agentTypeId: agentTypeId); + if (!mounted) return; + // Drop any active filter slugs that no longer exist in the new list. + final validSlugs = fields.map((f) => f.slug).toSet(); + final culled = >{}; + state.activeFilters.forEach((k, v) { + if (validSlugs.contains(k)) culled[k] = v; + }); + state = state.copyWith( + filterFields: fields, + activeFilters: culled, + ); + } catch (_) { + // Keep existing fields if the refresh fails; user can retry. + } + } + Future _fetchAgents({required int page, bool append = false}) async { try { final response = await _repository.searchAgents( @@ -135,6 +157,7 @@ class SearchAgentsNotifier extends StateNotifier { isLoading: true, currentPage: 1, ); + _refreshFilterFields(agentTypeId); _fetchAgents(page: 1); }