Skip to content

Commit edabb9c

Browse files
committed
feat(content_management): add confirmation dialog for content actions
- Add confirmation dialog for publish, archive, restore, and delete actions - Refactor content action handling
1 parent 069259f commit edabb9c

File tree

1 file changed

+112
-58
lines changed

1 file changed

+112
-58
lines changed

lib/content_management/widgets/content_action_buttons.dart

Lines changed: 112 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:flutter_bloc/flutter_bloc.dart';
44
import 'package:flutter_news_app_web_dashboard_full_source_code/content_management/bloc/content_management_bloc.dart';
55
import 'package:flutter_news_app_web_dashboard_full_source_code/l10n/app_localizations.dart';
66
import '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';
78
import 'package:go_router/go_router.dart';
89
import '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

Comments
 (0)