Skip to content

Commit 86ca36a

Browse files
committed
feat(feed): support list-based filters
- Update filter params to lists - Update event and state classes
1 parent 0839e90 commit 86ca36a

File tree

1 file changed

+34
-25
lines changed

1 file changed

+34
-25
lines changed

lib/headlines-feed/bloc/headlines_feed_bloc.dart

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,12 @@ import 'dart:async';
33
import 'package:bloc/bloc.dart';
44
import 'package:bloc_concurrency/bloc_concurrency.dart';
55
import 'package:equatable/equatable.dart';
6+
import 'package:ht_categories_client/ht_categories_client.dart';
7+
import 'package:ht_countries_client/ht_countries_client.dart';
68
import 'package:ht_headlines_client/ht_headlines_client.dart'; // Import for Headline and Exceptions
79
import 'package:ht_headlines_repository/ht_headlines_repository.dart';
810
import 'package:ht_main/headlines-feed/models/headline_filter.dart';
11+
import 'package:ht_sources_client/ht_sources_client.dart';
912

1013
part 'headlines_feed_event.dart';
1114
part 'headlines_feed_state.dart';
@@ -42,23 +45,26 @@ class HeadlinesFeedBloc extends Bloc<HeadlinesFeedEvent, HeadlinesFeedState> {
4245
) async {
4346
emit(HeadlinesFeedLoading());
4447
try {
48+
// Use list-based filters from the event
4549
final response = await _headlinesRepository.getHeadlines(
4650
limit: _headlinesFetchLimit,
47-
category: event.category, // Pass category directly
48-
source: event.source, // Pass source directly
49-
eventCountry: event.eventCountry, // Pass eventCountry directly
51+
categories: event.categories,
52+
sources: event.sources,
53+
eventCountries: event.eventCountries,
5054
);
5155
final newFilter =
5256
(state is HeadlinesFeedLoaded)
5357
? (state as HeadlinesFeedLoaded).filter.copyWith(
54-
category: event.category,
55-
source: event.source,
56-
eventCountry: event.eventCountry,
58+
// Update copyWith call
59+
categories: event.categories,
60+
sources: event.sources,
61+
eventCountries: event.eventCountries,
5762
)
5863
: HeadlineFilter(
59-
category: event.category,
60-
source: event.source,
61-
eventCountry: event.eventCountry,
64+
// Update constructor call
65+
categories: event.categories,
66+
sources: event.sources,
67+
eventCountries: event.eventCountries,
6268
);
6369
emit(
6470
HeadlinesFeedLoaded(
@@ -89,12 +95,13 @@ class HeadlinesFeedBloc extends Bloc<HeadlinesFeedEvent, HeadlinesFeedState> {
8995
final currentState = state as HeadlinesFeedLoaded;
9096
emit(HeadlinesFeedLoadingSilently());
9197
try {
98+
// Use list-based filters from the current state's filter
9299
final response = await _headlinesRepository.getHeadlines(
93100
limit: _headlinesFetchLimit,
94101
startAfterId: currentState.cursor,
95-
category: currentState.filter.category, // Use existing filter
96-
source: currentState.filter.source, // Use existing filter
97-
eventCountry: currentState.filter.eventCountry, // Use existing filter
102+
categories: currentState.filter.categories,
103+
sources: currentState.filter.sources,
104+
eventCountries: currentState.filter.eventCountries,
98105
);
99106
emit(
100107
HeadlinesFeedLoaded(
@@ -112,19 +119,20 @@ class HeadlinesFeedBloc extends Bloc<HeadlinesFeedEvent, HeadlinesFeedState> {
112119
} else {
113120
emit(HeadlinesFeedLoading());
114121
try {
122+
// Use list-based filters from the current state's filter (if loaded)
115123
final response = await _headlinesRepository.getHeadlines(
116124
limit: _headlinesFetchLimit,
117-
category:
125+
categories:
118126
state is HeadlinesFeedLoaded
119-
? (state as HeadlinesFeedLoaded).filter.category
127+
? (state as HeadlinesFeedLoaded).filter.categories
120128
: null,
121-
source:
129+
sources:
122130
state is HeadlinesFeedLoaded
123-
? (state as HeadlinesFeedLoaded).filter.source
131+
? (state as HeadlinesFeedLoaded).filter.sources
124132
: null,
125-
eventCountry:
133+
eventCountries:
126134
state is HeadlinesFeedLoaded
127-
? (state as HeadlinesFeedLoaded).filter.eventCountry
135+
? (state as HeadlinesFeedLoaded).filter.eventCountries
128136
: null,
129137
);
130138
emit(
@@ -160,19 +168,20 @@ class HeadlinesFeedBloc extends Bloc<HeadlinesFeedEvent, HeadlinesFeedState> {
160168
) async {
161169
emit(HeadlinesFeedLoading());
162170
try {
171+
// Use list-based filters from the current state's filter (if loaded)
163172
final response = await _headlinesRepository.getHeadlines(
164-
limit: 20,
165-
category:
173+
limit: 20, // Consider using _headlinesFetchLimit here too?
174+
categories:
166175
state is HeadlinesFeedLoaded
167-
? (state as HeadlinesFeedLoaded).filter.category
176+
? (state as HeadlinesFeedLoaded).filter.categories
168177
: null,
169-
source:
178+
sources:
170179
state is HeadlinesFeedLoaded
171-
? (state as HeadlinesFeedLoaded).filter.source
180+
? (state as HeadlinesFeedLoaded).filter.sources
172181
: null,
173-
eventCountry:
182+
eventCountries:
174183
state is HeadlinesFeedLoaded
175-
? (state as HeadlinesFeedLoaded).filter.eventCountry
184+
? (state as HeadlinesFeedLoaded).filter.eventCountries
176185
: null,
177186
);
178187
emit(

0 commit comments

Comments
 (0)