FileMaster
Search
Toggle Dark Mode
Home
/
.
/
wp-content
/
plugins
/
woocommerce
/
assets
/
client
/
blocks
/
@woocommerce
/
stores
/
woocommerce
Edit File: cart.js
import*as e from"@wordpress/interactivity";var t={7908:e=>{e.exports=import("@woocommerce/stores/store-notices")}},r={};function o(e){var a=r[e];if(void 0!==a)return a.exports;var s=r[e]={exports:{}};return t[e](s,s.exports,o),s.exports}o.d=(e,t)=>{for(var r in t)o.o(t,r)&&!o.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},o.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t);const a=(n={getConfig:()=>e.getConfig,store:()=>e.store},i={},o.d(i,n),i),s=({preserveCartData:e=!1})=>{((e,{bubbles:t=!1,cancelable:r=!1,element:o,detail:a={}})=>{if(!CustomEvent)return;o||(o=document.body);const s=new CustomEvent(e,{bubbles:t,cancelable:r,detail:a});o.dispatchEvent(s)})("wc-blocks_added_to_cart",{bubbles:!0,cancelable:!0,detail:{preserveCartData:e}})};var n,i;function c(e){return"name"in e}function d(e,t){return!e.ok}function l(e){return Object.assign(new Error(e.message||"Unknown error."),{code:e.code||"unknown_error"})}const y=e=>({notice:e.message,type:"error",dismissible:!0}),p=e=>({notice:e,type:"notice",dismissible:!0}),m=(e,t,r)=>{const o=e.items,a=t.items,{productsPendingAdd:s=[],cartItemsPendingQuantity:n=[],cartItemsPendingDelete:i=[]}=r,d=o.filter((e=>e.key&&c(e)&&!a.some((t=>e.key===t.key))&&!i.includes(e.key))),l=a.filter((e=>{if(!c(e))return!1;const t=o.find((t=>t.key===e.key));return t?!n.includes(e.key)&&e.quantity!==t.quantity:!s.includes(e.id)}));return[...d.map((e=>p('"%s" was removed from your cart.'.replace("%s",e.name)))),...l.map((e=>p('The quantity of "%1$s" was changed to %2$d.'.replace("%1$s",e.name).replace("%2$d",e.quantity.toString()))))]};let u=!1,h=3e3;function f({quantityChanges:e}){window.dispatchEvent(new CustomEvent("wc-blocks_store_sync_required",{detail:{type:"from_iAPI",quantityChanges:e}}))}const{state:g,actions:v}=(0,a.store)("woocommerce",{actions:{*removeCartItem(e){const t=JSON.stringify(g.cart);g.cart.items=g.cart.items.filter((t=>t.key!==e));try{const t=yield fetch(`${g.restUrl}wc/store/v1/cart/remove-item`,{method:"POST",headers:{Nonce:g.nonce,"Content-Type":"application/json"},body:JSON.stringify({key:e})}),r=yield t.json();if(d(t))throw l(r);const o={cartItemsPendingDelete:[e]},a=m(g.cart,r,o),s=r.errors.map(y);yield v.updateNotices([...a,...s],!0),g.cart=r,f({quantityChanges:o})}catch(e){g.cart=JSON.parse(t),v.showNoticeError(e)}},*addCartItem({id:e,quantity:t,variation:r},{showCartUpdatesNotices:o=!0}={}){let n=g.cart.items.find((t=>"variation"===t.type?!(e!==t.id||!t.variation||!r||t.variation.length!==r.length)&&((e,t)=>!(!Array.isArray(e.variation)||!Array.isArray(t))&&e.variation.length===t.length&&e.variation.every((({raw_attribute:e,value:r})=>t.some((t=>t.attribute===e&&(t.value.toLowerCase()===r.toLowerCase()||t.value&&""===r))))))(t,r):e===t.id));const i=n?"update-item":"add-item",p=JSON.stringify(g.cart),u={};let h=null;if(n){const e=c(n)&&n.sold_individually;h={...n,quantity:t},n.key&&!e&&(u.cartItemsPendingQuantity=[n.key],n.quantity=t)}else n={id:e,quantity:t,variation:r},u.productsPendingAdd=[e],g.cart.items.push(n),h=n;try{const e=yield fetch(`${g.restUrl}wc/store/v1/cart/${i}`,{method:"POST",headers:{Nonce:g.nonce,"Content-Type":"application/json"},body:JSON.stringify(h)}),t=yield e.json();if(d(e))throw l(t);const r=o?m(g.cart,t,u):[],n=t.errors.map(y);yield v.updateNotices([...r,...n],!0),g.cart=t,s({preserveCartData:!0});const{messages:c}=(0,a.getConfig)("woocommerce");c?.addedToCartText&&wp?.a11y?.speak(c.addedToCartText,"polite"),f({quantityChanges:u})}catch(e){g.cart=JSON.parse(p),v.showNoticeError(e)}},*batchAddCartItems(e,{showCartUpdatesNotices:t=!0}={}){const r=JSON.stringify(g.cart),o={};try{const r=e.map((e=>{const t=g.cart.items.find((({id:t})=>e.id===t));var r;return t?(t.quantity=e.quantity,t.key&&(o.cartItemsPendingQuantity=[...null!==(r=o.cartItemsPendingQuantity)&&void 0!==r?r:[],t.key]),{method:"POST",path:"/wc/store/v1/cart/update-item",headers:{Nonce:g.nonce,"Content-Type":"application/json"},body:t}):(e={id:e.id,quantity:e.quantity,variation:e.variation},g.cart.items.push(e),o.productsPendingAdd=o.productsPendingAdd?[...o.productsPendingAdd,e.id]:[e.id],{method:"POST",path:"/wc/store/v1/cart/add-item",headers:{Nonce:g.nonce,"Content-Type":"application/json"},body:e})})),n=yield fetch(`${g.restUrl}wc/store/v1/batch`,{method:"POST",headers:{Nonce:g.nonce,"Content-Type":"application/json"},body:JSON.stringify({requests:r})}),i=yield n.json();if(d(n))throw l(i);const c=Array.isArray(i.responses)?i.responses.filter((e=>e.status<200||e.status>=300)):[],p=Array.isArray(i.responses)?i.responses.filter((e=>e.status>=200&&e.status<300)):[];if(p.length>0){const e=p[p.length-1]?.body,r=t?m(g.cart,e,o):[],n=p.flatMap((e=>{var t;return(null!==(t=e.body.errors)&&void 0!==t?t:[]).map(y)}));yield v.updateNotices([...r,...n],!0),g.cart=e,s({preserveCartData:!0});const{messages:i}=(0,a.getConfig)("woocommerce");i?.addedToCartText&&wp?.a11y?.speak(i.addedToCartText,"polite"),f({quantityChanges:o})}yield v.updateNotices(c.filter((e=>e.body&&"object"==typeof e.body)).map((({body:e})=>y(e))))}catch(e){g.cart=JSON.parse(r),v.showNoticeError(e)}},*refreshCartItems(){if(!u){u=!0;try{const e=yield fetch(`${g.restUrl}wc/store/v1/cart`,{headers:{"Content-Type":"application/json"}}),t=yield e.json();if(d(e))throw l(t);g.cart=t,h=3e3}catch(e){setTimeout(v.refreshCartItems,h),h*=2}finally{u=!1}}},*showNoticeError(e){yield Promise.resolve().then(o.bind(o,7908));const{actions:t}=(0,a.store)("woocommerce/store-notices",{},{lock:"I acknowledge that using a private store means my plugin will inevitably break on the next store release."}),{code:r,message:s}=e,n=g.errorMessages?.[r]||s;t.addNotice({notice:n,type:"error",dismissible:!0}),console.error(e)},*updateNotices(e=[],t=!1){yield Promise.resolve().then(o.bind(o,7908));const{state:r,actions:s}=(0,a.store)("woocommerce/store-notices",{},{lock:"I acknowledge that using a private store means my plugin will inevitably break on the next store release."}),n=e.map((e=>s.addNotice(e))),{notices:i}=r;t&&i.map((({id:e})=>e)).filter((e=>!n.includes(e))).forEach((e=>s.removeNotice(e)))}}},{lock:!0});window.addEventListener("wc-blocks_store_sync_required",(async e=>{"from_@wordpress/data"===e.detail.type&&v.refreshCartItems()}));
Save
Back