From 90a72130dfe6489e82ae2e8ccc48d12cce148433 Mon Sep 17 00:00:00 2001
From: Gregoo <versatile.mailbox@gmail.com>
Date: Tue, 4 Feb 2025 19:05:38 +0100
Subject: [PATCH] Make form.select generic

---
 templates/macro/form.html     | 17 ++++++++---------
 templates/set/management.html |  4 ++--
 2 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/templates/macro/form.html b/templates/macro/form.html
index 9564f35..72af87f 100644
--- a/templates/macro/form.html
+++ b/templates/macro/form.html
@@ -43,26 +43,25 @@
   {% endif %}
 {% endmacro %}
 
-{% macro select(name, item, field, metadata_list, nullable=true, icon=none, delete=false) %}
+{% macro select(name, id, prefix, url, value, metadata_list, nullable=true, icon=none, delete=false) %}
   {% if g.login.is_authenticated() %}
-    {% set prefix=metadata_list.as_prefix() %}
-    <label class="visually-hidden" for="{{ prefix }}-{{ item.fields.id }}">{{ name }}</label>
+    <label class="visually-hidden" for="{{ prefix }}-{{ id }}">{{ name }}</label>
     <div class="input-group">
       {% if icon %}<span class="input-group-text"><i class="ri-{{ icon }} me-1"></i><span class="ms-1 d-none d-md-inline"> {{ name }}</span></span>{% endif %}
-      <select id="{{ prefix }}-{{ item.fields.id }}" class="form-select"
+      <select id="{{ prefix }}-{{ id }}" class="form-select"
         {% if not delete %}
-          data-changer-id="{{ item.fields.id }}" data-changer-prefix="{{ prefix }}" data-changer-url="{{ metadata_list.url_for_set_value(item.fields.id) }}"
+          data-changer-id="{{ id }}" data-changer-prefix="{{ prefix }}" data-changer-url="{{ url }}"
         {% else %}
           disabled
         {% endif %}
         autocomplete="off">
-        {% if nullable %}<option value="" {% if item.fields[field] is none %}selected{% endif %}><i>None</i></option>{% endif %}
+        {% if nullable %}<option value="" {% if value is none %}selected{% endif %}><i>None</i></option>{% endif %}
         {% for metadata in metadata_list %}
-          <option value="{{ metadata.fields.id }}" {% if metadata.fields.id == item.fields[field] %}selected{% endif %}>{{ metadata.fields.name }}</option>
+          <option value="{{ metadata.fields.id }}" {% if metadata.fields.id == value %}selected{% endif %}>{{ metadata.fields.name }}</option>
         {% endfor %}
       </select>
-      <span id="status-{{ prefix }}-{{ item.fields.id }}" class="input-group-text ri-save-line"></span>
-      <button id="clear-{{ prefix }}-{{ item.fields.id }}" type="button" class="btn btn-sm btn-light btn-outline-danger border"><i class="ri-eraser-line"></i></button>
+      <span id="status-{{ prefix }}-{{ id }}" class="input-group-text ri-save-line"></span>
+      <button id="clear-{{ prefix }}-{{ id }}" type="button" class="btn btn-sm btn-light btn-outline-danger border"><i class="ri-eraser-line"></i></button>
     </div>
   {% endif %}
 {% endmacro %}
diff --git a/templates/set/management.html b/templates/set/management.html
index 744c961..ade6729 100644
--- a/templates/set/management.html
+++ b/templates/set/management.html
@@ -25,7 +25,7 @@
         </div>
         <div class="col-12 flex-grow-1">
           {% if brickset_purchase_locations | length %}
-            {{ form.select('Location', item, 'purchase_location', brickset_purchase_locations, icon='building-line', delete=delete) }}
+            {{ form.select('Location', item.fields.id, brickset_purchase_locations.as_prefix(), brickset_purchase_locations.url_for_set_value(item.fields.id), item.fields.purchase_location, brickset_purchase_locations, icon='building-line', delete=delete) }}
           {% else %}
             <i class="ri-error-warning-line"></i> No purchase location found.
           {% endif %}
@@ -36,7 +36,7 @@
     {{ accordion.footer() }}
     {{ accordion.header('Storage', 'storage', 'set-management', icon='archive-2-line') }}
       {% if brickset_storages | length %}
-        {{ form.select('Storage', item, 'storage', brickset_storages, delete=delete) }}
+      {{ form.select('Storage', item.fields.id, brickset_storages.as_prefix(), brickset_storages.url_for_set_value(item.fields.id), item.fields.storage, brickset_storages, icon='building-line', delete=delete) }}
       {% else %}
         <p class="text-center"><i class="ri-error-warning-line"></i> No storage found.</p>
       {% endif %}