From 537dbeec2cfe08ae057744e041413e1e6c9f1d38 Mon Sep 17 00:00:00 2001
From: Julian Rother <julian@cccv.de>
Date: Sat, 4 Mar 2023 03:55:22 +0100
Subject: [PATCH] Add basic item search

---
 warehouse/__init__.py              | 10 +++++++++-
 warehouse/templates/item/list.html |  8 +++++++-
 2 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/warehouse/__init__.py b/warehouse/__init__.py
index 69a48b9..a12f9b4 100644
--- a/warehouse/__init__.py
+++ b/warehouse/__init__.py
@@ -99,7 +99,15 @@ def logout():
 
 @app.route('/items/')
 def item_list():
-	return render_template('item/list.html', page=Item.query.order_by('name').paginate(per_page=10))
+	query = Item.query
+	if 'search' in request.values:
+		item = Item.query.get(request.values['search'].strip().upper())
+		if item:
+			return redirect(url_for('item_view', item_id=item.id))
+		keywords = request.values['search'].strip().split()
+		for keyword in keywords:
+			query = query.filter(db.or_(Item.name.contains(keyword), Item.description.contains(keyword)))
+	return render_template('item/list.html', page=query.order_by('name').paginate(per_page=10))
 
 @app.route('/items/add', methods=['GET', 'POST'])
 def item_add():
diff --git a/warehouse/templates/item/list.html b/warehouse/templates/item/list.html
index a2a63ab..4ebe051 100644
--- a/warehouse/templates/item/list.html
+++ b/warehouse/templates/item/list.html
@@ -1,7 +1,13 @@
 {% extends 'layout.html' %}
 
 {% block body %}
-<div class="btn-toolbar float-end" role="toolbar">
+<div class="d-flex justify-content-between gap-1">
+	<form class="form-inline">
+		<div class="input-group">
+			<input type="text" class="form-control" name="search" value="{{ request.args.search }}" placeholder="Search" autofocus>
+			<button class="btn btn-outline-secondary" type="submit">Search</button>
+		</div>
+	</form>
 	<a href="{{ url_for('item_add') }}" class="btn btn-primary">Add</a>
 </div>
 <table class="table table-hover">
-- 
GitLab