diff --git a/assets/release_notes.md b/assets/release_notes.md index d1f374f6..5465b614 100644 --- a/assets/release_notes.md +++ b/assets/release_notes.md @@ -4,7 +4,8 @@ - Fixes crash bug on top-level part category - Fixed crash bug on top-level stock location - Adds context overlay to barcode scanner view -- Notifcations are less obtrusive (uses snack bar) +- Notifications are less obtrusive (uses snack bar) +- Fixed search views - keyboard search button now works properly ## 0.1.0 - February 2021 --- diff --git a/lib/l10n b/lib/l10n index bc85d5b1..05207b7e 160000 --- a/lib/l10n +++ b/lib/l10n @@ -1 +1 @@ -Subproject commit bc85d5b16cd74623ce42bd82b3ac30b9be1da6c6 +Subproject commit 05207b7e5b455db01d05e987c517d75326932dec diff --git a/lib/widget/search.dart b/lib/widget/search.dart index f66c2be5..7ee20242 100644 --- a/lib/widget/search.dart +++ b/lib/widget/search.dart @@ -1,6 +1,7 @@ import 'package:InvenTree/widget/part_detail.dart'; import 'package:InvenTree/widget/progress.dart'; +import 'package:InvenTree/widget/snacks.dart'; import 'package:InvenTree/widget/stock_detail.dart'; import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; @@ -8,6 +9,7 @@ import 'package:font_awesome_flutter/font_awesome_flutter.dart'; import 'package:flutter_gen/gen_l10n/app_localizations.dart'; import 'package:InvenTree/inventree/part.dart'; import 'package:InvenTree/inventree/stock.dart'; +import 'package:one_context/one_context.dart'; import '../api.dart'; @@ -19,6 +21,9 @@ class PartSearchDelegate extends SearchDelegate { BuildContext context; + // What did we search for last time? + String _cachedQuery; + bool _searching = false; // Custom filters for the part search @@ -45,6 +50,12 @@ class PartSearchDelegate extends SearchDelegate { return; } + if (query == _cachedQuery) { + return; + } + + _cachedQuery = query; + _searching = true; print("Searching..."); @@ -67,8 +78,11 @@ class PartSearchDelegate extends SearchDelegate { print("Searching complete! Results: ${partResults.length}"); _searching = false; - // TODO: Show a snackbar detailing number of results... - //showSnackIcon("Found ${partResults.length} parts", context: context); + showSnackIcon( + "${partResults.length} ${I18N.of(OneContext().context).results}", + success: partResults.length > 0, + icon: FontAwesomeIcons.pollH, + ); // For some reason, need to toggle between suggestions and results here... showSuggestions(context); @@ -133,10 +147,14 @@ class PartSearchDelegate extends SearchDelegate { @override Widget buildResults(BuildContext context) { + print("build results"); + if (_searching) { return progressIndicator(); } + search(context); + if (query.length == 0) { return ListTile( title: Text("Enter search query") @@ -152,8 +170,8 @@ class PartSearchDelegate extends SearchDelegate { if (partResults.length == 0) { return ListTile( - title: Text("No Results"), - subtitle: Text("No results matching query") + title: Text(I18N.of(context).noResults), + subtitle: Text("No results for '${query}'") ); } @@ -189,6 +207,8 @@ class StockSearchDelegate extends SearchDelegate { final BuildContext context; + String _cachedQuery; + bool _searching = false; // Custom filters for the stock item search @@ -214,6 +234,12 @@ class StockSearchDelegate extends SearchDelegate { return; } + if (query == _cachedQuery) { + return; + } + + _cachedQuery = query; + _searching = true; print("Searching..."); @@ -236,7 +262,12 @@ class StockSearchDelegate extends SearchDelegate { _searching = false; - // TODO - Show a snackbar icon with number of results. + showSnackIcon( + "${itemResults.length} ${I18N.of(OneContext().context).results}", + success: itemResults.length > 0, + icon: FontAwesomeIcons.pollH, + ); + showSuggestions(context); showResults(context); } @@ -299,10 +330,14 @@ class StockSearchDelegate extends SearchDelegate { @override Widget buildResults(BuildContext context) { + search(context); + if (_searching) { return progressIndicator(); } + search(context); + if (query.length == 0) { return ListTile( title: Text("Enter search query") @@ -318,8 +353,8 @@ class StockSearchDelegate extends SearchDelegate { if (itemResults.length == 0) { return ListTile( - title: Text("No Results"), - subtitle: Text("No results matching query") + title: Text(I18N.of(context).noResults), + subtitle: Text("No results for '${query}'") ); }