-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy patheditor-sections-panel.min.js
More file actions
1 lines (1 loc) · 4.43 KB
/
editor-sections-panel.min.js
File metadata and controls
1 lines (1 loc) · 4.43 KB
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<o.length;e+=1)if(o[e]!==n[e])return!1;return!0},m=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)})}();