diff --git a/inventory/static/js/dropdown.js b/inventory/static/js/dropdown.js index c7f0bc1..bf204b2 100644 --- a/inventory/static/js/dropdown.js +++ b/inventory/static/js/dropdown.js @@ -63,6 +63,7 @@ const DropdownWidget = (() => { } else { clearButton.classList.add("d-none"); button.classList.remove("rounded-end-0"); + button.classList.remove("border-end-0"); button.classList.add("rounded-end"); } } @@ -97,8 +98,68 @@ function DropDown(cfg) { refreshUrl: cfg.refreshUrl, selectUrl: cfg.selectUrl, + selectedId: null, + selectedLabel: '', + + init() { + const v = this.$refs.hidden?.value || ''; + if (v) { + this.selectedId = v; + this.$refs.clear?.classList.remove('d-none'); + } + }, + itemSelect(e) { - console.log(e); + const a = e.currentTarget; + const id = a.dataset.invValue || a.getAttribute('data-inv-value'); + const label = a.textContent.trim(); + + const hidden = this.$refs.hidden; + const button = this.$refs.button; + const clear = this.$refs.clear; + + this.selectedId = id; + this.selectedLabel = label; + if (hidden) hidden.value = id; + + if (button) { + button.textContent = label || '-'; + button.dataset.invValue = id; + button.classList.add("rounded-end-0"); + button.classList.add("border-end-0"); + button.classList.remove("rounded-end"); + } + + clear?.classList.toggle('d-none', !id); + + if (this.selectUrl) { + fetch(this.selectUrl, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ id }) + }).catch(() => {}); + } + }, + + clearSelection() { + const hidden = this.$refs.hidden; + const button = this.$refs.button; + const clear = this.$refs.clear; + + this.selectedId = ''; + this.selectedLabel = ''; + + if (hidden) hidden.value = ''; + if (button) { + button.textContent = '-'; + button.removeAttribute('data-inv-value'); + + button.classList.remove("rounded-end-0"); + button.classList.remove("border-end-0"); + button.classList.add("rounded-end"); + } + clear?.classList.add('d-none'); + this.$dispatch('dropdown:cleared', {}); } }; } diff --git a/inventory/templates/fragments/_dropdown_fragment.html b/inventory/templates/fragments/_dropdown_fragment.html index f6abfd0..9ca3e68 100644 --- a/inventory/templates/fragments/_dropdown_fragment.html +++ b/inventory/templates/fragments/_dropdown_fragment.html @@ -55,22 +55,25 @@ refreshUrl: {{ refresh_url|tojson if refresh_url else "null" }}, selectUrl: {{ select_url|tojson if select_url else "null" }} })' - hx-preserve> + hx-preserve x-init="init()">
- +