From 0641519d226b5dcd7ff1426e270e8894585a14d9 Mon Sep 17 00:00:00 2001 From: Yaro Kasear Date: Thu, 14 Aug 2025 16:05:31 -0500 Subject: [PATCH] Dropdown refactor. Not ready. --- inventory/static/js/dropdown.js | 12 +++++ .../fragments/_dropdown_fragment.html | 53 ++++++++++++++++++- .../templates/fragments/_list_fragment.html | 10 ++++ inventory/templates/playground.html | 12 +++-- inventory/ui/blueprint.py | 8 ++- inventory/ui/defaults.py | 2 +- 6 files changed, 88 insertions(+), 9 deletions(-) create mode 100644 inventory/templates/fragments/_list_fragment.html 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) %} + + +{% 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)