| | |
| | | } |
| | | } |
| | | |
| | | const removeButton = window.targetCheck(e, '.remove-term'); |
| | | if (removeButton) { |
| | | const termId = removeButton.closest('[data-id]').dataset.id??false; |
| | | if (fieldId && termId) { |
| | | this.removeSelected(parseInt(termId), fieldId); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | const autocomplete = window.targetCheck(e, '.item.autocomplete'); |
| | | |
| | | if (autocomplete) { |
| | |
| | | return; |
| | | } |
| | | |
| | | const removeButton = window.targetCheck(e, '.remove-term'); |
| | | if (removeButton) { |
| | | const termId = removeButton.closest('[data-id]').dataset.id??false; |
| | | if (fieldId && termId) { |
| | | this.removeSelected(parseInt(termId), fieldId); |
| | | } |
| | | return; |
| | | } |
| | | |
| | | if (e.target.matches('.modal-close')) { |
| | | this.updateFieldValue(fieldId); |
| | |
| | | const field = this.fields.get(fieldId); |
| | | if (!field) return; |
| | | if (!field.hasAutocomplete || this.container.open) return; |
| | | if (e.target.closest('.remove-item')) return; |
| | | |
| | | if (e.relatedTarget && field.ui.dropdown.wrapper?.contains(e.relatedTarget)) return; |
| | | |
| | | this.scheduleHideDropdown(fieldId); |
| | |
| | | |
| | | let selectors = this.selectors.field; |
| | | const isFilter = Object.hasOwn(element.dataset,'filter') && element.dataset.filter === 'taxonomy'; |
| | | let button = (isFilter) ? element : element.querySelector('button.taxonomy-toggle'); |
| | | let button = (isFilter) ? element : element.querySelector('button.selector-toggle'); |
| | | |
| | | if (Object.keys(options).length === 0){ |
| | | if (!button) return; |
| | |
| | | |
| | | handleFetchError(error) { |
| | | const field = this.currentField(); |
| | | const message = field |
| | | ? `Failed to load ${field.plural}` |
| | | : 'Failed to load data'; |
| | | this.setMessage(field, true, 'Something went wrong.', false); |
| | | |
| | | this.setMessage(field,true, message, false); |
| | | const conf = this.container.open || field?.isFilter ? this.ui : field?.ui; |
| | | const p = conf?.message?.message; |
| | | |
| | | if (p && !p.querySelector('.clear-cache-btn')) { |
| | | const btn = document.createElement('button'); |
| | | btn.className = 'clear-cache-btn'; |
| | | btn.type = 'button'; |
| | | btn.textContent = 'Clear cache and try again'; |
| | | btn.addEventListener('click', async () => { |
| | | btn.remove(); |
| | | this.store.clearCache(); |
| | | if (this.activeField && field) { |
| | | await this.store.setFilters({ |
| | | taxonomy: field.taxonomy, |
| | | page: 1, |
| | | search: '', |
| | | parent: 0 |
| | | }); |
| | | } |
| | | }); |
| | | p.appendChild(btn); |
| | | } |
| | | |
| | | console.error('Store fetch error:', error); |
| | | } |
| | | async batchFetchTaxonomies() { |