Skip to content

Commit 1de2a51

Browse files
committed
action: Add dialog to markNarrowAsRead for CombinedFeedNarrow view
A confirm ActionDialog is added to prevent accidentally marking many messages as read in a non-conversation view. Also, adjust existing MarkAsReadWidget tests to account for the added confirmation dialog. Fixes: #1858
1 parent c29a8f8 commit 1de2a51

File tree

3 files changed

+19
-6
lines changed

3 files changed

+19
-6
lines changed

lib/widgets/actions.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,17 @@ abstract final class ZulipAction {
3232
static Future<void> markNarrowAsRead(BuildContext context, Narrow narrow) async {
3333
final zulipLocalizations = ZulipLocalizations.of(context);
3434

35+
if (narrow is CombinedFeedNarrow) {
36+
final didConfirm = showSuggestedActionDialog(context: context,
37+
title: zulipLocalizations.markAllAsReadConfirmationDialogTitle,
38+
message: zulipLocalizations.markAllAsReadConfirmationDialogMessage,
39+
actionButtonText: zulipLocalizations.markAllAsReadConfirmationDialogAction,
40+
);
41+
42+
if (await didConfirm.result != true) return;
43+
if (!context.mounted) return;
44+
}
45+
3546
final didPass = await updateMessageFlagsStartingFromAnchor(
3647
context: context,
3748
// Include `is:unread` in the narrow. That has a database index, so

test/widgets/actions_test.dart

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -108,9 +108,7 @@ void main() {
108108
processedCount: 11, updatedCount: 3,
109109
firstProcessedId: null, lastProcessedId: null,
110110
foundOldest: true, foundNewest: true).toJson());
111-
final future = ZulipAction.markNarrowAsRead(context, narrow);
112-
await tester.pump(Duration.zero);
113-
await future;
111+
await confirmToMarkNarrowAsRead(tester: tester, context: context, narrow: narrow);
114112
check(connection.lastRequest).isA<http.Request>()
115113
..method.equals('POST')
116114
..url.path.equals('/api/v1/messages/flags/narrow')
@@ -134,9 +132,7 @@ void main() {
134132
processedCount: 11, updatedCount: 3,
135133
firstProcessedId: null, lastProcessedId: null,
136134
foundOldest: true, foundNewest: true).toJson());
137-
final future = ZulipAction.markNarrowAsRead(context, narrow);
138-
await tester.pump(Duration.zero);
139-
await future;
135+
await confirmToMarkNarrowAsRead(tester: tester, context: context, narrow: narrow);
140136
check(store.unreads.oldUnreadsMissing).isFalse();
141137
});
142138
});

test/widgets/message_list_test.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1171,6 +1171,9 @@ void main() {
11711171
firstProcessedId: null, lastProcessedId: null,
11721172
foundOldest: true, foundNewest: true).toJson());
11731173
await tester.tap(find.byType(MarkAsReadWidget));
1174+
await tester.pump();
1175+
final (confirmButton, _) = checkConfirmDialog(tester);
1176+
await tester.tap(find.byWidget(confirmButton));
11741177
await tester.pumpAndSettle();
11751178
check(store.unreads.oldUnreadsMissing).isFalse();
11761179
});
@@ -1184,6 +1187,9 @@ void main() {
11841187

11851188
connection.prepare(httpException: http.ClientException('Oops'));
11861189
await tester.tap(find.byType(MarkAsReadWidget));
1190+
await tester.pump();
1191+
final (confirmButton, _) = checkConfirmDialog(tester);
1192+
await tester.tap(find.byWidget(confirmButton));
11871193
await tester.pumpAndSettle();
11881194
checkErrorDialog(tester,
11891195
expectedTitle: zulipLocalizations.errorMarkAsReadFailedTitle,

0 commit comments

Comments
 (0)