feat: allow search by base displayname for languages

This commit is contained in:
ggurdin 2025-11-19 10:50:13 -05:00
parent b886ad6be9
commit 009ee68441
No known key found for this signature in database
GPG key ID: A01CB41737CBB478
3 changed files with 25 additions and 15 deletions

View file

@ -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,
),
);
}
}

View file

@ -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) {

View file

@ -158,14 +158,11 @@ class PLanguageDropdownState extends State<PLanguageDropdown> {
),
),
),
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();