Skip to content

Commit 86e3ac6

Browse files
authored
Merge pull request #20 from headlines-toolkit/fix_duplicate_table_entry
Fix duplicate table entry
2 parents ac15f43 + 3be7f14 commit 86e3ac6

File tree

5 files changed

+71
-146
lines changed

5 files changed

+71
-146
lines changed

lib/content_management/bloc/content_management_bloc.dart

Lines changed: 38 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,12 @@ class ContentManagementBloc
3030
super(const ContentManagementState()) {
3131
on<ContentManagementTabChanged>(_onContentManagementTabChanged);
3232
on<LoadHeadlinesRequested>(_onLoadHeadlinesRequested);
33-
on<HeadlineAdded>(_onHeadlineAdded);
3433
on<HeadlineUpdated>(_onHeadlineUpdated);
3534
on<DeleteHeadlineRequested>(_onDeleteHeadlineRequested);
3635
on<LoadCategoriesRequested>(_onLoadCategoriesRequested);
37-
on<CategoryAdded>(_onCategoryAdded);
3836
on<CategoryUpdated>(_onCategoryUpdated);
3937
on<DeleteCategoryRequested>(_onDeleteCategoryRequested);
4038
on<LoadSourcesRequested>(_onLoadSourcesRequested);
41-
on<SourceAdded>(_onSourceAdded);
4239
on<SourceUpdated>(_onSourceUpdated);
4340
on<DeleteSourceRequested>(_onOnDeleteSourceRequested);
4441
}
@@ -92,31 +89,6 @@ class ContentManagementBloc
9289
}
9390
}
9491

95-
void _onHeadlineAdded(
96-
HeadlineAdded event,
97-
Emitter<ContentManagementState> emit,
98-
) {
99-
final updatedHeadlines = [event.headline, ...state.headlines];
100-
emit(
101-
state.copyWith(
102-
headlines: updatedHeadlines,
103-
headlinesStatus: ContentManagementStatus.success,
104-
),
105-
);
106-
}
107-
108-
void _onHeadlineUpdated(
109-
HeadlineUpdated event,
110-
Emitter<ContentManagementState> emit,
111-
) {
112-
final updatedHeadlines = List<Headline>.from(state.headlines);
113-
final index = updatedHeadlines.indexWhere((h) => h.id == event.headline.id);
114-
if (index != -1) {
115-
updatedHeadlines[index] = event.headline;
116-
emit(state.copyWith(headlines: updatedHeadlines));
117-
}
118-
}
119-
12092
Future<void> _onDeleteHeadlineRequested(
12193
DeleteHeadlineRequested event,
12294
Emitter<ContentManagementState> emit,
@@ -144,6 +116,18 @@ class ContentManagementBloc
144116
}
145117
}
146118

119+
void _onHeadlineUpdated(
120+
HeadlineUpdated event,
121+
Emitter<ContentManagementState> emit,
122+
) {
123+
final updatedHeadlines = List<Headline>.from(state.headlines);
124+
final index = updatedHeadlines.indexWhere((h) => h.id == event.headline.id);
125+
if (index != -1) {
126+
updatedHeadlines[index] = event.headline;
127+
emit(state.copyWith(headlines: updatedHeadlines));
128+
}
129+
}
130+
147131
Future<void> _onLoadCategoriesRequested(
148132
LoadCategoriesRequested event,
149133
Emitter<ContentManagementState> emit,
@@ -182,33 +166,6 @@ class ContentManagementBloc
182166
}
183167
}
184168

185-
void _onCategoryAdded(
186-
CategoryAdded event,
187-
Emitter<ContentManagementState> emit,
188-
) {
189-
final updatedCategories = [event.category, ...state.categories];
190-
emit(
191-
state.copyWith(
192-
categories: updatedCategories,
193-
categoriesStatus: ContentManagementStatus.success,
194-
),
195-
);
196-
}
197-
198-
void _onCategoryUpdated(
199-
CategoryUpdated event,
200-
Emitter<ContentManagementState> emit,
201-
) {
202-
final updatedCategories = List<Category>.from(state.categories);
203-
final index = updatedCategories.indexWhere(
204-
(c) => c.id == event.category.id,
205-
);
206-
if (index != -1) {
207-
updatedCategories[index] = event.category;
208-
emit(state.copyWith(categories: updatedCategories));
209-
}
210-
}
211-
212169
Future<void> _onDeleteCategoryRequested(
213170
DeleteCategoryRequested event,
214171
Emitter<ContentManagementState> emit,
@@ -236,6 +193,20 @@ class ContentManagementBloc
236193
}
237194
}
238195

196+
void _onCategoryUpdated(
197+
CategoryUpdated event,
198+
Emitter<ContentManagementState> emit,
199+
) {
200+
final updatedCategories = List<Category>.from(state.categories);
201+
final index = updatedCategories.indexWhere(
202+
(c) => c.id == event.category.id,
203+
);
204+
if (index != -1) {
205+
updatedCategories[index] = event.category;
206+
emit(state.copyWith(categories: updatedCategories));
207+
}
208+
}
209+
239210
Future<void> _onLoadSourcesRequested(
240211
LoadSourcesRequested event,
241212
Emitter<ContentManagementState> emit,
@@ -274,28 +245,6 @@ class ContentManagementBloc
274245
}
275246
}
276247

277-
void _onSourceAdded(SourceAdded event, Emitter<ContentManagementState> emit) {
278-
final updatedSources = [event.source, ...state.sources];
279-
emit(
280-
state.copyWith(
281-
sources: updatedSources,
282-
sourcesStatus: ContentManagementStatus.success,
283-
),
284-
);
285-
}
286-
287-
void _onSourceUpdated(
288-
SourceUpdated event,
289-
Emitter<ContentManagementState> emit,
290-
) {
291-
final updatedSources = List<Source>.from(state.sources);
292-
final index = updatedSources.indexWhere((s) => s.id == event.source.id);
293-
if (index != -1) {
294-
updatedSources[index] = event.source;
295-
emit(state.copyWith(sources: updatedSources));
296-
}
297-
}
298-
299248
Future<void> _onOnDeleteSourceRequested(
300249
DeleteSourceRequested event,
301250
Emitter<ContentManagementState> emit,
@@ -322,4 +271,16 @@ class ContentManagementBloc
322271
);
323272
}
324273
}
274+
275+
void _onSourceUpdated(
276+
SourceUpdated event,
277+
Emitter<ContentManagementState> emit,
278+
) {
279+
final updatedSources = List<Source>.from(state.sources);
280+
final index = updatedSources.indexWhere((s) => s.id == event.source.id);
281+
if (index != -1) {
282+
updatedSources[index] = event.source;
283+
emit(state.copyWith(sources: updatedSources));
284+
}
285+
}
325286
}

lib/content_management/bloc/content_management_event.dart

Lines changed: 24 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -38,18 +38,18 @@ final class LoadHeadlinesRequested extends ContentManagementEvent {
3838
List<Object?> get props => [startAfterId, limit];
3939
}
4040

41-
/// {@template headline_added}
42-
/// Event to add a new headline to the local state.
41+
/// {@template delete_headline_requested}
42+
/// Event to request deletion of a headline.
4343
/// {@endtemplate}
44-
final class HeadlineAdded extends ContentManagementEvent {
45-
/// {@macro headline_added}
46-
const HeadlineAdded(this.headline);
44+
final class DeleteHeadlineRequested extends ContentManagementEvent {
45+
/// {@macro delete_headline_requested}
46+
const DeleteHeadlineRequested(this.id);
4747

48-
/// The headline that was added.
49-
final Headline headline;
48+
/// The ID of the headline to delete.
49+
final String id;
5050

5151
@override
52-
List<Object?> get props => [headline];
52+
List<Object?> get props => [id];
5353
}
5454

5555
/// {@template headline_updated}
@@ -66,20 +66,6 @@ final class HeadlineUpdated extends ContentManagementEvent {
6666
List<Object?> get props => [headline];
6767
}
6868

69-
/// {@template delete_headline_requested}
70-
/// Event to request deletion of a headline.
71-
/// {@endtemplate}
72-
final class DeleteHeadlineRequested extends ContentManagementEvent {
73-
/// {@macro delete_headline_requested}
74-
const DeleteHeadlineRequested(this.id);
75-
76-
/// The ID of the headline to delete.
77-
final String id;
78-
79-
@override
80-
List<Object?> get props => [id];
81-
}
82-
8369
/// {@template load_categories_requested}
8470
/// Event to request loading of categories.
8571
/// {@endtemplate}
@@ -97,18 +83,18 @@ final class LoadCategoriesRequested extends ContentManagementEvent {
9783
List<Object?> get props => [startAfterId, limit];
9884
}
9985

100-
/// {@template category_added}
101-
/// Event to add a new category to the local state.
86+
/// {@template delete_category_requested}
87+
/// Event to request deletion of a category.
10288
/// {@endtemplate}
103-
final class CategoryAdded extends ContentManagementEvent {
104-
/// {@macro category_added}
105-
const CategoryAdded(this.category);
89+
final class DeleteCategoryRequested extends ContentManagementEvent {
90+
/// {@macro delete_category_requested}
91+
const DeleteCategoryRequested(this.id);
10692

107-
/// The category that was added.
108-
final Category category;
93+
/// The ID of the category to delete.
94+
final String id;
10995

11096
@override
111-
List<Object?> get props => [category];
97+
List<Object?> get props => [id];
11298
}
11399

114100
/// {@template category_updated}
@@ -125,20 +111,6 @@ final class CategoryUpdated extends ContentManagementEvent {
125111
List<Object?> get props => [category];
126112
}
127113

128-
/// {@template delete_category_requested}
129-
/// Event to request deletion of a category.
130-
/// {@endtemplate}
131-
final class DeleteCategoryRequested extends ContentManagementEvent {
132-
/// {@macro delete_category_requested}
133-
const DeleteCategoryRequested(this.id);
134-
135-
/// The ID of the category to delete.
136-
final String id;
137-
138-
@override
139-
List<Object?> get props => [id];
140-
}
141-
142114
/// {@template load_sources_requested}
143115
/// Event to request loading of sources.
144116
/// {@endtemplate}
@@ -156,18 +128,18 @@ final class LoadSourcesRequested extends ContentManagementEvent {
156128
List<Object?> get props => [startAfterId, limit];
157129
}
158130

159-
/// {@template source_added}
160-
/// Event to add a new source to the local state.
131+
/// {@template delete_source_requested}
132+
/// Event to request deletion of a source.
161133
/// {@endtemplate}
162-
final class SourceAdded extends ContentManagementEvent {
163-
/// {@macro source_added}
164-
const SourceAdded(this.source);
134+
final class DeleteSourceRequested extends ContentManagementEvent {
135+
/// {@macro delete_source_requested}
136+
const DeleteSourceRequested(this.id);
165137

166-
/// The source that was added.
167-
final Source source;
138+
/// The ID of the source to delete.
139+
final String id;
168140

169141
@override
170-
List<Object?> get props => [source];
142+
List<Object?> get props => [id];
171143
}
172144

173145
/// {@template source_updated}
@@ -183,17 +155,3 @@ final class SourceUpdated extends ContentManagementEvent {
183155
@override
184156
List<Object?> get props => [source];
185157
}
186-
187-
/// {@template delete_source_requested}
188-
/// Event to request deletion of a source.
189-
/// {@endtemplate}
190-
final class DeleteSourceRequested extends ContentManagementEvent {
191-
/// {@macro delete_source_requested}
192-
const DeleteSourceRequested(this.id);
193-
194-
/// The ID of the source to delete.
195-
final String id;
196-
197-
@override
198-
List<Object?> get props => [id];
199-
}

lib/content_management/view/create_category_page.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart';
44
import 'package:ht_dashboard/content_management/bloc/content_management_bloc.dart';
55
import 'package:ht_dashboard/content_management/bloc/create_category/create_category_bloc.dart';
66
import 'package:ht_dashboard/l10n/l10n.dart';
7+
import 'package:ht_dashboard/shared/constants/pagination_constants.dart';
78
import 'package:ht_dashboard/shared/shared.dart';
89
import 'package:ht_data_repository/ht_data_repository.dart';
910
import 'package:ht_shared/ht_shared.dart';
@@ -81,7 +82,8 @@ class _CreateCategoryViewState extends State<_CreateCategoryView> {
8182
SnackBar(content: Text(l10n.categoryCreatedSuccessfully)),
8283
);
8384
context.read<ContentManagementBloc>().add(
84-
CategoryAdded(state.createdCategory!),
85+
// Refresh the list to show the new category
86+
const LoadCategoriesRequested(limit: kDefaultRowsPerPage),
8587
);
8688
context.pop();
8789
}

lib/content_management/view/create_headline_page.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart';
44
import 'package:ht_dashboard/content_management/bloc/content_management_bloc.dart';
55
import 'package:ht_dashboard/content_management/bloc/create_headline/create_headline_bloc.dart';
66
import 'package:ht_dashboard/l10n/l10n.dart';
7+
import 'package:ht_dashboard/shared/constants/pagination_constants.dart';
78
import 'package:ht_dashboard/shared/shared.dart';
89
import 'package:ht_data_repository/ht_data_repository.dart';
910
import 'package:ht_shared/ht_shared.dart';
@@ -83,7 +84,8 @@ class _CreateHeadlineViewState extends State<_CreateHeadlineView> {
8384
SnackBar(content: Text(l10n.headlineCreatedSuccessfully)),
8485
);
8586
context.read<ContentManagementBloc>().add(
86-
HeadlineAdded(state.createdHeadline!),
87+
// Refresh the list to show the new headline
88+
const LoadHeadlinesRequested(limit: kDefaultRowsPerPage),
8789
);
8890
context.pop();
8991
}

lib/content_management/view/create_source_page.dart

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import 'package:ht_dashboard/content_management/bloc/content_management_bloc.dar
55
import 'package:ht_dashboard/content_management/bloc/create_source/create_source_bloc.dart';
66
import 'package:ht_dashboard/content_management/bloc/edit_source/edit_source_bloc.dart';
77
import 'package:ht_dashboard/l10n/l10n.dart';
8+
import 'package:ht_dashboard/shared/constants/pagination_constants.dart';
89
import 'package:ht_dashboard/shared/shared.dart';
910
import 'package:ht_data_repository/ht_data_repository.dart';
1011
import 'package:ht_shared/ht_shared.dart';
@@ -83,7 +84,8 @@ class _CreateSourceViewState extends State<_CreateSourceView> {
8384
SnackBar(content: Text(l10n.sourceCreatedSuccessfully)),
8485
);
8586
context.read<ContentManagementBloc>().add(
86-
SourceAdded(state.createdSource!),
87+
// Refresh the list to show the new source
88+
const LoadSourcesRequested(limit: kDefaultRowsPerPage),
8789
);
8890
context.pop();
8991
}

0 commit comments

Comments
 (0)