2026-05-30 14:06:18 +00:00

1 line
12 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(()=>{"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"]={}})();