From d539b33319329cf0c2cb8657a7da2109d7c5a053 Mon Sep 17 00:00:00 2001 From: Ajay D'Souza Date: Wed, 25 Mar 2026 17:22:54 +0530 Subject: [PATCH] Fix query parameter separator in API fetch URLs --- includes/admin/js/classic-sections-metabox.js | 3 ++- includes/admin/js/classic-sections-metabox.min.js | 2 +- includes/admin/js/editor-sections-panel.js | 3 ++- includes/admin/js/editor-sections-panel.min.js | 2 +- 4 files changed, 6 insertions(+), 4 deletions(-) diff --git a/includes/admin/js/classic-sections-metabox.js b/includes/admin/js/classic-sections-metabox.js index e7a845b..e7ecaec 100644 --- a/includes/admin/js/classic-sections-metabox.js +++ b/includes/admin/js/classic-sections-metabox.js @@ -341,7 +341,8 @@ inflightKey = key; renderSections([]); - apiFetch({ url: `${config.endpoint}?products=${encodeURIComponent(key)}` }) + const separator = config.endpoint.indexOf('?') !== -1 ? '&' : '?'; + apiFetch({ url: `${config.endpoint}${separator}products=${encodeURIComponent(key)}` }) .then((terms) => { if (inflightKey !== key) { return; diff --git a/includes/admin/js/classic-sections-metabox.min.js b/includes/admin/js/classic-sections-metabox.min.js index e8d5887..de6cdad 100644 --- a/includes/admin/js/classic-sections-metabox.min.js +++ b/includes/admin/js/classic-sections-metabox.min.js @@ -1 +1 @@ -!function(e,t){if(!e.wp||!e.wp.apiFetch||!t)return;const n=e.WZKBClassicSections||{};if(!n.endpoint)return;const s=e.wp.apiFetch;n.nonce&&s.createNonceMiddleware&&(e.wzkbClassicNonceMiddlewareAdded||(s.use(s.createNonceMiddleware(n.nonce)),e.wzkbClassicNonceMiddlewareAdded=!0));const r=t.querySelector('.wzkb-classic-sections[data-role="root"]');if(!r)return;const c=r.querySelector('[data-role="products"]'),o=r.querySelector('[data-role="sections"]'),a=t.getElementById("wzkb_classic_product_ids"),i=t.getElementById("wzkb_classic_section_ids"),d=r.querySelector('[data-role="product-search"]'),l=n.strings||{},p=n.products||{},u=new Set(Array.isArray(n.meta?.products)?n.meta.products:[]),h=new Set(Array.isArray(n.meta?.sections)?n.meta.sections:[]),f=new Map;let m=!1,b=null,w=null,g="";const y=Object.keys(p).map(e=>({id:parseInt(e,10),label:p[e]})).filter(e=>Number.isFinite(e.id)&&e.id>0).sort((e,t)=>(e.label||"").localeCompare(t.label||"")),_=e=>(Array.isArray(e)?e:[]).map(e=>parseInt(e,10)).filter(e=>Number.isFinite(e)&&e>0),k=e=>Array.from(e).sort((e,t)=>e-t).join(","),C=()=>{a&&(a.value=k(u)),i&&(i.value=k(h))},v=(e,n,s)=>{const r=t.createElement(e);return n&&(r.className=n),s&&(r.textContent=s),r},A=(e,t)=>{e.innerHTML="",e.appendChild(v("p","wzkb-classic-sections__message",t))},z=e=>{if(!Array.isArray(e))return[];const t=new Map;e.forEach(e=>{t.set(e.id,{id:e.id,name:e.name,parent:e.parent,children:[]})});const n=[];t.forEach(e=>{e.parent&&t.has(e.parent)?t.get(e.parent).children.push(e):n.push(e)});const s=e=>e.sort((e,t)=>e.name.localeCompare(t.name)).map(e=>({...e,children:s(e.children)}));return s(n)},E=()=>{c.innerHTML="";const e=(()=>{if(!g)return y;const e=g.toLowerCase();return y.filter(t=>-1!==(t.label||"").toLowerCase().indexOf(e)||-1!==String(t.id).indexOf(e))})();if(!e.length)return void A(c,l.noProductMatches||"No products match your search.");const t=v("div","wzkb-classic-sections__product-list");if(e.slice(0,15).forEach(e=>{const n=v("label","wzkb-classic-sections__product-item"),s=v("input");s.type="checkbox",s.value=e.id,s.checked=u.has(e.id),s.addEventListener("change",t=>{t.target.checked?u.add(e.id):u.delete(e.id),C(),I()});const r=v("span","wzkb-classic-sections__product-label",e.label||`Product ${e.id}`);n.appendChild(s),n.appendChild(r),t.appendChild(n)}),e.length>15){const n=v("p","wzkb-classic-sections__product-note",(l.productOverflow||"Showing first %1$s products out of %2$s. Refine your search.").replace("%1$s",15).replace("%2$s",e.length));t.appendChild(n)}c.appendChild(t)},S=e=>{if(o.innerHTML="",!u.size)return void A(o,l.selectProducts||"Select a product to load its sections.");if(m)return void A(o,l.loading||"Loading sections…");if(b)return void A(o,l.error||"Unable to load sections.");const t=((e,t)=>{if(!Array.isArray(e)||!t.length)return[];const n=new Map;e.forEach(e=>{const s=Number.isFinite(parseInt(e.product,10))?parseInt(e.product,10):0,r=s>0?s:0;s>0&&!t.includes(s)||(n.has(r)||n.set(r,[]),n.get(r).push(e))});const s=[];return t.forEach(e=>{n.has(e)&&(s.push({productId:e,label:(l.productHeading||"%s sections").replace("%s",p[e]||e),nodes:z(n.get(e))}),n.delete(e))}),n.has(0)&&(s.push({productId:0,label:l.unassigned||"Sections without a product",nodes:z(n.get(0))}),n.delete(0)),n.forEach((e,t)=>{s.push({productId:t,label:(l.productHeading||"%s sections").replace("%s",p[t]||t),nodes:z(e)})}),s.filter(e=>e.nodes.length)})(e,Array.from(u));t.length?t.forEach(e=>{const t=v("div","wzkb-classic-sections__group");t.appendChild(v("h4","wzkb-classic-sections__group-title",e.label));const n=v("div","wzkb-classic-sections__tree");M(n,e.nodes,0),t.appendChild(n),o.appendChild(t)}):A(o,l.noSections||"No sections match the selected products.")},M=(e,t,n)=>{t.forEach(t=>{const s=v("div","wzkb-classic-sections__node");s.style.marginLeft=16*n+"px";const r=v("input");r.type="checkbox",r.value=t.id,r.checked=h.has(t.id),r.addEventListener("change",e=>{e.target.checked?h.add(t.id):h.delete(t.id),C()});const c=v("span","wzkb-classic-sections__node-label",t.name);s.appendChild(r),s.appendChild(c),e.appendChild(s),t.children&&t.children.length&&M(e,t.children,n+1)})},I=()=>{const e=Array.from(u);if(!e.length)return b=null,void S([]);const t=e.sort((e,t)=>e-t).join(",");if(f.has(t))return b=null,void S(f.get(t));m=!0,b=null,w=t,S([]),s({url:`${n.endpoint}?products=${encodeURIComponent(t)}`}).then(e=>{w===t&&(m=!1,f.set(t,Array.isArray(e)?e:[]),S(f.get(t)))}).catch(e=>{w===t&&(m=!1,b=e,S([]))})};(()=>{const t=_(n.meta?.products||[]),s=_(n.meta?.sections||[]);u.clear(),t.forEach(e=>u.add(e)),h.clear(),s.forEach(e=>h.add(e)),C(),d&&(l.searchPlaceholder&&(d.placeholder=l.searchPlaceholder),d.addEventListener("input",(()=>{let t=null;return function(n){e.clearTimeout(t),t=e.setTimeout(()=>{g=(n.target.value||"").trim(),E()},150)}})())),E(),I()})()}(window,document); \ No newline at end of file +!function(e,t){if(!e.wp||!e.wp.apiFetch||!t)return;const n=e.WZKBClassicSections||{};if(!n.endpoint)return;const s=e.wp.apiFetch;n.nonce&&s.createNonceMiddleware&&(e.wzkbClassicNonceMiddlewareAdded||(s.use(s.createNonceMiddleware(n.nonce)),e.wzkbClassicNonceMiddlewareAdded=!0));const r=t.querySelector('.wzkb-classic-sections[data-role="root"]');if(!r)return;const c=r.querySelector('[data-role="products"]'),o=r.querySelector('[data-role="sections"]'),a=t.getElementById("wzkb_classic_product_ids"),i=t.getElementById("wzkb_classic_section_ids"),d=r.querySelector('[data-role="product-search"]'),l=n.strings||{},p=n.products||{},u=new Set(Array.isArray(n.meta?.products)?n.meta.products:[]),h=new Set(Array.isArray(n.meta?.sections)?n.meta.sections:[]),f=new Map;let m=!1,b=null,w=null,g="";const y=Object.keys(p).map(e=>({id:parseInt(e,10),label:p[e]})).filter(e=>Number.isFinite(e.id)&&e.id>0).sort((e,t)=>(e.label||"").localeCompare(t.label||"")),_=e=>(Array.isArray(e)?e:[]).map(e=>parseInt(e,10)).filter(e=>Number.isFinite(e)&&e>0),k=e=>Array.from(e).sort((e,t)=>e-t).join(","),C=()=>{a&&(a.value=k(u)),i&&(i.value=k(h))},v=(e,n,s)=>{const r=t.createElement(e);return n&&(r.className=n),s&&(r.textContent=s),r},A=(e,t)=>{e.innerHTML="",e.appendChild(v("p","wzkb-classic-sections__message",t))},z=e=>{if(!Array.isArray(e))return[];const t=new Map;e.forEach(e=>{t.set(e.id,{id:e.id,name:e.name,parent:e.parent,children:[]})});const n=[];t.forEach(e=>{e.parent&&t.has(e.parent)?t.get(e.parent).children.push(e):n.push(e)});const s=e=>e.sort((e,t)=>e.name.localeCompare(t.name)).map(e=>({...e,children:s(e.children)}));return s(n)},E=()=>{c.innerHTML="";const e=(()=>{if(!g)return y;const e=g.toLowerCase();return y.filter(t=>-1!==(t.label||"").toLowerCase().indexOf(e)||-1!==String(t.id).indexOf(e))})();if(!e.length)return void A(c,l.noProductMatches||"No products match your search.");const t=v("div","wzkb-classic-sections__product-list");if(e.slice(0,15).forEach(e=>{const n=v("label","wzkb-classic-sections__product-item"),s=v("input");s.type="checkbox",s.value=e.id,s.checked=u.has(e.id),s.addEventListener("change",t=>{t.target.checked?u.add(e.id):u.delete(e.id),C(),I()});const r=v("span","wzkb-classic-sections__product-label",e.label||`Product ${e.id}`);n.appendChild(s),n.appendChild(r),t.appendChild(n)}),e.length>15){const n=v("p","wzkb-classic-sections__product-note",(l.productOverflow||"Showing first %1$s products out of %2$s. Refine your search.").replace("%1$s",15).replace("%2$s",e.length));t.appendChild(n)}c.appendChild(t)},S=e=>{if(o.innerHTML="",!u.size)return void A(o,l.selectProducts||"Select a product to load its sections.");if(m)return void A(o,l.loading||"Loading sections…");if(b)return void A(o,l.error||"Unable to load sections.");const t=((e,t)=>{if(!Array.isArray(e)||!t.length)return[];const n=new Map;e.forEach(e=>{const s=Number.isFinite(parseInt(e.product,10))?parseInt(e.product,10):0,r=s>0?s:0;s>0&&!t.includes(s)||(n.has(r)||n.set(r,[]),n.get(r).push(e))});const s=[];return t.forEach(e=>{n.has(e)&&(s.push({productId:e,label:(l.productHeading||"%s sections").replace("%s",p[e]||e),nodes:z(n.get(e))}),n.delete(e))}),n.has(0)&&(s.push({productId:0,label:l.unassigned||"Sections without a product",nodes:z(n.get(0))}),n.delete(0)),n.forEach((e,t)=>{s.push({productId:t,label:(l.productHeading||"%s sections").replace("%s",p[t]||t),nodes:z(e)})}),s.filter(e=>e.nodes.length)})(e,Array.from(u));t.length?t.forEach(e=>{const t=v("div","wzkb-classic-sections__group");t.appendChild(v("h4","wzkb-classic-sections__group-title",e.label));const n=v("div","wzkb-classic-sections__tree");M(n,e.nodes,0),t.appendChild(n),o.appendChild(t)}):A(o,l.noSections||"No sections match the selected products.")},M=(e,t,n)=>{t.forEach(t=>{const s=v("div","wzkb-classic-sections__node");s.style.marginLeft=16*n+"px";const r=v("input");r.type="checkbox",r.value=t.id,r.checked=h.has(t.id),r.addEventListener("change",e=>{e.target.checked?h.add(t.id):h.delete(t.id),C()});const c=v("span","wzkb-classic-sections__node-label",t.name);s.appendChild(r),s.appendChild(c),e.appendChild(s),t.children&&t.children.length&&M(e,t.children,n+1)})},I=()=>{const e=Array.from(u);if(!e.length)return b=null,void S([]);const t=e.sort((e,t)=>e-t).join(",");if(f.has(t))return b=null,void S(f.get(t));m=!0,b=null,w=t,S([]);const r=-1!==n.endpoint.indexOf("?")?"&":"?";s({url:`${n.endpoint}${r}products=${encodeURIComponent(t)}`}).then(e=>{w===t&&(m=!1,f.set(t,Array.isArray(e)?e:[]),S(f.get(t)))}).catch(e=>{w===t&&(m=!1,b=e,S([]))})};(()=>{const t=_(n.meta?.products||[]),s=_(n.meta?.sections||[]);u.clear(),t.forEach(e=>u.add(e)),h.clear(),s.forEach(e=>h.add(e)),C(),d&&(l.searchPlaceholder&&(d.placeholder=l.searchPlaceholder),d.addEventListener("input",(()=>{let t=null;return function(n){e.clearTimeout(t),t=e.setTimeout(()=>{g=(n.target.value||"").trim(),E()},150)}})())),E(),I()})()}(window,document); \ No newline at end of file diff --git a/includes/admin/js/editor-sections-panel.js b/includes/admin/js/editor-sections-panel.js index a55f2dd..fa5ba0a 100644 --- a/includes/admin/js/editor-sections-panel.js +++ b/includes/admin/js/editor-sections-panel.js @@ -135,8 +135,9 @@ let wzkbSectionsNonceMiddlewareAdded = false; })); const query = encodeURIComponent(productKey); + const separator = config.endpoint.indexOf('?') !== -1 ? '&' : '?'; - apiFetch({ url: config.endpoint + '?products=' + query }) + apiFetch({ url: config.endpoint + separator + 'products=' + query }) .then((terms) => { if (isCancelled) { return; diff --git a/includes/admin/js/editor-sections-panel.min.js b/includes/admin/js/editor-sections-panel.min.js index 03c395f..3823675 100644 --- a/includes/admin/js/editor-sections-panel.min.js +++ b/includes/admin/js/editor-sections-panel.min.js @@ -1 +1 @@ -let wzkbSectionsNonceMiddlewareAdded=!1;!function(){if(!(window.wp&&window.wp.data&&window.wp.components&&window.wp.element&&window.wp.hooks))return;const e=window.WZKBEditorSections||{};if(!e.endpoint)return;const t=e.strings||{},{components:{Spinner:o,Notice:n,CheckboxControl:s},element:{createElement:r,useEffect:i,useMemo:d,useState:c},data:{useSelect:a,useDispatch:l},hooks:{addFilter:u}}=window.wp,p=window.wp.apiFetch;if(!(u&&s&&a&&p))return;e.nonce&&p.createNonceMiddleware&&!wzkbSectionsNonceMiddlewareAdded&&(p.use(p.createNonceMiddleware(e.nonce)),wzkbSectionsNonceMiddlewareAdded=!0);const w=e=>Array.isArray(e)?e.map(e=>parseInt(e,10)).filter(e=>Number.isFinite(e)&&e>0):[],g=e=>e.slice().sort((e,t)=>e-t),h=(e,t)=>{if(e.length!==t.length)return!1;const o=g(e),n=g(t);for(let e=0;e{if(!Array.isArray(e)||!e.length)return[];const t=new Map;e.forEach(e=>{const o={id:e.id,name:e.name,parent:e.parent,children:[]};t.set(o.id,o)});const o=[];t.forEach(e=>{e.parent&&t.has(e.parent)?t.get(e.parent).children.push(e):o.push(e)});const n=e=>e.sort((e,t)=>e.name.localeCompare(t.name)).map(e=>({...e,children:n(e.children)}));return n(o)},b=()=>window.wp&&window.wp.data&&window.wp.data.select("core/editor").getEditedPostAttribute("meta")||{},_=o=>{const n=o&&e.products&&e.products[o]||`Product ${o}`;return(t.productHeading||"%s sections").replace("%s",n)},k=({nodes:e,selectedIds:t,onToggle:o,level:n})=>e&&e.length?e.map(e=>{const i="section-node-"+e.id;return r("div",{key:i,className:"wzkb-editor-sections__node"+(n>0?" wzkb-editor-sections__node--child":""),style:{marginLeft:n>0?24*n:0}},r(s,{label:e.name,checked:t.has(e.id),onChange:t=>o(e.id,t)}),e.children&&e.children.length?r(k,{nodes:e.children,selectedIds:t,onToggle:o,level:n+1}):null)}):null,f=()=>{const s=a(e=>e("core/editor").getEditedPostAttribute("meta")||{},[]),u=w(s._wzkb_product_ids||[]),f=w(s._wzkb_section_ids||[]),z=w(a(e=>e("core/editor").getEditedPostAttribute("wzkb_product")||[],[])),y=w(a(e=>e("core/editor").getEditedPostAttribute("wzkb_category")||[],[])),{editPost:N}=l("core/editor");i(()=>{if(h(u,z))return;const e=b();N({meta:{...e,_wzkb_product_ids:z}})},[u.join(","),z.join(","),N]),i(()=>{if(h(f,y))return;const e=b();N({meta:{...e,_wzkb_section_ids:y}})},[f.join(","),y.join(","),N]);const{items:A,isLoading:E,error:S}=(t=>{const[o,n]=c({items:[],isLoading:!1,error:null}),s=g(t).join(",");return i(()=>{if(!t.length)return void n({items:[],isLoading:!1,error:null});let o=!1;n(e=>({...e,isLoading:!0,error:null}));const r=encodeURIComponent(s);return p({url:e.endpoint+"?products="+r}).then(e=>{o||n({items:Array.isArray(e)?e:[],isLoading:!1,error:null})}).catch(e=>{o||n({items:[],isLoading:!1,error:e})}),()=>{o=!0}},[s]),o})(u),I=d(()=>((e,o)=>{if(!Array.isArray(e)||!e.length)return[];const n=new Map;e.forEach(e=>{const t=Number.isFinite(parseInt(e.product,10))?parseInt(e.product,10):0;if(t>0&&!o.includes(t))return;const s=t>0?t:0;n.has(s)||n.set(s,[]),n.get(s).push(e)});const s=[];return o.forEach(e=>{n.has(e)&&(s.push({productId:e,label:_(e),nodes:m(n.get(e))}),n.delete(e))}),n.has(0)&&(s.push({productId:0,label:t.unassigned||"Sections without a product",nodes:m(n.get(0))}),n.delete(0)),n.forEach((e,t)=>{s.push({productId:t,label:_(t),nodes:m(e)})}),s.filter(e=>e.nodes.length)})(A,u),[A,u.join(",")]),v=d(()=>new Set(f),[f.join(",")]),P=(e,t)=>{const o=new Set(v);t?o.add(e):o.delete(e);const n=Array.from(o).sort((e,t)=>e-t),s=b();N({meta:{...s,_wzkb_section_ids:n},wzkb_category:n})},L=u.length?S?r(n,{status:"error",isDismissible:!1,className:"wzkb-editor-sections__notice"},t.error||"Unable to load sections. Please try again."):E?r("div",{className:"wzkb-editor-sections__loading"},r(o,null),r("p",null,t.loading||"Loading sections…")):I.length?I.map(e=>r("div",{key:"group-"+e.productId,className:"wzkb-editor-sections__group"},r("h4",{className:"wzkb-editor-sections__group-title"},e.label),r("div",{className:"wzkb-editor-sections__tree"},r(k,{nodes:e.nodes,selectedIds:v,onToggle:P,level:0})))):r("p",{className:"wzkb-editor-sections__empty"},t.noSections||"No sections match the selected products."):r("p",{className:"wzkb-editor-sections__message"},t.selectProducts||"Select a product to load its sections.");return r("div",{className:"wzkb-editor-sections__container"},L)};u("editor.PostTaxonomyType","wzkb/custom-sections-panel",e=>function(t){return t&&"wzkb_category"===t.slug?r(f,{label:t.label}):r(e,t)})}(); \ No newline at end of file +let wzkbSectionsNonceMiddlewareAdded=!1;!function(){if(!(window.wp&&window.wp.data&&window.wp.components&&window.wp.element&&window.wp.hooks))return;const e=window.WZKBEditorSections||{};if(!e.endpoint)return;const t=e.strings||{},{components:{Spinner:o,Notice:n,CheckboxControl:s},element:{createElement:r,useEffect:i,useMemo:d,useState:c},data:{useSelect:a,useDispatch:l},hooks:{addFilter:u}}=window.wp,p=window.wp.apiFetch;if(!(u&&s&&a&&p))return;e.nonce&&p.createNonceMiddleware&&!wzkbSectionsNonceMiddlewareAdded&&(p.use(p.createNonceMiddleware(e.nonce)),wzkbSectionsNonceMiddlewareAdded=!0);const w=e=>Array.isArray(e)?e.map(e=>parseInt(e,10)).filter(e=>Number.isFinite(e)&&e>0):[],g=e=>e.slice().sort((e,t)=>e-t),h=(e,t)=>{if(e.length!==t.length)return!1;const o=g(e),n=g(t);for(let e=0;e{if(!Array.isArray(e)||!e.length)return[];const t=new Map;e.forEach(e=>{const o={id:e.id,name:e.name,parent:e.parent,children:[]};t.set(o.id,o)});const o=[];t.forEach(e=>{e.parent&&t.has(e.parent)?t.get(e.parent).children.push(e):o.push(e)});const n=e=>e.sort((e,t)=>e.name.localeCompare(t.name)).map(e=>({...e,children:n(e.children)}));return n(o)},b=()=>window.wp&&window.wp.data&&window.wp.data.select("core/editor").getEditedPostAttribute("meta")||{},_=o=>{const n=o&&e.products&&e.products[o]||`Product ${o}`;return(t.productHeading||"%s sections").replace("%s",n)},k=({nodes:e,selectedIds:t,onToggle:o,level:n})=>e&&e.length?e.map(e=>{const i="section-node-"+e.id;return r("div",{key:i,className:"wzkb-editor-sections__node"+(n>0?" wzkb-editor-sections__node--child":""),style:{marginLeft:n>0?24*n:0}},r(s,{label:e.name,checked:t.has(e.id),onChange:t=>o(e.id,t)}),e.children&&e.children.length?r(k,{nodes:e.children,selectedIds:t,onToggle:o,level:n+1}):null)}):null,f=()=>{const s=a(e=>e("core/editor").getEditedPostAttribute("meta")||{},[]),u=w(s._wzkb_product_ids||[]),f=w(s._wzkb_section_ids||[]),z=w(a(e=>e("core/editor").getEditedPostAttribute("wzkb_product")||[],[])),y=w(a(e=>e("core/editor").getEditedPostAttribute("wzkb_category")||[],[])),{editPost:N}=l("core/editor");i(()=>{if(h(u,z))return;const e=b();N({meta:{...e,_wzkb_product_ids:z}})},[u.join(","),z.join(","),N]),i(()=>{if(h(f,y))return;const e=b();N({meta:{...e,_wzkb_section_ids:y}})},[f.join(","),y.join(","),N]);const{items:A,isLoading:E,error:S}=(t=>{const[o,n]=c({items:[],isLoading:!1,error:null}),s=g(t).join(",");return i(()=>{if(!t.length)return void n({items:[],isLoading:!1,error:null});let o=!1;n(e=>({...e,isLoading:!0,error:null}));const r=encodeURIComponent(s),i=-1!==e.endpoint.indexOf("?")?"&":"?";return p({url:e.endpoint+i+"products="+r}).then(e=>{o||n({items:Array.isArray(e)?e:[],isLoading:!1,error:null})}).catch(e=>{o||n({items:[],isLoading:!1,error:e})}),()=>{o=!0}},[s]),o})(u),I=d(()=>((e,o)=>{if(!Array.isArray(e)||!e.length)return[];const n=new Map;e.forEach(e=>{const t=Number.isFinite(parseInt(e.product,10))?parseInt(e.product,10):0;if(t>0&&!o.includes(t))return;const s=t>0?t:0;n.has(s)||n.set(s,[]),n.get(s).push(e)});const s=[];return o.forEach(e=>{n.has(e)&&(s.push({productId:e,label:_(e),nodes:m(n.get(e))}),n.delete(e))}),n.has(0)&&(s.push({productId:0,label:t.unassigned||"Sections without a product",nodes:m(n.get(0))}),n.delete(0)),n.forEach((e,t)=>{s.push({productId:t,label:_(t),nodes:m(e)})}),s.filter(e=>e.nodes.length)})(A,u),[A,u.join(",")]),v=d(()=>new Set(f),[f.join(",")]),P=(e,t)=>{const o=new Set(v);t?o.add(e):o.delete(e);const n=Array.from(o).sort((e,t)=>e-t),s=b();N({meta:{...s,_wzkb_section_ids:n},wzkb_category:n})},L=u.length?S?r(n,{status:"error",isDismissible:!1,className:"wzkb-editor-sections__notice"},t.error||"Unable to load sections. Please try again."):E?r("div",{className:"wzkb-editor-sections__loading"},r(o,null),r("p",null,t.loading||"Loading sections…")):I.length?I.map(e=>r("div",{key:"group-"+e.productId,className:"wzkb-editor-sections__group"},r("h4",{className:"wzkb-editor-sections__group-title"},e.label),r("div",{className:"wzkb-editor-sections__tree"},r(k,{nodes:e.nodes,selectedIds:v,onToggle:P,level:0})))):r("p",{className:"wzkb-editor-sections__empty"},t.noSections||"No sections match the selected products."):r("p",{className:"wzkb-editor-sections__message"},t.selectProducts||"Select a product to load its sections.");return r("div",{className:"wzkb-editor-sections__container"},L)};u("editor.PostTaxonomyType","wzkb/custom-sections-panel",e=>function(t){return t&&"wzkb_category"===t.slug?r(f,{label:t.label}):r(e,t)})}(); \ No newline at end of file