diff --git a/inventory/static/js/dropdown.js b/inventory/static/js/dropdown.js
index 54c3754..c7f0bc1 100644
--- a/inventory/static/js/dropdown.js
+++ b/inventory/static/js/dropdown.js
@@ -90,3 +90,15 @@ const DropdownWidget = (() => {
setButton
};
})();
+
+function DropDown(cfg) {
+ return {
+ id: cfg.id,
+ refreshUrl: cfg.refreshUrl,
+ selectUrl: cfg.selectUrl,
+
+ itemSelect(e) {
+ console.log(e);
+ }
+ };
+}
diff --git a/inventory/templates/fragments/_dropdown_fragment.html b/inventory/templates/fragments/_dropdown_fragment.html
index 61aafd7..f6abfd0 100644
--- a/inventory/templates/fragments/_dropdown_fragment.html
+++ b/inventory/templates/fragments/_dropdown_fragment.html
@@ -40,4 +40,55 @@
-{% endmacro %}
\ No newline at end of file
+{% endmacro %}
+
+
+{% macro dynamic_dropdown(id, list = none, label = none, current_item = none, entry_link = none, enabled = true, refresh_url = none, select_url = none) %}
+
+
+
+
+
+
+
+
+ {% if refresh_url %}
+ {% set url = refresh_url ~ ('&' if '?' in refresh_url else '?') ~ 'view=list&limit=0' %}
+
+ {% endif %}
+
+{% endmacro %}
diff --git a/inventory/templates/fragments/_list_fragment.html b/inventory/templates/fragments/_list_fragment.html
new file mode 100644
index 0000000..487d65e
--- /dev/null
+++ b/inventory/templates/fragments/_list_fragment.html
@@ -0,0 +1,10 @@
+{# templates/fragments/_list_fragment.html #}
+{% for it in options %}
+
+ {{ it.name }}
+
+{% endfor %}
diff --git a/inventory/templates/playground.html b/inventory/templates/playground.html
index a5c09d2..1767fd6 100644
--- a/inventory/templates/playground.html
+++ b/inventory/templates/playground.html
@@ -2,11 +2,13 @@
{% block content %}
{{ combos.render_combobox(
- id='play',
+ id='combo',
label='Breakfast!',
- create_url=url_for('ui.create_item', model_name='brand'),
- edit_url=url_for('ui.update_item', model_name='brand'),
- refresh_url=url_for('ui.list_items', model_name='brand'),
- delete_url=url_for('ui.delete_item', model_name='brand')
+ refresh_url=url_for('ui.list_items', model_name='brand')
+ ) }}
+
+ {{ dropdowns.dynamic_dropdown(
+ id = 'dropdown',
+ refresh_url=url_for('ui.list_items', model_name='user')
) }}
{% endblock %}
\ No newline at end of file
diff --git a/inventory/ui/blueprint.py b/inventory/ui/blueprint.py
index d06fbdd..8d7448a 100644
--- a/inventory/ui/blueprint.py
+++ b/inventory/ui/blueprint.py
@@ -55,9 +55,13 @@ def list_items(model_name):
items = [call(Model, 'ui_serialize', r, view=view) or default_serialize(Model, r, view=view)
for r in rows]
- want_html = (request.args.get("view") == "option") or ("HX-Request" in request.headers)
- if want_html:
+ want_option = (request.args.get("view") == "option")
+ want_list = (request.args.get("view") == "list")
+ print(view)
+ if want_option:
return render_template("fragments/_option_fragment.html", options=items)
+ if want_list:
+ return render_template("fragments/_list_fragment.html", options=items)
return jsonify({"items": items})
@bp.post("//create")
diff --git a/inventory/ui/defaults.py b/inventory/ui/defaults.py
index e30b720..f87ced4 100644
--- a/inventory/ui/defaults.py
+++ b/inventory/ui/defaults.py
@@ -92,7 +92,7 @@ def default_delete(session, Model, ids):
session.commit()
return count
-def default_serialize(Model, obj, *, view='option'):
+def default_serialize(Model, obj, *, view=None):
# 1. Explicit config wins
label_attr = getattr(Model, 'ui_label_attr', None)