/* Yoone Product Bundles - Admin dynamic grouping terms * When switching grouping taxonomy (category/tag), refresh the terms select list accordingly. */ (function($){ $(function(){ var $tax = $('#yoone_bundle_group_taxonomy'); var $terms = $('#yoone_bundle_group_terms'); var $addAllBtn = $('.yoone-add-all-simple-products'); var $clearBtn = $('.yoone-clear-products-list'); var $productSelect = $('select[name="yoone_bundle_allowed_products[]"]'); var $selectMode = $('#yoone_bundle_select_mode'); var $productsField = $('#yoone_bundle_products_list_field'); if (typeof YoonePBAdmin === 'undefined') { return; } function refreshTerms(tax) { if (!tax) return; $terms.prop('disabled', true); $.post(YoonePBAdmin.ajax_url, { action: 'yoone_get_taxonomy_terms', taxonomy: tax, security: YoonePBAdmin.security }).done(function(resp){ if (resp && resp.success && Array.isArray(resp.data)) { var items = resp.data; $terms.empty(); items.forEach(function(item){ var opt = $('').val(item.id).text(item.text); $terms.append(opt); }); // re-init enhanced selects $(document.body).trigger('wc-enhanced-select-init'); } }).always(function(){ $terms.prop('disabled', false); }); } $tax.on('change', function(){ var val = $(this).val(); refreshTerms(val); }); function updateProductsListState() { var mode = $selectMode.val(); var isAll = (mode === 'all'); // 在 All 模式下,隐藏整个选择框字段;其它模式显示并更新标签文案 if ($productsField.length) { $productsField.toggle(!isAll); var $label = $productsField.find('> label'); if ($label.length) { $label.text(mode === 'exclude' ? 'Excluded Products' : 'Included Products'); } var $desc = $productsField.find('.yoone-bundle-list-desc'); if ($desc.length) { if (mode === 'exclude') { $desc.text('Simple products only. In Exclude mode, ALL published simple products are available EXCEPT the listed ones.'); } else { $desc.text('Simple products only. In Include mode, ONLY the listed products will be available.'); } } } // 额外:在 All 模式下禁用按钮与选择框(避免误操作) $productSelect.prop('disabled', isAll); $addAllBtn.prop('disabled', isAll); } if ($selectMode.length) { updateProductsListState(); $selectMode.on('change', updateProductsListState); } // Add all simple products to the products select if ($addAllBtn.length && $productSelect.length) { $addAllBtn.on('click', function(){ var $btn = $(this); var mode = $selectMode.val(); if (mode === 'exclude') { // 在排除模式下“添加全部”会导致有效商品为空,先弹出确认。 var ok = window.confirm('You are in Exclude mode. Adding ALL simple products to the exclusion list will result in NO effective products. Continue?'); if (!ok) return; } $btn.prop('disabled', true); $productSelect.prop('disabled', true); $.post(YoonePBAdmin.ajax_url, { action: 'yoone_get_all_simple_products', security: YoonePBAdmin.security }).done(function(resp){ if (resp && resp.success && Array.isArray(resp.data)) { // Clear then add all as selected $productSelect.empty(); resp.data.forEach(function(item){ var existing = $productSelect.find('option[value="'+item.id+'"]'); if (!existing.length) { var opt = $('').val(item.id).text(item.text).prop('selected', true); $productSelect.append(opt); } else { existing.prop('selected', true); } }); // Trigger change for select2/Woo product search $productSelect.trigger('change'); } }).always(function(){ $btn.prop('disabled', false); $productSelect.prop('disabled', false); }); }); } // Clear products list quickly if ($clearBtn.length && $productSelect.length) { $clearBtn.on('click', function(){ $productSelect.find('option').prop('selected', false); // For select2/Woo product search, simply trigger change after clearing selection $productSelect.val([]).trigger('change'); }); } }); })(jQuery); function renderEffectiveList(items, count) { var $list = $('#yoone_effective_products_list'); var $count = $('.yoone-effective-count'); if (!$list.length || !$count.length) return; $count.text(count || 0); var html = ''; if (items && items.length) { html += '
No products will be available with the current configuration.
'; } $list.html(html); } function recomputeEffective() { if (typeof YoonePBAdmin === 'undefined') return; var mode = $selectMode.val(); var allowed = $productSelect.val() || []; $.post(YoonePBAdmin.ajax_url, { action: 'yoone_calc_effective_products', security: YoonePBAdmin.security, select_mode: mode, allowed_products: allowed }).done(function(resp){ if (resp && resp.success && resp.data) { renderEffectiveList(resp.data.items || [], resp.data.count || 0); } }); } // 初始化:根据当前模式更新显示并首次计算有效列表 updateProductsListState(); recomputeEffective(); // 事件:模式切换与列表变更时重新计算 if ($selectMode.length) { $selectMode.on('change', function(){ updateProductsListState(); recomputeEffective(); }); } if ($productSelect.length) { $productSelect.on('change', recomputeEffective); } // 刷新按钮:手动触发重新计算 var $refresh = $('.yoone-refresh-effective-products'); if ($refresh.length) { $refresh.on('click', function(){ recomputeEffective(); }); }