From 181938ea32cf2c11d10d56018df22586adff7860 Mon Sep 17 00:00:00 2001
From: Jake Vanderwerf <get@jakevanderwerf.ca>
Date: Sun, 11 Jan 2026 17:07:14 +0000
Subject: [PATCH] =CRUD.js cleanup, DataStore.js filtering optimization
---
assets/js/concise/TaxonomySelector.js | 67 +++++++++++++++++++++++++++++++--
1 files changed, 63 insertions(+), 4 deletions(-)
diff --git a/assets/js/concise/TaxonomySelector.js b/assets/js/concise/TaxonomySelector.js
index 1d84d93..5244f02 100644
--- a/assets/js/concise/TaxonomySelector.js
+++ b/assets/js/concise/TaxonomySelector.js
@@ -411,16 +411,74 @@
this.a11y.announce(message);
}
+ openEmpty(taxonomy, singular, plural, onComplete) {
+ // Store the callback for when modal closes
+ this.emptyCallback = onComplete;
+
+ // Create a temporary "field" for bulk operations
+ const bulkFieldId = `empty-${taxonomy}-${Date.now()}`;
+
+ if (!this.fields.has(bulkFieldId)) {
+ this.fields.set(bulkFieldId, {
+ id: bulkFieldId,
+ taxonomy: taxonomy,
+ singular: singular,
+ plural: plural,
+ canSearch: true,
+ canCreate: false,
+ hasAutocomplete: false,
+ isFilter: false,
+ isEmpty: true,
+ limit: 0,
+ ui: {},
+ element: null,
+ value: null,
+ toggle: null,
+ checked: true
+ });
+ this.selectedTerms.set(bulkFieldId, new Set());
+ }
+
+ this.setField(bulkFieldId);
+ this.ui.modal.title.textContent = `Add to ${plural}`;
+
+ if (this.ui.search?.container) {
+ this.ui.search.container.hidden = false;
+ }
+
+ window.removeChildren(this.ui.selected);
+ window.removeChildren(this.ui.terms.list);
+
+ this.modal.handleOpen();
+ }
+
closeModal() {
const field = this.fields.get(this.activeField);
if (!field) return;
this.observer.unobserve(this.ui.terms.sentinel);
window.removeChildren(this.ui.terms.list);
- this.notify('selected-terms', {
- terms: this.selectedTerms.get(this.activeField),
- taxonomy: field.taxonomy
- });
+ if (field.isEmpty && this.emptyCallback) {
+ const selectedTermIds = Array.from(this.selectedTerms.get(this.activeField) || []);
+ const selectedTerms = selectedTermIds.map(id => this.store.get(id)).filter(Boolean);
+
+ this.emptyCallback({
+ taxonomy: field.taxonomy,
+ termIds: selectedTermIds,
+ terms: selectedTerms
+ });
+
+ // Cleanup temporary bulk field
+ this.fields.delete(this.activeField);
+ this.selectedTerms.delete(this.activeField);
+ this.emptyCallback = null;
+ this.bulkAssignmentTaxonomy = null;
+ } else {
+ this.notify('selected-terms', {
+ terms: this.selectedTerms.get(this.activeField),
+ taxonomy: field.taxonomy
+ });
+ }
this.activeField = null;
@@ -675,6 +733,7 @@
.some(term=>term.taxonomy === taxonomy);
fields.forEach(field => {
+ if (!field.toggle) return;
field.toggle.disabled = !hasItems && !field.canCreate;
field.toggle.title = !hasItems
? `No ${field.singular} available`
--
Gitblit v1.10.0