@@ -177,6 +177,13 @@ class AutocompleteViewManager {
177
177
178
178
/// A view-model for an autocomplete interaction.
179
179
///
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
+ ///
180
187
/// The owner of one of these objects must call [dispose] when the object
181
188
/// will no longer be used, in order to free resources on the [PerAccountStore] .
182
189
///
@@ -284,6 +291,7 @@ abstract class AutocompleteView<QueryT extends AutocompleteQuery, ResultT extend
284
291
}
285
292
}
286
293
294
+ /// An [AutocompleteView] for an @-mention autocomplete interaction.
287
295
class MentionAutocompleteView extends AutocompleteView <MentionAutocompleteQuery , MentionAutocompleteResult > {
288
296
MentionAutocompleteView ._({
289
297
required super .store,
@@ -493,11 +501,29 @@ class MentionAutocompleteView extends AutocompleteView<MentionAutocompleteQuery,
493
501
}
494
502
}
495
503
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.
496
520
abstract class AutocompleteQuery {
497
521
AutocompleteQuery (this .raw)
498
522
: _lowercaseWords = raw.toLowerCase ().split (' ' );
499
523
524
+ /// The actual string the user entered.
500
525
final String raw;
526
+
501
527
final List <String > _lowercaseWords;
502
528
503
529
/// Whether all of this query's words have matches in [words] that appear in order.
@@ -523,6 +549,7 @@ abstract class AutocompleteQuery {
523
549
}
524
550
}
525
551
552
+ /// A @-mention autocomplete query, used by [MentionAutocompleteView] .
526
553
class MentionAutocompleteQuery extends AutocompleteQuery {
527
554
MentionAutocompleteQuery (super .raw, {this .silent = false });
528
555
@@ -555,6 +582,10 @@ class MentionAutocompleteQuery extends AutocompleteQuery {
555
582
int get hashCode => Object .hash ('MentionAutocompleteQuery' , raw, silent);
556
583
}
557
584
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] .
558
589
class AutocompleteDataCache {
559
590
final Map <int , String > _normalizedNamesByUser = {};
560
591
@@ -575,10 +606,22 @@ class AutocompleteDataCache {
575
606
}
576
607
}
577
608
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.
578
614
class AutocompleteResult {}
579
615
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.
580
622
sealed class MentionAutocompleteResult extends AutocompleteResult {}
581
623
624
+ /// An autocomplete result for an @-mention of an individual user.
582
625
class UserMentionAutocompleteResult extends MentionAutocompleteResult {
583
626
UserMentionAutocompleteResult ({required this .userId});
584
627
@@ -589,6 +632,7 @@ class UserMentionAutocompleteResult extends MentionAutocompleteResult {
589
632
590
633
// TODO(#234): // class WildcardMentionAutocompleteResult extends MentionAutocompleteResult {
591
634
635
+ /// An autocomplete interaction for choosing a topic for a message.
592
636
class TopicAutocompleteView extends AutocompleteView <TopicAutocompleteQuery , TopicAutocompleteResult > {
593
637
TopicAutocompleteView ._({required super .store, required this .streamId});
594
638
@@ -599,7 +643,9 @@ class TopicAutocompleteView extends AutocompleteView<TopicAutocompleteQuery, Top
599
643
return view;
600
644
}
601
645
646
+ /// The channel/stream the eventual message will be sent to.
602
647
final int streamId;
648
+
603
649
Iterable <String > _topics = [];
604
650
bool _isFetching = false ;
605
651
@@ -642,6 +688,8 @@ class TopicAutocompleteView extends AutocompleteView<TopicAutocompleteQuery, Top
642
688
}
643
689
}
644
690
691
+ /// A query for autocompleting a topic to send to,
692
+ /// used by [TopicAutocompleteView] .
645
693
class TopicAutocompleteQuery extends AutocompleteQuery {
646
694
TopicAutocompleteQuery (super .raw);
647
695
@@ -664,6 +712,7 @@ class TopicAutocompleteQuery extends AutocompleteQuery {
664
712
int get hashCode => Object .hash ('TopicAutocompleteQuery' , raw);
665
713
}
666
714
715
+ /// A topic chosen in an autocomplete interaction, via a [TopicAutocompleteView] .
667
716
class TopicAutocompleteResult extends AutocompleteResult {
668
717
final String topic;
669
718
0 commit comments