Skip to content

Commit e561f3a

Browse files
committed
autocomplete [nfc]: Document how query, view-model, and results classes relate
1 parent f6e7e3c commit e561f3a

File tree

1 file changed

+49
-0
lines changed

1 file changed

+49
-0
lines changed

lib/model/autocomplete.dart

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,6 +177,13 @@ class AutocompleteViewManager {
177177

178178
/// A view-model for an autocomplete interaction.
179179
///
180+
/// Subclasses correspond to subclasses of [AutocompleteQuery],
181+
/// i.e. different types of autocomplete interaction initiated by the user.
182+
/// Each subclass specifies the corresponding [AutocompleteQuery] subclass
183+
/// as `QueryT`,
184+
/// and the [AutocompleteResult] subclass in `ResultT` describes the
185+
/// possible results that the user might choose in the autocomplete interaction.
186+
///
180187
/// The owner of one of these objects must call [dispose] when the object
181188
/// will no longer be used, in order to free resources on the [PerAccountStore].
182189
///
@@ -284,6 +291,7 @@ abstract class AutocompleteView<QueryT extends AutocompleteQuery, ResultT extend
284291
}
285292
}
286293

294+
/// An [AutocompleteView] for an @-mention autocomplete interaction.
287295
class MentionAutocompleteView extends AutocompleteView<MentionAutocompleteQuery, MentionAutocompleteResult> {
288296
MentionAutocompleteView._({
289297
required super.store,
@@ -493,11 +501,29 @@ class MentionAutocompleteView extends AutocompleteView<MentionAutocompleteQuery,
493501
}
494502
}
495503

504+
/// A query the user has entered into some form of autocomplete.
505+
///
506+
/// Subclasses correspond to different types of autocomplete interaction
507+
/// initiated by the user:
508+
/// for example typing `@` into a compose box's content input
509+
/// to autocomplete an @-mention ([MentionAutocompleteQuery]),
510+
/// or typing into a topic input
511+
/// to autocomplete a topic name ([TopicAutocompleteQuery]).
512+
/// Each subclass has a corresponding subclass of [AutocompleteView].
513+
///
514+
/// An [AutocompleteQuery] object stores the user's actual query string
515+
/// as [raw].
516+
/// It may also store processed forms of the query
517+
/// (for example, converted to lowercase or split on whitespace)
518+
/// to prepare for whatever particular form of searching will be done
519+
/// for the given type of autocomplete interaction.
496520
abstract class AutocompleteQuery {
497521
AutocompleteQuery(this.raw)
498522
: _lowercaseWords = raw.toLowerCase().split(' ');
499523

524+
/// The actual string the user entered.
500525
final String raw;
526+
501527
final List<String> _lowercaseWords;
502528

503529
/// Whether all of this query's words have matches in [words] that appear in order.
@@ -523,6 +549,7 @@ abstract class AutocompleteQuery {
523549
}
524550
}
525551

552+
/// A @-mention autocomplete query, used by [MentionAutocompleteView].
526553
class MentionAutocompleteQuery extends AutocompleteQuery {
527554
MentionAutocompleteQuery(super.raw, {this.silent = false});
528555

@@ -555,6 +582,10 @@ class MentionAutocompleteQuery extends AutocompleteQuery {
555582
int get hashCode => Object.hash('MentionAutocompleteQuery', raw, silent);
556583
}
557584

585+
/// Cached data that is used for autocomplete
586+
/// but kept around in between autocomplete interactions.
587+
///
588+
/// An instance of this class is managed by [AutocompleteViewManager].
558589
class AutocompleteDataCache {
559590
final Map<int, String> _normalizedNamesByUser = {};
560591

@@ -575,10 +606,22 @@ class AutocompleteDataCache {
575606
}
576607
}
577608

609+
/// A result the user chose, or might choose, from an autocomplete interaction.
610+
///
611+
/// Different subclasses of [AutocompleteView],
612+
/// representing different types of autocomplete interaction,
613+
/// have corresponding subclasses of [AutocompleteResult] they might produce.
578614
class AutocompleteResult {}
579615

616+
/// A result from an @-mention autocomplete interaction,
617+
/// managed by a [MentionAutocompleteView].
618+
///
619+
/// This is abstract because there are several kinds of result
620+
/// that can all be offered in the same @-mention autocomplete interaction:
621+
/// a user, a wildcard, or a user group.
580622
sealed class MentionAutocompleteResult extends AutocompleteResult {}
581623

624+
/// An autocomplete result for an @-mention of an individual user.
582625
class UserMentionAutocompleteResult extends MentionAutocompleteResult {
583626
UserMentionAutocompleteResult({required this.userId});
584627

@@ -589,6 +632,7 @@ class UserMentionAutocompleteResult extends MentionAutocompleteResult {
589632

590633
// TODO(#234): // class WildcardMentionAutocompleteResult extends MentionAutocompleteResult {
591634

635+
/// An autocomplete interaction for choosing a topic for a message.
592636
class TopicAutocompleteView extends AutocompleteView<TopicAutocompleteQuery, TopicAutocompleteResult> {
593637
TopicAutocompleteView._({required super.store, required this.streamId});
594638

@@ -599,7 +643,9 @@ class TopicAutocompleteView extends AutocompleteView<TopicAutocompleteQuery, Top
599643
return view;
600644
}
601645

646+
/// The channel/stream the eventual message will be sent to.
602647
final int streamId;
648+
603649
Iterable<String> _topics = [];
604650
bool _isFetching = false;
605651

@@ -642,6 +688,8 @@ class TopicAutocompleteView extends AutocompleteView<TopicAutocompleteQuery, Top
642688
}
643689
}
644690

691+
/// A query for autocompleting a topic to send to,
692+
/// used by [TopicAutocompleteView].
645693
class TopicAutocompleteQuery extends AutocompleteQuery {
646694
TopicAutocompleteQuery(super.raw);
647695

@@ -664,6 +712,7 @@ class TopicAutocompleteQuery extends AutocompleteQuery {
664712
int get hashCode => Object.hash('TopicAutocompleteQuery', raw);
665713
}
666714

715+
/// A topic chosen in an autocomplete interaction, via a [TopicAutocompleteView].
667716
class TopicAutocompleteResult extends AutocompleteResult {
668717
final String topic;
669718

0 commit comments

Comments
 (0)