@@ -4,6 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
44import 'package:flutter_news_app_web_dashboard_full_source_code/content_management/bloc/content_management_bloc.dart' ;
55import 'package:flutter_news_app_web_dashboard_full_source_code/l10n/app_localizations.dart' ;
66import 'package:flutter_news_app_web_dashboard_full_source_code/router/routes.dart' ;
7+ import 'package:flutter_news_app_web_dashboard_full_source_code/shared/widgets/confirmation_dialog.dart' ;
78import 'package:go_router/go_router.dart' ;
89import 'package:ui_kit/ui_kit.dart' ;
910
@@ -161,64 +162,7 @@ class ContentActionButtons extends StatelessWidget {
161162 icon: const Icon (Icons .more_vert),
162163 tooltip: l10n.moreActions,
163164 onSelected: (value) {
164- switch (value) {
165- case 'publish' :
166- if (item is Headline ) {
167- context.read <ContentManagementBloc >().add (
168- PublishHeadlineRequested (itemId),
169- );
170- } else if (item is Topic ) {
171- context.read <ContentManagementBloc >().add (
172- PublishTopicRequested (itemId),
173- );
174- } else if (item is Source ) {
175- context.read <ContentManagementBloc >().add (
176- PublishSourceRequested (itemId),
177- );
178- }
179- case 'archive' :
180- if (item is Headline ) {
181- context.read <ContentManagementBloc >().add (
182- ArchiveHeadlineRequested (itemId),
183- );
184- } else if (item is Topic ) {
185- context.read <ContentManagementBloc >().add (
186- ArchiveTopicRequested (itemId),
187- );
188- } else if (item is Source ) {
189- context.read <ContentManagementBloc >().add (
190- ArchiveSourceRequested (itemId),
191- );
192- }
193- case 'restore' :
194- if (item is Headline ) {
195- context.read <ContentManagementBloc >().add (
196- RestoreHeadlineRequested (itemId),
197- );
198- } else if (item is Topic ) {
199- context.read <ContentManagementBloc >().add (
200- RestoreTopicRequested (itemId),
201- );
202- } else if (item is Source ) {
203- context.read <ContentManagementBloc >().add (
204- RestoreSourceRequested (itemId),
205- );
206- }
207- case 'delete' :
208- if (item is Headline ) {
209- context.read <ContentManagementBloc >().add (
210- DeleteHeadlineForeverRequested (itemId),
211- );
212- } else if (item is Topic ) {
213- context.read <ContentManagementBloc >().add (
214- DeleteTopicForeverRequested (itemId),
215- );
216- } else if (item is Source ) {
217- context.read <ContentManagementBloc >().add (
218- DeleteSourceForeverRequested (itemId),
219- );
220- }
221- }
165+ _handleAction (context, value, itemId, l10n);
222166 },
223167 itemBuilder: (BuildContext context) => overflowMenuItems,
224168 ),
@@ -230,4 +174,114 @@ class ContentActionButtons extends StatelessWidget {
230174 children: visibleActions,
231175 );
232176 }
177+
178+ void _showConfirmationDialog ({
179+ required BuildContext context,
180+ required String title,
181+ required String content,
182+ required String confirmText,
183+ required VoidCallback onConfirm,
184+ }) {
185+ showDialog <void >(
186+ context: context,
187+ builder: (BuildContext dialogContext) {
188+ return ConfirmationDialog (
189+ title: title,
190+ content: content,
191+ confirmText: confirmText,
192+ onConfirm: onConfirm,
193+ );
194+ },
195+ );
196+ }
197+
198+ void _handleAction (
199+ BuildContext context,
200+ String action,
201+ String itemId,
202+ AppLocalizations l10n,
203+ ) {
204+ switch (action) {
205+ case 'publish' :
206+ _showConfirmationDialog (
207+ context: context,
208+ title: l10n.publishItemTitle,
209+ content: l10n.publishItemContent,
210+ confirmText: l10n.publish,
211+ onConfirm: () {
212+ if (item is Headline ) {
213+ context.read <ContentManagementBloc >().add (
214+ PublishHeadlineRequested (itemId),
215+ );
216+ } else if (item is Topic ) {
217+ context.read <ContentManagementBloc >().add (
218+ PublishTopicRequested (itemId),
219+ );
220+ } else if (item is Source ) {
221+ context.read <ContentManagementBloc >().add (
222+ PublishSourceRequested (itemId),
223+ );
224+ }
225+ },
226+ );
227+ case 'archive' :
228+ _showConfirmationDialog (
229+ context: context,
230+ title: l10n.archiveItemTitle,
231+ content: l10n.archiveItemContent,
232+ confirmText: l10n.archive,
233+ onConfirm: () {
234+ if (item is Headline ) {
235+ context.read <ContentManagementBloc >().add (
236+ ArchiveHeadlineRequested (itemId),
237+ );
238+ } else if (item is Topic ) {
239+ context.read <ContentManagementBloc >().add (
240+ ArchiveTopicRequested (itemId),
241+ );
242+ } else if (item is Source ) {
243+ context.read <ContentManagementBloc >().add (
244+ ArchiveSourceRequested (itemId),
245+ );
246+ }
247+ },
248+ );
249+ case 'restore' :
250+ _showConfirmationDialog (
251+ context: context,
252+ title: l10n.restoreItemTitle,
253+ content: l10n.restoreItemContent,
254+ confirmText: l10n.restore,
255+ onConfirm: () {
256+ if (item is Headline ) {
257+ context.read <ContentManagementBloc >().add (
258+ RestoreHeadlineRequested (itemId),
259+ );
260+ } else if (item is Topic ) {
261+ context.read <ContentManagementBloc >().add (
262+ RestoreTopicRequested (itemId),
263+ );
264+ } else if (item is Source ) {
265+ context.read <ContentManagementBloc >().add (
266+ RestoreSourceRequested (itemId),
267+ );
268+ }
269+ },
270+ );
271+ case 'delete' :
272+ _showConfirmationDialog (
273+ context: context,
274+ title: l10n.deleteItemTitle,
275+ content: l10n.deleteItemContent,
276+ confirmText: l10n.deleteForever,
277+ onConfirm: () {
278+ if (item is Headline ) {
279+ context.read <ContentManagementBloc >().add (
280+ DeleteHeadlineForeverRequested (itemId),
281+ );
282+ }
283+ },
284+ );
285+ }
286+ }
233287}
0 commit comments