Skip to content

Commit de98200

Browse files
committed
compose [nfc]: Take UserStore in userMention, rather than bare Map
Now that we have a UserStore type, we can give this a bit more abstraction.
1 parent 626d473 commit de98200

File tree

4 files changed

+10
-8
lines changed

4 files changed

+10
-8
lines changed

lib/model/compose.dart

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import '../generated/l10n/zulip_localizations.dart';
55
import 'internal_link.dart';
66
import 'narrow.dart';
77
import 'store.dart';
8+
import 'user.dart';
89

910
/// The available user wildcard mention options,
1011
/// known to the server as [canonicalString].
@@ -127,11 +128,12 @@ String wrapWithBacktickFence({required String content, String? infoString}) {
127128
/// An @-mention of an individual user, like @**Chris Bobbe|13313**.
128129
///
129130
/// To omit the user ID part ("|13313") whenever the name part is unambiguous,
130-
/// pass a Map of all users we know about. This means accepting a linear scan
131+
/// pass the full UserStore. This means accepting a linear scan
131132
/// through all users; avoid it in performance-sensitive codepaths.
132-
String userMention(User user, {bool silent = false, Map<int, User>? users}) {
133+
String userMention(User user, {bool silent = false, UserStore? users}) {
133134
bool includeUserId = users == null
134-
|| users.values.where((u) => u.fullName == user.fullName).take(2).length == 2;
135+
|| users.users.values.where((u) => u.fullName == user.fullName)
136+
.take(2).length == 2;
135137

136138
return '@${silent ? '_' : ''}**${user.fullName}${includeUserId ? '|${user.userId}' : ''}**';
137139
}

lib/widgets/autocomplete.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ class ComposeAutocomplete extends AutocompleteField<ComposeAutocompleteQuery, Co
202202
}
203203
// TODO(i18n) language-appropriate space character; check active keyboard?
204204
// (maybe handle centrally in `controller`)
205-
replacementString = '${userMention(store.users[userId]!, silent: query.silent, users: store.users)} ';
205+
replacementString = '${userMention(store.users[userId]!, silent: query.silent, users: store)} ';
206206
case WildcardMentionAutocompleteResult(:var wildcardOption):
207207
replacementString = '${wildcardMention(wildcardOption, store: store)} ';
208208
}

test/model/compose_test.dart

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -234,17 +234,17 @@ hello
234234
test('`users` passed; has two users with same fullName', () async {
235235
final store = eg.store();
236236
await store.addUsers([user, eg.user(userId: 5), eg.user(userId: 234, fullName: user.fullName)]);
237-
check(userMention(user, silent: true, users: store.users)).equals('@_**Full Name|123**');
237+
check(userMention(user, silent: true, users: store)).equals('@_**Full Name|123**');
238238
});
239239
test('`users` passed; has two same-name users but one of them is deactivated', () async {
240240
final store = eg.store();
241241
await store.addUsers([user, eg.user(userId: 5), eg.user(userId: 234, fullName: user.fullName, isActive: false)]);
242-
check(userMention(user, silent: true, users: store.users)).equals('@_**Full Name|123**');
242+
check(userMention(user, silent: true, users: store)).equals('@_**Full Name|123**');
243243
});
244244
test('`users` passed; user has unique fullName', () async {
245245
final store = eg.store();
246246
await store.addUsers([user, eg.user(userId: 234, fullName: 'Another Name')]);
247-
check(userMention(user, silent: true, users: store.users)).equals('@_**Full Name**');
247+
check(userMention(user, silent: true, users: store)).equals('@_**Full Name**');
248248
});
249249
});
250250

test/widgets/autocomplete_test.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ void main() {
174174
await tester.tap(find.text('User Three'));
175175
await tester.pump();
176176
check(tester.widget<TextField>(composeInputFinder).controller!.text)
177-
.contains(userMention(user3, users: store.users));
177+
.contains(userMention(user3, users: store));
178178
checkUserShown(user1, store, expected: false);
179179
checkUserShown(user2, store, expected: false);
180180
checkUserShown(user3, store, expected: false);

0 commit comments

Comments
 (0)