diff --git a/lib/content_management/bloc/content_management_bloc.dart b/lib/content_management/bloc/content_management_bloc.dart index 41af4a1..cad4988 100644 --- a/lib/content_management/bloc/content_management_bloc.dart +++ b/lib/content_management/bloc/content_management_bloc.dart @@ -30,15 +30,12 @@ class ContentManagementBloc super(const ContentManagementState()) { on(_onContentManagementTabChanged); on(_onLoadHeadlinesRequested); - on(_onHeadlineAdded); on(_onHeadlineUpdated); on(_onDeleteHeadlineRequested); on(_onLoadCategoriesRequested); - on(_onCategoryAdded); on(_onCategoryUpdated); on(_onDeleteCategoryRequested); on(_onLoadSourcesRequested); - on(_onSourceAdded); on(_onSourceUpdated); on(_onOnDeleteSourceRequested); } @@ -92,31 +89,6 @@ class ContentManagementBloc } } - void _onHeadlineAdded( - HeadlineAdded event, - Emitter emit, - ) { - final updatedHeadlines = [event.headline, ...state.headlines]; - emit( - state.copyWith( - headlines: updatedHeadlines, - headlinesStatus: ContentManagementStatus.success, - ), - ); - } - - void _onHeadlineUpdated( - HeadlineUpdated event, - Emitter emit, - ) { - final updatedHeadlines = List.from(state.headlines); - final index = updatedHeadlines.indexWhere((h) => h.id == event.headline.id); - if (index != -1) { - updatedHeadlines[index] = event.headline; - emit(state.copyWith(headlines: updatedHeadlines)); - } - } - Future _onDeleteHeadlineRequested( DeleteHeadlineRequested event, Emitter emit, @@ -144,6 +116,18 @@ class ContentManagementBloc } } + void _onHeadlineUpdated( + HeadlineUpdated event, + Emitter emit, + ) { + final updatedHeadlines = List.from(state.headlines); + final index = updatedHeadlines.indexWhere((h) => h.id == event.headline.id); + if (index != -1) { + updatedHeadlines[index] = event.headline; + emit(state.copyWith(headlines: updatedHeadlines)); + } + } + Future _onLoadCategoriesRequested( LoadCategoriesRequested event, Emitter emit, @@ -182,33 +166,6 @@ class ContentManagementBloc } } - void _onCategoryAdded( - CategoryAdded event, - Emitter emit, - ) { - final updatedCategories = [event.category, ...state.categories]; - emit( - state.copyWith( - categories: updatedCategories, - categoriesStatus: ContentManagementStatus.success, - ), - ); - } - - void _onCategoryUpdated( - CategoryUpdated event, - Emitter emit, - ) { - final updatedCategories = List.from(state.categories); - final index = updatedCategories.indexWhere( - (c) => c.id == event.category.id, - ); - if (index != -1) { - updatedCategories[index] = event.category; - emit(state.copyWith(categories: updatedCategories)); - } - } - Future _onDeleteCategoryRequested( DeleteCategoryRequested event, Emitter emit, @@ -236,6 +193,20 @@ class ContentManagementBloc } } + void _onCategoryUpdated( + CategoryUpdated event, + Emitter emit, + ) { + final updatedCategories = List.from(state.categories); + final index = updatedCategories.indexWhere( + (c) => c.id == event.category.id, + ); + if (index != -1) { + updatedCategories[index] = event.category; + emit(state.copyWith(categories: updatedCategories)); + } + } + Future _onLoadSourcesRequested( LoadSourcesRequested event, Emitter emit, @@ -274,28 +245,6 @@ class ContentManagementBloc } } - void _onSourceAdded(SourceAdded event, Emitter emit) { - final updatedSources = [event.source, ...state.sources]; - emit( - state.copyWith( - sources: updatedSources, - sourcesStatus: ContentManagementStatus.success, - ), - ); - } - - void _onSourceUpdated( - SourceUpdated event, - Emitter emit, - ) { - final updatedSources = List.from(state.sources); - final index = updatedSources.indexWhere((s) => s.id == event.source.id); - if (index != -1) { - updatedSources[index] = event.source; - emit(state.copyWith(sources: updatedSources)); - } - } - Future _onOnDeleteSourceRequested( DeleteSourceRequested event, Emitter emit, @@ -322,4 +271,16 @@ class ContentManagementBloc ); } } + + void _onSourceUpdated( + SourceUpdated event, + Emitter emit, + ) { + final updatedSources = List.from(state.sources); + final index = updatedSources.indexWhere((s) => s.id == event.source.id); + if (index != -1) { + updatedSources[index] = event.source; + emit(state.copyWith(sources: updatedSources)); + } + } } diff --git a/lib/content_management/bloc/content_management_event.dart b/lib/content_management/bloc/content_management_event.dart index 0fff533..be4a003 100644 --- a/lib/content_management/bloc/content_management_event.dart +++ b/lib/content_management/bloc/content_management_event.dart @@ -38,18 +38,18 @@ final class LoadHeadlinesRequested extends ContentManagementEvent { List get props => [startAfterId, limit]; } -/// {@template headline_added} -/// Event to add a new headline to the local state. +/// {@template delete_headline_requested} +/// Event to request deletion of a headline. /// {@endtemplate} -final class HeadlineAdded extends ContentManagementEvent { - /// {@macro headline_added} - const HeadlineAdded(this.headline); +final class DeleteHeadlineRequested extends ContentManagementEvent { + /// {@macro delete_headline_requested} + const DeleteHeadlineRequested(this.id); - /// The headline that was added. - final Headline headline; + /// The ID of the headline to delete. + final String id; @override - List get props => [headline]; + List get props => [id]; } /// {@template headline_updated} @@ -66,20 +66,6 @@ final class HeadlineUpdated extends ContentManagementEvent { List get props => [headline]; } -/// {@template delete_headline_requested} -/// Event to request deletion of a headline. -/// {@endtemplate} -final class DeleteHeadlineRequested extends ContentManagementEvent { - /// {@macro delete_headline_requested} - const DeleteHeadlineRequested(this.id); - - /// The ID of the headline to delete. - final String id; - - @override - List get props => [id]; -} - /// {@template load_categories_requested} /// Event to request loading of categories. /// {@endtemplate} @@ -97,18 +83,18 @@ final class LoadCategoriesRequested extends ContentManagementEvent { List get props => [startAfterId, limit]; } -/// {@template category_added} -/// Event to add a new category to the local state. +/// {@template delete_category_requested} +/// Event to request deletion of a category. /// {@endtemplate} -final class CategoryAdded extends ContentManagementEvent { - /// {@macro category_added} - const CategoryAdded(this.category); +final class DeleteCategoryRequested extends ContentManagementEvent { + /// {@macro delete_category_requested} + const DeleteCategoryRequested(this.id); - /// The category that was added. - final Category category; + /// The ID of the category to delete. + final String id; @override - List get props => [category]; + List get props => [id]; } /// {@template category_updated} @@ -125,20 +111,6 @@ final class CategoryUpdated extends ContentManagementEvent { List get props => [category]; } -/// {@template delete_category_requested} -/// Event to request deletion of a category. -/// {@endtemplate} -final class DeleteCategoryRequested extends ContentManagementEvent { - /// {@macro delete_category_requested} - const DeleteCategoryRequested(this.id); - - /// The ID of the category to delete. - final String id; - - @override - List get props => [id]; -} - /// {@template load_sources_requested} /// Event to request loading of sources. /// {@endtemplate} @@ -156,18 +128,18 @@ final class LoadSourcesRequested extends ContentManagementEvent { List get props => [startAfterId, limit]; } -/// {@template source_added} -/// Event to add a new source to the local state. +/// {@template delete_source_requested} +/// Event to request deletion of a source. /// {@endtemplate} -final class SourceAdded extends ContentManagementEvent { - /// {@macro source_added} - const SourceAdded(this.source); +final class DeleteSourceRequested extends ContentManagementEvent { + /// {@macro delete_source_requested} + const DeleteSourceRequested(this.id); - /// The source that was added. - final Source source; + /// The ID of the source to delete. + final String id; @override - List get props => [source]; + List get props => [id]; } /// {@template source_updated} @@ -183,17 +155,3 @@ final class SourceUpdated extends ContentManagementEvent { @override List get props => [source]; } - -/// {@template delete_source_requested} -/// Event to request deletion of a source. -/// {@endtemplate} -final class DeleteSourceRequested extends ContentManagementEvent { - /// {@macro delete_source_requested} - const DeleteSourceRequested(this.id); - - /// The ID of the source to delete. - final String id; - - @override - List get props => [id]; -} diff --git a/lib/content_management/view/create_category_page.dart b/lib/content_management/view/create_category_page.dart index dc043a2..49e1af9 100644 --- a/lib/content_management/view/create_category_page.dart +++ b/lib/content_management/view/create_category_page.dart @@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart'; import 'package:ht_dashboard/content_management/bloc/content_management_bloc.dart'; import 'package:ht_dashboard/content_management/bloc/create_category/create_category_bloc.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; +import 'package:ht_dashboard/shared/constants/pagination_constants.dart'; import 'package:ht_dashboard/shared/shared.dart'; import 'package:ht_data_repository/ht_data_repository.dart'; import 'package:ht_shared/ht_shared.dart'; @@ -81,7 +82,8 @@ class _CreateCategoryViewState extends State<_CreateCategoryView> { SnackBar(content: Text(l10n.categoryCreatedSuccessfully)), ); context.read().add( - CategoryAdded(state.createdCategory!), + // Refresh the list to show the new category + const LoadCategoriesRequested(limit: kDefaultRowsPerPage), ); context.pop(); } diff --git a/lib/content_management/view/create_headline_page.dart b/lib/content_management/view/create_headline_page.dart index 075d2a4..9ce98b8 100644 --- a/lib/content_management/view/create_headline_page.dart +++ b/lib/content_management/view/create_headline_page.dart @@ -4,6 +4,7 @@ import 'package:go_router/go_router.dart'; import 'package:ht_dashboard/content_management/bloc/content_management_bloc.dart'; import 'package:ht_dashboard/content_management/bloc/create_headline/create_headline_bloc.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; +import 'package:ht_dashboard/shared/constants/pagination_constants.dart'; import 'package:ht_dashboard/shared/shared.dart'; import 'package:ht_data_repository/ht_data_repository.dart'; import 'package:ht_shared/ht_shared.dart'; @@ -83,7 +84,8 @@ class _CreateHeadlineViewState extends State<_CreateHeadlineView> { SnackBar(content: Text(l10n.headlineCreatedSuccessfully)), ); context.read().add( - HeadlineAdded(state.createdHeadline!), + // Refresh the list to show the new headline + const LoadHeadlinesRequested(limit: kDefaultRowsPerPage), ); context.pop(); } diff --git a/lib/content_management/view/create_source_page.dart b/lib/content_management/view/create_source_page.dart index 652b689..7876654 100644 --- a/lib/content_management/view/create_source_page.dart +++ b/lib/content_management/view/create_source_page.dart @@ -5,6 +5,7 @@ import 'package:ht_dashboard/content_management/bloc/content_management_bloc.dar import 'package:ht_dashboard/content_management/bloc/create_source/create_source_bloc.dart'; import 'package:ht_dashboard/content_management/bloc/edit_source/edit_source_bloc.dart'; import 'package:ht_dashboard/l10n/l10n.dart'; +import 'package:ht_dashboard/shared/constants/pagination_constants.dart'; import 'package:ht_dashboard/shared/shared.dart'; import 'package:ht_data_repository/ht_data_repository.dart'; import 'package:ht_shared/ht_shared.dart'; @@ -83,7 +84,8 @@ class _CreateSourceViewState extends State<_CreateSourceView> { SnackBar(content: Text(l10n.sourceCreatedSuccessfully)), ); context.read().add( - SourceAdded(state.createdSource!), + // Refresh the list to show the new source + const LoadSourcesRequested(limit: kDefaultRowsPerPage), ); context.pop(); }