1 line
12 KiB
JavaScript
1 line
12 KiB
JavaScript
(()=>{"use strict";var e={n:t=>{var o=t&&t.__esModule?()=>t.default:()=>t;return e.d(o,{a:o}),o},d:(t,o)=>{for(var n in o)e.o(o,n)&&!e.o(t,n)&&Object.defineProperty(t,n,{enumerable:!0,get:o[n]})},o:(e,t)=>Object.prototype.hasOwnProperty.call(e,t)};const t=window.wp.blocks,o=window.wp.i18n,n=window.wp.blockEditor,r=window.wp.components,i=window.wp.element,c=window.wp.apiFetch;var a=e.n(c);const s=window.wp.hooks,u=window.wp.data,l=window.wc.wcSettings,m=window.ReactJSXRuntime,d={percent:(0,o.__)("Percentage discount","woocommerce"),fixed_cart:(0,o.__)("Fixed cart discount","woocommerce"),fixed_product:(0,o.__)("Fixed product discount","woocommerce")};function p(e){return"percent"===e?100:1e6}function _({attributes:e,setAttributes:t}){const n=function(){const e=(0,l.getSetting)("couponTypes",d);return Object.entries(e).map(([e,t])=>({value:e,label:t}))}(),i=p(e.discountType);return(0,m.jsxs)(r.PanelBody,{title:(0,o.__)("General","woocommerce"),initialOpen:!0,children:[(0,m.jsx)(r.SelectControl,{label:(0,o.__)("Discount type","woocommerce"),value:e.discountType,options:n,onChange:o=>{const n=p(o);t({discountType:o,amount:Math.min(e.amount,n)})},__nextHasNoMarginBottom:!0}),(0,m.jsx)(r.TextControl,{label:(0,o.__)("Amount","woocommerce"),value:String(e.amount),type:"number",min:0,max:i,onChange:e=>t({amount:Math.min(Number(e)||0,i)}),__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),(0,m.jsx)(r.TextControl,{label:(0,o.__)("Expires (days after send)","woocommerce"),help:(0,o.__)("Set to 0 for no expiry.","woocommerce"),value:String(e.expiryDay),type:"number",min:0,onChange:e=>t({expiryDay:Number(e)||0}),__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),(0,m.jsx)(r.ToggleControl,{label:(0,o.__)("Free shipping","woocommerce"),checked:e.freeShipping,onChange:e=>t({freeShipping:e}),__nextHasNoMarginBottom:!0})]})}function g({attributes:e,setAttributes:t}){return(0,m.jsxs)(r.PanelBody,{title:(0,o.__)("Usage limits","woocommerce"),initialOpen:!1,children:[(0,m.jsx)(r.TextControl,{label:(0,o.__)("Usage limit per coupon","woocommerce"),help:(0,o.__)("How many times this coupon can be used before it is void. Set to 0 for unlimited.","woocommerce"),value:String(e.usageLimit),type:"number",min:0,onChange:e=>t({usageLimit:Number(e)||0}),__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),(0,m.jsx)(r.TextControl,{label:(0,o.__)("Usage limit per user","woocommerce"),help:(0,o.__)("How many times this coupon can be used by an individual user. Set to 0 for unlimited.","woocommerce"),value:String(e.usageLimitPerUser),type:"number",min:0,onChange:e=>t({usageLimitPerUser:Number(e)||0}),__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})]})}function x({label:e,value:t,onChange:o,endpoint:n}){const[c,s]=(0,i.useState)([]),[u,l]=(0,i.useState)([]),d=(0,i.useRef)(null),p=(0,i.useRef)(null),_=(0,i.useCallback)(e=>{if(p.current&&p.current.abort(),e.length<2)return s([]),void l([]);p.current=new AbortController,a()({path:`/wc/v3/${n}?search=${encodeURIComponent(e)}&per_page=20`,signal:p.current.signal}).then(e=>{l(e),s(e.map(e=>e.name))}).catch(e=>{e instanceof Error&&"AbortError"===e.name||(s([]),l([]))})},[n]);(0,i.useEffect)(()=>()=>{d.current&&clearTimeout(d.current),p.current&&p.current.abort()},[]);const g=t.map(e=>e.title);return(0,m.jsx)("div",{style:{marginBottom:"24px"},children:(0,m.jsx)(r.FormTokenField,{label:e,value:g,suggestions:c,onInputChange:e=>{d.current&&clearTimeout(d.current),d.current=setTimeout(()=>{_(e)},300)},onChange:e=>{const n=e.map(e=>{const o=t.find(t=>t.title===e);if(o)return o;const n=u.find(t=>t.name===e);return n?{id:n.id,title:n.name}:null}).filter(e=>null!==e);o(n)},__experimentalExpandOnFocus:!0,__next40pxDefaultSize:!0})})}function h({attributes:e,setAttributes:t}){return(0,m.jsxs)(r.PanelBody,{title:(0,o.__)("Usage restrictions","woocommerce"),initialOpen:!1,children:[(0,m.jsx)(r.TextControl,{label:(0,o.__)("Minimum spend","woocommerce"),value:e.minimumAmount,onChange:e=>t({minimumAmount:e}),type:"number",min:0,__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),(0,m.jsx)(r.TextControl,{label:(0,o.__)("Maximum spend","woocommerce"),value:e.maximumAmount,onChange:e=>t({maximumAmount:e}),type:"number",min:0,__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0}),(0,m.jsx)(r.ToggleControl,{label:(0,o.__)("Individual use only","woocommerce"),help:(0,o.__)("If checked, this coupon cannot be used in conjunction with other coupons.","woocommerce"),checked:e.individualUse,onChange:e=>t({individualUse:e}),__nextHasNoMarginBottom:!0}),(0,m.jsx)(r.ToggleControl,{label:(0,o.__)("Exclude sale items","woocommerce"),help:(0,o.__)("If checked, this coupon will not apply to items on sale.","woocommerce"),checked:e.excludeSaleItems,onChange:e=>t({excludeSaleItems:e}),__nextHasNoMarginBottom:!0}),(0,m.jsx)(x,{label:(0,o.__)("Products","woocommerce"),value:e.productIds,onChange:e=>t({productIds:e}),endpoint:"products"}),(0,m.jsx)(x,{label:(0,o.__)("Excluded products","woocommerce"),value:e.excludedProductIds,onChange:e=>t({excludedProductIds:e}),endpoint:"products"}),(0,m.jsx)(x,{label:(0,o.__)("Product categories","woocommerce"),value:e.productCategoryIds,onChange:e=>t({productCategoryIds:e}),endpoint:"products/categories"}),(0,m.jsx)(x,{label:(0,o.__)("Excluded product categories","woocommerce"),value:e.excludedProductCategoryIds,onChange:e=>t({excludedProductCategoryIds:e}),endpoint:"products/categories"}),(0,m.jsx)(r.TextControl,{label:(0,o.__)("Allowed emails","woocommerce"),help:(0,o.__)("Comma-separated list of allowed emails to check against the customer's billing email.","woocommerce"),value:e.emailRestrictions,onChange:e=>t({emailRestrictions:e}),__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0})]})}const b=["draft","future","pending","private","publish"];function w({attributes:e,setAttributes:t}){const n=e.couponCode,[c,l]=(0,i.useState)(""),[d,p]=(0,i.useState)([]),[_,g]=(0,i.useState)(!1),x=(0,i.useRef)(null),h=(0,i.useRef)(null),w=(0,i.useCallback)(e=>{if(h.current&&h.current.abort(),e.length<2)return p([]),void g(!1);g(!0),h.current=new AbortController;const t=new URLSearchParams({per_page:"20",search:e});b.forEach(e=>{t.append("status[]",e)}),a()({path:`/wc/v3/coupons?${t.toString()}`,signal:h.current.signal}).then(e=>{p(e),g(!1)}).catch(e=>{e instanceof Error&&"AbortError"===e.name||("rest_forbidden"!==e.code&&403!==e.status||(0,u.dispatch)("core/notices").createErrorNotice((0,o.__)("You do not have permission to view coupons.","woocommerce"),{id:"coupon-code-permission-error",type:"snackbar"}),g(!1))})},[]);(0,i.useEffect)(()=>(x.current&&clearTimeout(x.current),x.current=setTimeout(()=>{w(c)},300),()=>{x.current&&clearTimeout(x.current)}),[c,w]),(0,i.useEffect)(()=>()=>{h.current&&h.current.abort()},[]);const f=d.map(e=>({value:e.code,label:e.code}));return n&&!f.some(e=>e.value===n)&&f.unshift({value:n,label:n}),(0,m.jsxs)(r.PanelBody,{title:(0,o.__)("Coupon","woocommerce"),initialOpen:!0,children:[(0,m.jsxs)("div",{style:{marginBottom:"16px"},children:[(0,m.jsx)("div",{children:(0,o.__)("Search for an existing coupon","woocommerce")}),(0,m.jsx)(r.ComboboxControl,{label:(0,o.__)("Search coupons","woocommerce"),hideLabelFromVision:!0,value:n,onChange:e=>{t({couponCode:e||""})},onFilterValueChange:e=>{l(e)},options:f,__nextHasNoMarginBottom:!0,__next40pxDefaultSize:!0,help:_?(0,o.__)("Searching coupons…","woocommerce"):c.length>0&&c.length<2?(0,o.__)("Type at least 2 characters to search","woocommerce"):null}),_&&(0,m.jsx)("div",{style:{display:"flex",alignItems:"center",marginTop:"8px"},children:(0,m.jsx)(r.Spinner,{})})]}),(0,m.jsx)("div",{children:(0,m.jsx)(r.Button,{variant:"link",onClick:()=>{const e=(0,s.applyFilters)("woocommerce_email_editor_create_coupon_handler",()=>{window.open("/wp-admin/post-new.php?post_type=shop_coupon","_blank")});"function"==typeof e&&e()},style:{padding:0,height:"auto"},children:(0,o.__)("Create new coupon","woocommerce")})})]})}const f=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"woocommerce/coupon-code","version":"1.0.0","title":"Coupon Code","category":"woocommerce","description":"Include a coupon code to entice customers to make a purchase.","supports":{"email":true,"html":false,"align":true,"color":{"text":true,"background":true},"typography":{"fontSize":true},"spacing":{"margin":true,"padding":true},"__experimentalBorder":{"color":true,"radius":true,"style":true,"width":true}},"attributes":{"couponCode":{"type":"string","default":""},"source":{"type":"string","default":"createNew","enum":["createNew","existing"]},"discountType":{"type":"string","default":"percent"},"amount":{"type":"number","default":10},"expiryDay":{"type":"number","default":10},"freeShipping":{"type":"boolean","default":false},"usageLimit":{"type":"number","default":0},"usageLimitPerUser":{"type":"number","default":0},"minimumAmount":{"type":"string","default":""},"maximumAmount":{"type":"string","default":""},"individualUse":{"type":"boolean","default":false},"excludeSaleItems":{"type":"boolean","default":false},"productIds":{"type":"array","default":[],"items":{"type":"object"}},"excludedProductIds":{"type":"array","default":[],"items":{"type":"object"}},"productCategoryIds":{"type":"array","default":[],"items":{"type":"object"}},"excludedProductCategoryIds":{"type":"array","default":[],"items":{"type":"object"}},"emailRestrictions":{"type":"string","default":""}},"textdomain":"woocommerce"}');(0,t.registerBlockType)(f,{edit:function(e){const{attributes:t,setAttributes:i}=e,c=t.source??"createNew",a=t.couponCode,{className:s="",style:u,...l}=(0,n.useBlockProps)(),d="createNew"===c?"XXXX-XXXXXX-XXXX":a||"",{background:p,backgroundColor:x,border:b,...f}=u||{},y={fontSize:"1.2em",padding:"12px 20px",borderWidth:"2px",borderStyle:"dashed",borderColor:"#cccccc",borderRadius:"4px",color:"#000000",backgroundColor:"#f5f5f5",fontWeight:"bold",letterSpacing:"1px",...f,display:"inline-block",boxSizing:"border-box",textAlign:"center"},C=t.align,j={textAlign:["left","center","right","justify","start","end"].includes(C)?C:"center"},v=s.split(" ").filter(Boolean),S=[],N=[];v.forEach(e=>{e.startsWith("has-")||e.startsWith("wp-elements-")?S.push(e):N.push(e)});const k=N.length>0?N.join(" "):void 0,X=S.length>0?S.join(" "):void 0;return(0,m.jsxs)(m.Fragment,{children:[(0,m.jsxs)(n.InspectorControls,{children:[(0,m.jsx)(r.PanelBody,{title:(0,o.__)("Coupon source","woocommerce"),initialOpen:!0,children:(0,m.jsx)(r.SelectControl,{label:(0,o.__)("Coupon source","woocommerce"),hideLabelFromVision:!0,value:c,options:[{value:"createNew",label:(0,o.__)("Create new","woocommerce")},{value:"existing",label:(0,o.__)("Use existing","woocommerce")}],onChange:e=>{i({source:"existing"===e?"existing":"createNew"})},__nextHasNoMarginBottom:!0})}),"createNew"===c&&(0,m.jsxs)(m.Fragment,{children:[(0,m.jsx)(_,{attributes:t,setAttributes:i}),(0,m.jsx)(g,{attributes:t,setAttributes:i}),(0,m.jsx)(h,{attributes:t,setAttributes:i})]}),"existing"===c&&(0,m.jsx)(w,{attributes:t,setAttributes:i})]}),(0,m.jsxs)("div",{...l,className:k,style:{...l.style,...j},children:[(0,m.jsx)("span",{className:X,style:y,children:d||(0,o.__)("Coupon Code block – No coupon selected","woocommerce")}),"createNew"===c&&(0,m.jsx)("div",{style:{fontSize:"12px",color:"#757575",marginTop:"8px"},children:(0,o.__)("A coupon code will be automatically generated at send time.","woocommerce")})]})]})},save:function(e){const{attributes:t}=e,o=t.source??"createNew",r=t.couponCode,i="createNew"===o?"XXXX-XXXXXX-XXXX":r,c=n.useBlockProps.save();return(0,m.jsx)("div",{...c,children:i&&(0,m.jsx)("strong",{children:i})})},deprecated:[{attributes:{couponCode:{type:"string",default:""}},save:function(e){const{attributes:t}=e,o="string"==typeof t.couponCode?t.couponCode:"",r=n.useBlockProps.save();return(0,m.jsx)("div",{...r,children:o&&(0,m.jsx)("strong",{children:o})})},migrate:e=>({...e,source:"existing"})}]}),((this.wc=this.wc||{}).blocks=this.wc.blocks||{})["coupon-code"]={}})(); |