From 59d2b9cf1a33adc1e89c0c83ff1c0de40ef08b30 Mon Sep 17 00:00:00 2001 From: Oliver Walters Date: Mon, 6 Apr 2020 12:35:59 +1000 Subject: [PATCH] Configurable GET and LIST filters per model type --- lib/inventree/model.dart | 32 ++++++++++++++++++++++++++++---- lib/inventree/part.dart | 9 +++++++++ lib/inventree/stock.dart | 11 +++++++++++ lib/widget/part_display.dart | 3 +-- lib/widget/stock_display.dart | 19 +++++++++++++++++++ 5 files changed, 68 insertions(+), 6 deletions(-) diff --git a/lib/inventree/model.dart b/lib/inventree/model.dart index 40ef716a..38680ba7 100644 --- a/lib/inventree/model.dart +++ b/lib/inventree/model.dart @@ -74,8 +74,13 @@ class InvenTreeModel { } */ + Map defaultListFilters() { return Map(); } + + // A map of "default" headers to use when performing a GET request + Map defaultGetFilters() { return Map(); } + // Return the detail view for the associated pk - Future get(int pk) async { + Future get(int pk, {Map filters}) async { // TODO - Add "timeout" // TODO - Add error catching @@ -86,7 +91,18 @@ class InvenTreeModel { addr += "/"; } - var response = await InvenTreeAPI().get(addr); + var params = defaultGetFilters(); + + if (filters != null) { + // Override any default values + for (String key in filters.keys) { + params[key] = filters[key]; + } + } + + print("GET: $addr ${params.toString()}"); + + var response = await InvenTreeAPI().get(addr, params: params); if (response.statusCode != 200) { print("Error retrieving data"); @@ -105,12 +121,20 @@ class InvenTreeModel { filters = {}; } - print("Listing endpoint: $URL"); + var params = defaultListFilters(); + + if (filters != null) { + for (String key in filters.keys) { + params[key] = filters[key]; + } + } + + print("LIST: $URL ${params.toString()}"); // TODO - Add "timeout" // TODO - Add error catching - var response = await InvenTreeAPI().get(URL, params:filters); + var response = await InvenTreeAPI().get(URL, params:params); // A list of "InvenTreeModel" items List results = new List(); diff --git a/lib/inventree/part.dart b/lib/inventree/part.dart index 6b09842e..3283a19c 100644 --- a/lib/inventree/part.dart +++ b/lib/inventree/part.dart @@ -12,6 +12,15 @@ class InvenTreePartCategory extends InvenTreeModel { @override String URL = "part/category/"; + @override + Map defaultListFilters() { + var filters = new Map(); + + filters["active"] = "true"; + + return filters; + } + String get pathstring => jsondata['pathstring'] ?? ''; String get parentpathstring { diff --git a/lib/inventree/stock.dart b/lib/inventree/stock.dart index 7bfe2bd2..50ccadb5 100644 --- a/lib/inventree/stock.dart +++ b/lib/inventree/stock.dart @@ -6,6 +6,17 @@ class InvenTreeStockItem extends InvenTreeModel { @override String URL = "stock/"; + @override + Map defaultGetFilters() { + + var headers = new Map(); + + headers["part_detail"] = "true"; + headers["location_detail"] = "true"; + + return headers; + } + InvenTreeStockItem() : super(); InvenTreeStockItem.fromJson(Map json) : super.fromJson(json) { diff --git a/lib/widget/part_display.dart b/lib/widget/part_display.dart index 88e47b54..327040d7 100644 --- a/lib/widget/part_display.dart +++ b/lib/widget/part_display.dart @@ -34,8 +34,7 @@ class _PartDisplayState extends State { */ List partTiles() { - List tiles = [ - ]; + List tiles = []; // Image / name / description tiles.add( diff --git a/lib/widget/stock_display.dart b/lib/widget/stock_display.dart index 45c9e041..a4e04a97 100644 --- a/lib/widget/stock_display.dart +++ b/lib/widget/stock_display.dart @@ -33,6 +33,25 @@ class _StockItemDisplayState extends State { } } + /* + * Construct a list of detail elements about this StockItem. + * The number of elements may vary depending on the StockItem details + */ + List stockTiles() { + List tiles = []; + + // Image / name / description + tiles.add( + Card( + child: ListTile( + title: Text("${item.partName}"), + ) + ) + ); + + return tiles; + } + @override Widget build(BuildContext context) { return Scaffold(