From 009ee6844138ecd4d67bd009798694b4e08b8d5b Mon Sep 17 00:00:00 2001 From: ggurdin Date: Wed, 19 Nov 2025 10:50:13 -0500 Subject: [PATCH] feat: allow search by base displayname for languages --- .../course_creation/course_language_filter.dart | 12 +++++------- .../learning_settings/models/language_model.dart | 15 +++++++++++++++ .../widgets/p_language_dropdown.dart | 13 +++++-------- 3 files changed, 25 insertions(+), 15 deletions(-) diff --git a/lib/pangea/course_creation/course_language_filter.dart b/lib/pangea/course_creation/course_language_filter.dart index 084818b37..3737ec83a 100644 --- a/lib/pangea/course_creation/course_language_filter.dart +++ b/lib/pangea/course_creation/course_language_filter.dart @@ -25,13 +25,11 @@ class CourseLanguageFilter extends StatelessWidget { displayname: (v) => v.getDisplayName(context), enableSearch: true, defaultName: L10n.of(context).allLanguages, - searchMatchFn: (item, searchValue) { - final search = searchValue.toLowerCase(); - final displayName = item.value?.getDisplayName(context).toLowerCase(); - final langCode = item.value?.langCode.toLowerCase(); - return displayName?.startsWith(search) == true || - langCode?.startsWith(search) == true; - }, + searchMatchFn: (item, searchValue) => LanguageModel.search( + item.value, + searchValue, + context, + ), ); } } diff --git a/lib/pangea/learning_settings/models/language_model.dart b/lib/pangea/learning_settings/models/language_model.dart index 35fea0163..7a878365b 100644 --- a/lib/pangea/learning_settings/models/language_model.dart +++ b/lib/pangea/learning_settings/models/language_model.dart @@ -312,6 +312,21 @@ class LanguageModel { return _textDirection ?? _defaultTextDirection; } + static bool search( + LanguageModel? item, + String searchValue, + BuildContext context, + ) { + if (item == null) return false; + final search = searchValue.toLowerCase(); + final displayName = item.displayName.toLowerCase(); + final displayNameLocal = item.getDisplayName(context).toLowerCase(); + final langCode = item.langCode.toLowerCase(); + return displayName.startsWith(search) || + displayNameLocal.startsWith(search) || + langCode.startsWith(search); + } + @override bool operator ==(Object other) { if (other is LanguageModel) { diff --git a/lib/pangea/learning_settings/widgets/p_language_dropdown.dart b/lib/pangea/learning_settings/widgets/p_language_dropdown.dart index d78423898..667af16f2 100644 --- a/lib/pangea/learning_settings/widgets/p_language_dropdown.dart +++ b/lib/pangea/learning_settings/widgets/p_language_dropdown.dart @@ -158,14 +158,11 @@ class PLanguageDropdownState extends State { ), ), ), - searchMatchFn: (item, searchValue) { - final displayName = - item.value?.getDisplayName(context).toLowerCase(); - if (displayName == null) return false; - - final search = searchValue.toLowerCase(); - return displayName.startsWith(search); - }, + searchMatchFn: (item, searchValue) => LanguageModel.search( + item.value, + searchValue, + context, + ), ), onMenuStateChange: (isOpen) { if (!isOpen) _searchController.clear();