diff --git a/lib/inventree/bom.dart b/lib/inventree/bom.dart index 52ad5782..20487bcd 100644 --- a/lib/inventree/bom.dart +++ b/lib/inventree/bom.dart @@ -34,6 +34,9 @@ class InvenTreeBomItem extends InvenTreeModel { }; } + // Extract the 'reference' value associated with this BomItem + String get reference => (jsondata["reference"] ?? "") as String; + // Extract the 'quantity' value associated with this BomItem double get quantity => double.tryParse(jsondata["quantity"].toString()) ?? 0; diff --git a/lib/widget/bom_list.dart b/lib/widget/bom_list.dart index e2b6f136..65ee0131 100644 --- a/lib/widget/bom_list.dart +++ b/lib/widget/bom_list.dart @@ -47,7 +47,7 @@ class _BomListState extends PaginatedState { @override Map get orderingOptions => { "quantity": L10().quantity, - "part": L10().part, + "sub_part": L10().part, }; @override @@ -82,6 +82,9 @@ class _PaginatedBomListState extends PaginatedSearchState { Function(int)? onTotalChanged; + @override + String get prefix => "bom_"; + @override Future requestPage(int limit, int offset, Map params) async { @@ -102,7 +105,7 @@ class _PaginatedBomListState extends PaginatedSearchState { return ListTile( title: Text(title), - subtitle: Text(description), + subtitle: Text(bomItem.reference), trailing: Text( simpleNumberString(bomItem.quantity), style: TextStyle(fontWeight: FontWeight.bold), diff --git a/lib/widget/paginator.dart b/lib/widget/paginator.dart index 26bae40a..4d721d55 100644 --- a/lib/widget/paginator.dart +++ b/lib/widget/paginator.dart @@ -44,7 +44,8 @@ abstract class PaginatedState extends RefreshableState Future orderingField() async { dynamic field = await InvenTreeSettingsManager().getValue("${prefix}ordering_field", null); - if (field != null) { + if (field != null && orderingOptions.containsKey(field.toString())) { + // A valid ordering field has been found return field.toString(); } else if (orderingOptions.isNotEmpty) { // By default, return the first specified key @@ -121,6 +122,9 @@ abstract class PaginatedState extends RefreshableState // Save values to settings await InvenTreeSettingsManager().setValue("${prefix}ordering_field", f); await InvenTreeSettingsManager().setValue("${prefix}ordering_order", o); + + // Refresh the widget + setState(() {}); } ); } @@ -136,15 +140,15 @@ class PaginatedSearchState extends State { static const _pageSize = 25; + // Prefix for storing and loading pagination options + // Override in implementing class + String get prefix => "prefix_"; + // Search query term String searchTerm = ""; int resultCount = 0; - // List of variables by which the list can be "ordered". - // Override in any implementing sub-class - List orderingFilters = []; - // Text controller final TextEditingController searchController = TextEditingController(); @@ -172,11 +176,19 @@ class PaginatedSearchState extends State { return null; } + Future get ordering async { + dynamic field = await InvenTreeSettingsManager().getValue("${prefix}ordering_field", ""); + dynamic order = await InvenTreeSettingsManager().getValue("${prefix}ordering_order", "+"); + + return "${order}${field}"; + } + Future _fetchPage(int pageKey) async { try { Map params = filters; params["search"] = "${searchTerm}"; + params["ordering"] = await ordering; final page = await requestPage( _pageSize, @@ -299,7 +311,10 @@ class PaginatedSearchWidget extends StatelessWidget { ), trailing: Text( "${results}", - style: TextStyle(fontWeight: FontWeight.bold), + style: TextStyle( + fontWeight: FontWeight.bold, + fontStyle: FontStyle.italic + ), ), ); }