(function () { const triggerTypeInputs = document.querySelectorAll('.trigger-type'); const triggerProductWrapper = document.getElementById('trigger-product-wrapper'); const triggerCategoryWrapper = document.getElementById('trigger-category-wrapper'); const triggerAmountWrapper = document.getElementById('trigger-amount-wrapper'); const triggerValueInput = document.getElementById('trigger_value'); const triggerProductSearch = document.getElementById('trigger_product_search'); const triggerProductResults = document.getElementById('trigger_product_results'); const targetProductSearch = document.getElementById('target_product_search'); const targetProductResults = document.getElementById('target_product_results'); const targetProductIdInput = document.getElementById('target_product_id'); function setTriggerVisibility() { const selected = document.querySelector('input[name="trigger_type"]:checked'); const value = selected ? selected.value : 'product'; triggerProductWrapper.classList.toggle('hidden', value !== 'product'); triggerCategoryWrapper.classList.toggle('hidden', value !== 'category'); triggerAmountWrapper.classList.toggle('hidden', value !== 'cart_total'); if (value !== 'product' && triggerProductSearch) { triggerValueInput.value = ''; } } function searchProducts(inputElement, resultsContainer, targetInput) { const term = inputElement.value.trim(); if (!term) { resultsContainer.classList.add('hidden'); resultsContainer.innerHTML = ''; return; } const formData = new URLSearchParams(); formData.append('action', 'sodino_search_products'); formData.append('security', sodinoUpsellAdmin.nonce); formData.append('term', term); fetch(ajaxurl, { method: 'POST', credentials: 'same-origin', body: formData, }) .then(response => response.json()) .then(data => { if (!Array.isArray(data)) { resultsContainer.classList.add('hidden'); return; } const items = data.map(product => { const button = document.createElement('button'); button.type = 'button'; button.className = 'w-full text-right px-4 py-3 hover:bg-blue-50 focus:bg-blue-50'; button.textContent = product.label; button.addEventListener('click', function () { if (targetInput) { targetInput.value = product.id; inputElement.value = product.label; } else { triggerValueInput.value = product.id; inputElement.value = product.label; } resultsContainer.classList.add('hidden'); }); return button; }); resultsContainer.innerHTML = ''; items.forEach(item => resultsContainer.appendChild(item)); resultsContainer.classList.toggle('hidden', items.length === 0); }) .catch(() => { resultsContainer.classList.add('hidden'); }); } if (triggerTypeInputs.length) { triggerTypeInputs.forEach(input => { input.addEventListener('change', setTriggerVisibility); }); setTriggerVisibility(); } if (triggerProductSearch) { triggerProductSearch.addEventListener('input', function () { searchProducts(triggerProductSearch, triggerProductResults, null); }); } if (targetProductSearch) { targetProductSearch.addEventListener('input', function () { searchProducts(targetProductSearch, targetProductResults, targetProductIdInput); }); } document.addEventListener('click', function (event) { if (triggerProductResults && !triggerProductResults.contains(event.target) && event.target !== triggerProductSearch) { triggerProductResults.classList.add('hidden'); } if (targetProductResults && !targetProductResults.contains(event.target) && event.target !== targetProductSearch) { targetProductResults.classList.add('hidden'); } }); })();