2
0
mirror of https://github.com/inventree/inventree-app.git synced 2025-05-01 06:56:50 +00:00

Search fix (#208)

* Prevent setState if search widget is not mounted

* Prevent search textbox from disappearing
This commit is contained in:
Oliver 2022-09-10 13:11:34 +10:00 committed by GitHub
parent 38b34e0fd9
commit c25175ac54
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -36,6 +36,8 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
_SearchDisplayState(this.hasAppBar) : super();
final _formKey = GlobalKey<FormState>();
final bool hasAppBar;
@override
@ -105,6 +107,9 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
} else {
debounceTimer = Timer(Duration(milliseconds: 250), () {
search(text);
if (!_focusNode.hasFocus) {
_focusNode.requestFocus();
}
});
}
}
@ -120,6 +125,10 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
var api = InvenTreeAPI();
if (!mounted) {
return;
}
setState(() {
// Do not search on an empty string
nPartResults = 0;
@ -140,11 +149,13 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
if (api.checkPermission("part", "view")) {
InvenTreePart().count(searchQuery: term).then((int n) {
if (term == searchController.text) {
if (mounted) {
setState(() {
nPartResults = n;
nSearchResults++;
});
}
}
});
}
@ -152,11 +163,13 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
if (api.checkPermission("part_category", "view")) {
InvenTreePartCategory().count(searchQuery: term,).then((int n) {
if (term == searchController.text) {
if (mounted) {
setState(() {
nCategoryResults = n;
nSearchResults++;
});
}
}
});
}
@ -164,11 +177,13 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
if (api.checkPermission("stock", "view")) {
InvenTreeStockItem().count(searchQuery: term).then((int n) {
if (term == searchController.text) {
if (mounted) {
setState(() {
nStockResults = n;
nSearchResults++;
});
}
}
});
}
@ -176,12 +191,13 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
if (api.checkPermission("stock_location", "view")) {
InvenTreeStockLocation().count(searchQuery: term).then((int n) {
if (term == searchController.text) {
if (mounted) {
setState(() {
nLocationResults = n;
nSearchResults++;
});
}
}
});
}
@ -209,11 +225,13 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
}
).then((int n) {
if (term == searchController.text) {
if (mounted) {
setState(() {
nPurchaseOrderResults = n;
nSearchResults++;
});
}
}
});
}
}
@ -229,13 +247,18 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
decoration: InputDecoration(
hintText: L10().queryEmpty,
),
key: _formKey,
readOnly: false,
autofocus: true,
autofocus: false,
autocorrect: false,
focusNode: _focusNode,
controller: searchController,
onChanged: (String text) {
onSearchTextChanged(text);
_focusNode.requestFocus();
},
onFieldSubmitted: (String text) {
_focusNode.requestFocus();
},
),
trailing: GestureDetector(
@ -245,6 +268,7 @@ class _SearchDisplayState extends RefreshableState<SearchWidget> {
),
onTap: () {
searchController.clear();
_focusNode.requestFocus();
onSearchTextChanged("", immediate: true);
},
),