Changeset 3235401
- Timestamp:
- 02/05/2025 01:05:39 PM (12 months ago)
- Location:
- revolut-gateway-for-woocommerce/trunk
- Files:
-
- 7 edited
-
client/dist/index.asset.php (modified) (1 diff)
-
client/dist/index.js (modified) (1 diff)
-
gateway-revolut.php (modified) (2 diffs)
-
includes/abstract/class-wc-payment-gateway-revolut.php (modified) (6 diffs)
-
includes/class-wc-revolut-manager.php (modified) (2 diffs)
-
includes/settings/class-wc-revolut-advanced-settings.php (modified) (1 diff)
-
readme.txt (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
revolut-gateway-for-woocommerce/trunk/client/dist/index.asset.php
r3230609 r3235401 1 <?php return array('dependencies' => array('react', 'wc-blocks-checkout', 'wc-blocks-registry', 'wc-settings', 'wp-data', 'wp-element', 'wp-i18n'), 'version' => ' 68774b484c1101f049fe');1 <?php return array('dependencies' => array('react', 'wc-blocks-checkout', 'wc-blocks-registry', 'wc-settings', 'wp-data', 'wp-element', 'wp-i18n'), 'version' => '7f32dfe181e81b928bde'); -
revolut-gateway-for-woocommerce/trunk/client/dist/index.js
r3230609 r3235401 1 (()=>{"use strict";var e={20:(e,t,r)=>{var n=r(609),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),s=Object.prototype.hasOwnProperty,c=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};function u(e,t,r){var n,a={},u=null,l=null;for(n in void 0!==r&&(u=""+r),void 0!==t.key&&(u=""+t.key),void 0!==t.ref&&(l=t.ref),t)s.call(t,n)&&!i.hasOwnProperty(n)&&(a[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps)void 0===a[n]&&(a[n]=t[n]);return{$$typeof:o,type:e,key:u,ref:l,props:a,_owner:c.current}}t.Fragment=a,t.jsx=u,t.jsxs=u},848:(e,t,r)=>{e.exports=r(20)},609:e=>{e.exports=window.React}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}(()=>{const e=window.wc.blocksCheckout,t=window.wc.wcBlocksRegistry,n=window.wp.element,o=window.wc.wcSettings,a=window.wp.i18n,s=window.wp.data,c=(0,o.getSetting)("revolut_data"),i=(0,o.getSetting)("revolut_data").revolut_pay_data,u=(0,o.getSetting)("revolut_data").revolut_cc_data,l=(0,o.getSetting)("revolut_data").revolut_payment_request_data,d=e=>(0,a.__)(e,"revolut-gateway-for-woocommerce"),p=({endpoint:e,controller:t="revolut_payment_request_"})=>c.fast_checkout_params.ajax_url.toString().replace("%%wc_revolut_gateway_ajax_endpoint%%",`${t}${e}`);function m(e,t,r){const n=e;if(t&&"object"==typeof t)Object.keys(t).forEach((e=>{m(n,t[e],r?`${r}[${e}]`:e)}));else{const e=null==t?"":t;n.append(r,e)}return n}const _=async({data:e,endpoint:t})=>{const r=m(new FormData,e),n=await fetch(t,{method:"POST",body:r});if(!n.ok)throw new Error("Failed to process your request due to network issue");return await n.json()},y=e=>({countryCode:e.country,region:e.state,city:e.city,streetLine1:e.address_1,streetLine2:e.address_2,postcode:e.postcode}),h=e=>({address_1:e.address||e.addressLine.at(0),address_2:e.address_2||e.addressLine.at(1)||"",city:e.city,state:e.state||e.region,postcode:e.postcode||e.postalCode,country:e.country,phone:e.phone}),v=async()=>{const e=await _({endpoint:p({endpoint:O.GET_EXPRESS_CHECKOUT_PARAMS}),data:{security:c.fast_checkout_params.nonce.get_express_checkout_params}});return e?.success?e.revolut_public_id:Promise.reject(new Error("Something went wrong while creating the payment."))},f=async()=>{const e=await _({endpoint:c.route.create_revolut_order,data:{security:c.nonce.create_revolut_order}});if(e?.success)return e;throw new Error("An unexpected error occurred")},g=async e=>(await _({data:{revolut_public_id:e,security:c.fast_checkout_params.nonce.cancel_order},endpoint:p({endpoint:O.CANCEL_ORDER})})).success,w=async e=>{try{if(await g(e))return{type:"error",message:d("Something went wrong, your order has been cancelled.")};throw new Error("Couldn`t cancel the order")}catch(e){return{type:"failure",message:d("Your order has been completed, but we couldn't redirect you to the confirmation page. Please contact us for assistance.")}}},b=async({response:e,paymentMethod:t,shouldSavePayment:r})=>{try{const{processingResponse:n}=e,{wc_order_id:o,revolut_public_id:a}=n.paymentDetails,s=await(async({revolut_public_id:e,shouldSavePayment:t,wc_order_id:r,paymentMethod:n})=>{try{const o={revolut_gateway:n,security:c.nonce.process_order,revolut_public_id:e,revolut_payment_error:"",wc_order_id:r,reload_checkout:0,revolut_save_payment_method:Number(n===T.REVOLUT_CARD)&&(Number(t)||Number(u.is_save_payment_method_mandatory))},a=await _({data:o,endpoint:c.route.process_order});if("fail"===a?.result)throw new Error(a?.messages||"Something went wrong while trying to charge your card, please try again");if("success"===a?.result)return a;throw new Error("Failed to process your order due to server issue")}catch(e){throw new Error(e.message||"An unexpected error occurred")}})({wc_order_id:o,revolut_public_id:a,shouldSavePayment:r,paymentMethod:t});if(s.redirect)return window.location.href=decodeURI(s.redirect),{type:"success"};throw new Error("Could not redirect you to the confirmation page due to an unexpected error. Please contact the merchant")}catch(e){return{type:"error",message:d(e?.message),retry:!0,messageContext:"wc/checkout/payments"}}},E=async({onSubmit:e,address:t})=>{const{billingAddress:r,shippingAddress:n}=t;let o=r.recipient.indexOf(" "),a=r.recipient.substring(0,o),c=r.recipient.substring(o+1);(0,s.dispatch)(P).setBillingAddress({first_name:a,last_name:c,email:t.email,...h(r)}),(0,s.dispatch)(P).setShippingAddress({first_name:a,last_name:c,...h(n)}),e()},R={channel:"woocommerce-blocks"};let S=null;const k=()=>S||("undefined"!=typeof RevolutUpsell&&(S=RevolutUpsell({locale:c.locale,publicToken:c.merchant_public_key})),S),x=()=>{const e=k();if(!e)return;const t=document.getElementById(A);t&&i.banner.points_banner_enabled&&e.promotionalBanner.mount(t,{amount:c.order.amount,variant:"banner",currency:c.order.currency,__metadata:R})},{CART_STORE_KEY:P,PAYMENT_STORE_KEY:C}=window.wc.wcBlocksData,T={REVOLUT_CARD:"revolut_cc",REVOLUT_PAY:"revolut_pay",REVOLUT_PRB:"revolut_payment_request"},A="revolut-pay-informational-banner",O={GET_EXPRESS_CHECKOUT_PARAMS:"get_express_checkout_params",UPDATE_SHIPPING_METHOD:"update_shipping_method",GET_SHIPPING_OPTIONS:"get_shipping_options",LOAD_ORDER_DATA:"load_order_data",CANCEL_ORDER:"cancel_order",PROCESS_ORDER:"process_payment_result",UPDATE_PAYMENT_TOTAL:"update_payment_total"},j=["error.3ds-failed","error.email-is-not-specified","error.invalid-postcode","error.invalid-email","error.incorrect-cvv-code","error.expired-card","error.do-not-honour","error.insufficient-funds"],L=({paymentOptions:e,onSuccess:t,onError:r},o)=>{const a=(0,n.useRef)(null),s=(0,n.useRef)();return(0,n.useEffect)((()=>((async()=>{const{paymentRequest:n,destroy:o}=await RevolutCheckout.payments({publicToken:c.merchant_public_key,locale:c.locale});if(s.current=o,a.current){const o=n.mount(a.current,{...e,buttonStyle:{action:l.payment_request_button_type,size:l.payment_request_button_size,variant:l.payment_request_button_theme,radius:l.payment_request_button_radius},currency:c.order.currency,shippingOptions:c.fast_checkout_params.free_shipping_option,onSuccess(){t()},onError(e){r(e.message)},onCancel(){r("Payment cancelled!")}});o.canMakePayment().then((e=>{e?o.render():o.destroy()}))}})(),()=>s.current())),o),{revolutPrbRef:a,destroyRef:s}},M=()=>{(0,n.useEffect)((()=>{const e=document.querySelector(".wp-element-button.wc-block-components-checkout-place-order-button");return e&&(e.disabled=!0,e.style.display="none"),()=>{e&&(e.disabled=!1,e.style.display="block")}}),[])},D=({paymentOptions:e,onSuccess:t,onError:r,onCancel:o},a)=>{const s=(0,n.useRef)(null),u=(0,n.useRef)();return(0,n.useEffect)((()=>((async()=>{const{revolutPay:n,destroy:a}=await RevolutCheckout.payments({publicToken:c.merchant_public_key,locale:c.locale});u.current=a,s.current&&n.mount(s.current,{currency:c.order.currency,totalAmount:0,mobileRedirectUrls:{success:i.mobile_redirect_url,failure:i.mobile_redirect_url,cancel:i.mobile_redirect_url},buttonStyle:{cashbackCurrency:c.order.currency,variant:i.revolut_pay_button_theme,size:i.revolut_pay_button_size,radius:i.revolut_pay_button_radius},...e}),n.on("payment",(e=>{switch(e.type){case"cancel":o();break;case"success":t(e.orderId);break;case"error":r(e.error.message)}}))})(),()=>{u.current()})),a),{revolutPayRef:s,destroyRef:u}};var N=r(848);const I=({settings:e})=>(0,N.jsxs)("div",{className:"revolut-payment-method-label-container",children:[(0,N.jsx)("strong",{children:e.title}),(0,N.jsx)(q,{})]}),U=()=>((0,n.useEffect)((()=>{(()=>{const e=k();if(!e)return;const t=document.getElementById("revolut-pay-label-informational-icon");t&&i.banner.label_icon_variant&&e.promotionalBanner.mount(t,{amount:c.order.amount,variant:"cashback"===i.banner.label_icon_variant?"link":i.banner.label_icon_variant,currency:c.order.currency,style:{text:"cashback"===i.banner.label_icon_variant?"cashback":null,color:"blue"},__metadata:R})})()}),[]),(0,N.jsxs)("div",{className:"revolut-payment-method-label-container",children:[(0,N.jsxs)("div",{className:"revolut-pay-label-title-wrapper",children:[(0,N.jsx)("strong",{style:{whiteSpace:"nowrap"},children:i.title}),(0,N.jsx)("div",{style:{marginLeft:"5px",display:"flex"},id:"revolut-pay-label-informational-icon"})]}),(0,N.jsx)(q,{})]})),q=()=>{const{available_card_brands:e,wc_plugin_url:t}=c;return(0,N.jsx)("div",{className:"revolut-payment-method-label-scheme-icons",children:e&&e.filter((e=>"maestro"!==e)).map((e=>(0,N.jsx)("img",{src:`${t}/assets/images/${e}.svg`,style:{marginLeft:2},alt:e},e)))})},B=({inputRef:e})=>{const[t,r]=(0,n.useState)([]),o=(0,n.useRef)(!1),a=()=>{const t=e.current.value.trim().split(/\s+/).length>1;return!t&&o.current?(e.current.classList.add("wc-revolut-cardholder-name-error"),r([{message:"Please provide your full name"}])):(e.current.classList.remove("wc-revolut-cardholder-name-error"),r([])),t};return e.current&&(e.current.isComplete=()=>(o.current=!0,a())),(0,N.jsxs)("div",{className:"form-row validate-required",id:"cardholder-name","data-priority":"10",style:{display:"block",width:"100%",marginBottom:15},children:[(0,N.jsx)("input",{ref:e,type:"text",onChange:a,className:"input-text",name:"wc-revolut-cardholder-name",id:"wc-revolut-cardholder-name",placeholder:"Cardholder name",autoComplete:"cardholder",required:!0}),(0,N.jsx)("div",{style:{marginBottom:10,marginTop:10},children:(0,N.jsx)( Y,{errorList:t})})]})},Y=({errorList:e})=>(0,N.jsx)("div",{children:e.map(((e,t)=>(0,N.jsx)("li",{className:"card-field-error",children:e.message},t)))}),F=({orderToken:e})=>((0,n.useEffect)((()=>{(e=>{const t=k();if(!t)return;const r=document.getElementById("revolut-upsell-banner");r&&u.banner.upsell_banner_enabled&&t.cardGatewayBanner.mount(r,{orderToken:e})})(e)}),[e]),(0,N.jsx)("div",{id:"revolut-upsell-banner"})),V=({eventRegistration:e,billing:t,shippingData:r,shouldSavePayment:o,emitResponse:a,components:i,checkoutStatus:u,settings:l})=>{const{onPaymentSetup:p,onCheckoutSuccess:m}=e,_=(0,n.useRef)(),h=(0,n.useRef)(),[v,g]=(0,n.useState)(!1),[w,E]=(0,n.useState)([]),[R,S]=(0,n.useState)(!1),[k,x]=(0,n.useState)(""),[P,C]=(0,n.useState)(0),{createErrorNotice:A,removeAllNotices:O}=(0,s.dispatch)("core/notices");(0,n.useEffect)((()=>{const e=p(M),t=m(D);return()=>{e(),t()}}),[m,p,w,v,o,t.billingAddress,r.shippingAddress]),(0,n.useEffect)((()=>{(async()=>{t?.cartTotal?.value&&(S(!0),f().then((e=>{x(e.revolut_order_public_id),C(e.revolut_order_amount),S(!1)})).catch((e=>A(d(e.message||"An unexpected error occurred"),{id:"create_order_failed",context:a.noticeContexts.PAYMENTS}))))})()}),[t.cartTotal.value]);const L=(({onMsg:e,publicId:t},r)=>{const o=(0,n.useRef)(e),a=(0,n.useRef)(null),s=(0,n.useRef)(null);return(0,n.useEffect)((()=>{let e=!1;return s.current&&(s.current.destroy(),o.current({type:"instance_destroyed"})),RevolutCheckout(t).then((t=>{!e&&a.current&&(s.current=t.createCardField({locale:c.locale,target:a.current,onSuccess(){o.current({type:"payment_successful"})},onError(e){j.includes(e.type)?o.current({type:"fields_errors_changed",errors:[e]}):o.current({type:"payment_failed",error:e})},onValidation:e=>o.current({type:"fields_errors_changed",errors:e}),onStatusChange:e=>{o.current({type:"fields_status_changed",status:e})},onCancel(){o.current({type:"payment_cancelled"})}}),o.current({type:"instance_mounted",instance:s.current}))})),()=>{e=!0,s.current&&(s.current.destroy(),s.current=null,o.current({type:"instance_destroyed"}))}}),[t,o,...r]),a})({publicId:k,onMsg:e=>{switch(e.type){case"payment_successful":document.dispatchEvent(new Event("payment_successful"));break;case"payment_failed":document.dispatchEvent(new CustomEvent("payment_failed",{detail:e.error.toString()}));break;case"instance_destroyed":_.current=null;break;case"instance_mounted":_.current=e.instance;break;case"fields_errors_changed":E(e.errors);break;case"fields_status_changed":g(e.status)}}},[P]),M=async()=>{O();let e=null;return t?.billingAddress||(e="Please check your billing address, and retry again."),(!v.completed||w.length>0)&&(e="The payment form is not ready for submission.",_.current&&(_.current.validate(),e="The payment form is not ready for submission. please fix the errors below and retry again.")),l.card_holder_name_field_enabled&&(h.current.isComplete()||(e="The payment form is not ready for submission. please fix the errors below and retry again.")),e?{type:a.responseTypes.ERROR,message:d(e),retry:!0,messageContext:a.noticeContexts.PAYMENTS}:{type:a.responseTypes.SUCCESS}},D=async e=>{S(!0);const{billingAddress:n}=t,{shippingAddress:s}=r,c={name:l.card_holder_name_field_enabled&&h.current.value.length>0?h.current.value:`${n.first_name} ${n.last_name}`,email:n.email,phone:n.phone,savePaymentMethodFor:o||l.is_save_payment_method_mandatory?"merchant":""};void 0!==n.country&&void 0!==n.postcode&&(c.billingAddress=y(n),c.shippingAddress=y(n)),s&&void 0!==s.country&&void 0!==s.postcode&&(c.shippingAddress=y(s));const i=await I({paymentData:c});if(!i.success)return i.error?(S(!1),{type:a.responseTypes.ERROR,message:d(i.error||"Unexpected error occurred, please try again later"),retry:!0,messageContext:a.noticeContexts.PAYMENTS}):void S(!1);b({response:e,paymentMethod:T.REVOLUT_CARD,shouldSavePayment:o})},I=async({paymentData:e})=>(_.current.submit(e),new Promise(((e,t)=>{document.addEventListener("payment_successful",(()=>{e({success:!0})})),document.addEventListener("payment_failed",(t=>{e({success:!1,error:t.detail})}))})));return(0,n.useEffect)((()=>{L.current&&(w.length>0?L.current.classList.add("woocommerce-revolut-card-element-error"):L.current.classList.remove("woocommerce-revolut-card-element-error"))}),[w]),(0,N.jsx)(N.Fragment,{children:(0,N.jsx)(i.LoadingMask,{showSpinner:!0,isLoading:u.isProcessing||u.isComplete||R,children:k&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)("div",{children:[(0,N.jsx)("div",{id:"woocommerce-revolut-card-element",ref:L}),w.length>0&&(0,N.jsx)(Y,{errorList:w})]}),l.card_holder_name_field_enabled&&(0,N.jsx)("div",{style:{marginTop:10},children:(0,N.jsx)(B,{inputRef:h})}),l.banner.upsell_banner_enabled&&(0,N.jsx)("div",{children:(0,N.jsx)(F,{orderToken:k})})]})})})},G={name:T.REVOLUT_CARD,label:(0,N.jsx)(I,{settings:u}),content:(0,N.jsx)(V,{settings:u}),edit:(0,N.jsx)("p",{children:d("Revolut Gateway is not available in editor mode")}),ariaLabel:d("Revolut Card`s Gateway"),canMakePayment:()=>u.can_make_payment,supports:{features:["products","subscriptions"],showSavedCards:!0,showSaveOption:!u.is_save_payment_method_mandatory}},$=()=>((0,n.useEffect)((()=>{x()}),[]),(0,N.jsx)("div",{id:A})),H=i.can_make_payment&&i.banner.points_banner_enabled,K={metadata:{name:"revolut-gateway-for-woocommerce/revolut-banner",category:"woocommerce",parent:[e.innerBlockAreas.CHECKOUT_ORDER_SUMMARY],attributes:{lock:{type:"object",default:{remove:!0,move:!0}}}},force:!0,component:()=>H?(0,N.jsx)($,{}):""},z=({billing:e,components:t,checkoutStatus:r,eventRegistration:o,emitResponse:a,onSubmit:c})=>{const{onCheckoutSuccess:i,onCheckoutFail:u}=o,{VALIDATION_STORE_KEY:l}=window.wc.wcBlocksData,[d,p]=(0,n.useState)(!1),m=(0,n.useRef)(null),_=(0,n.useRef)(null),y=(0,n.useRef)(null),{revolutPrbRef:h}=L({paymentOptions:{amount:e.cartTotal.value,validate:()=>new Promise(((e,t)=>{p(!0),(0,s.select)(l).hasValidationErrors()&&(p(!1),t("Checkout form is incomplete")),f().then((r=>{m.current=r.revolut_order_public_id,c(),document.addEventListener("checkout_success",(()=>{e(!0)})),document.addEventListener("checkout_fail",(()=>{p(!1),t("Something went wrong")}))}))})),createOrder:()=>({publicId:m.current})},onSuccess:()=>{p(!0),b({response:_.current,paymentMethod:T.REVOLUT_PRB,shouldSavePayment:0})},onError:e=>{p(!1),y.current&&y.current.resolve((e=>({type:a.responseTypes.ERROR,message:e,retry:!0,messageContext:a.noticeContexts.PAYMENTS}))(e))}},[e.cartTotal.value]);return(0,n.useEffect)((()=>{const e=i((async e=>new Promise((t=>{p(!1),_.current=e,document.dispatchEvent(new CustomEvent("checkout_success")),y.current={resolve:t}})))),t=u((e=>{e&&e.paymentDetails&&e.paymentDetails.wc_order_id||document.dispatchEvent(new CustomEvent("checkout_fail"))}));return()=>{e(),t()}}),[i,u]),M(),(0,N.jsxs)(N.Fragment,{children:[" ",(0,N.jsx)(t.LoadingMask,{showSpinner:!0,isLoading:d||r.isProcessing||r.isComplete,children:(0,N.jsx)("div",{ref:h})})]})},X=({billing:e,setExpressPaymentError:t,eventRegistration:r,onSubmit:o,onClick:a,onClose:s,emitResponse:i})=>{const{onPaymentSetup:u,onCheckoutFail:l}=r,d=(0,n.useRef)(),m=(0,n.useRef)(),{revolutPrbRef:y,destroyRef:h}=L({paymentOptions:{amount:0,requestShipping:!0,validate:()=>(a(),!0),onShippingOptionChange:e=>function(e){let t={security:c.fast_checkout_params.nonce.update_shipping,shipping_method:[e.id],is_product_page:c.fast_checkout_params.is_product_page};return new Promise(((e,r)=>{_({data:t,endpoint:p({endpoint:O.UPDATE_SHIPPING_METHOD})}).then((t=>{e(t)})).catch((e=>{r(e)}))}))}(e),onShippingAddressChange:e=>function(e){let t={security:c.fast_checkout_params.nonce.shipping,country:e.country,state:e.region,postcode:e.postalCode,city:e.city,address:"",address_2:"",is_product_page:c.fast_checkout_params.is_product_page,require_shipping:c.fast_checkout_params.shipping_required};return new Promise(((e,r)=>{_({data:t,endpoint:p({endpoint:O.GET_SHIPPING_OPTIONS})}).then((t=>{e(t)})).catch((e=>{r(e)}))}))}(e),createOrder:()=>new Promise(((e,t)=>{v().then((t=>{m.current=t,e({publicId:t})})).catch((e=>{t(e)}))})),validate(e){d.current=e}},onSuccess:()=>E({onSubmit:o,address:d.current}).catch((e=>{h.current(),g(m.current),t(e)})),onError:e=>{t(e||"Something went wrong while completing your payment"),s()},onCancel:e=>{t(e),s()}},[e.cartTotal.value]);return(0,n.useEffect)((()=>{const e=u((()=>({type:i.responseTypes.SUCCESS,meta:{paymentMethodData:{is_express_checkout:1}}}))),r=l((()=>{w(m.current).then((e=>{t(e.message),"failure"===e.type&&h.current()}))}));return()=>{e(),r()}}),[u,l]),(0,N.jsxs)(N.Fragment,{children:[" ",(0,N.jsx)("div",{ref:y})]})},W={name:"revolut_payment_request",label:(0,N.jsx)(I,{settings:l}),content:(0,N.jsx)(z,{}),edit:(0,N.jsx)("p",{children:d("Google/Apple Pay block is not available in editor mode")}),ariaLabel:"Google Pay/Apple Pay",canMakePayment:()=>l.can_make_payment,paymentMethodId:"revolut_payment_request",supports:{features:["products"]}},J={...W,name:"revolut_payment_request_express_checkout",paymentMethodId:"revolut_payment_request",content:(0,N.jsx)(X,{}),canMakePayment:()=>l.can_make_payment&&l.is_cart},Q=({billing:e,components:t,eventRegistration:r,onSubmit:o,emitResponse:a})=>{const{onCheckoutSuccess:c,onCheckoutFail:i}=r,{VALIDATION_STORE_KEY:u}=window.wc.wcBlocksData,[l,d]=(0,n.useState)(!1),[p,m]=(0,n.useState)(!1),_=(0,n.useRef)(null),y=(0,n.useRef)(null),h=(0,n.useRef)(null),v=e=>({type:a.responseTypes.ERROR,message:e,retry:!0,messageContext:a.noticeContexts.PAYMENTS}),g={totalAmount:e.cartTotal.value,validate:()=>(m(!1),new Promise((e=>{d(!0),(0,s.select)(u).hasValidationErrors()&&(d(!1),e(!1)),f().then((t=>{_.current=t.revolut_order_public_id,o(),document.addEventListener("checkout_success",(()=>{e(!0)})),document.addEventListener("checkout_fail",(()=>{d(!1),e(!1)}))}))}))),createOrder:()=>({publicId:_.current})},{revolutPayRef:w}=D({paymentOptions:g,onSuccess:()=>{d(!0),b({response:y.current,paymentMethod:T.REVOLUT_PAY,shouldSavePayment:0})},onError:e=>{d(!1),h.current&&h.current.resolve(v(e))},onCancel:()=>{m(!0),h.current&&h.current.resolve(v("Payment cancelled!"))}},[e.cartTotal.value]);return(0,n.useEffect)((()=>{const e=c((async e=>new Promise((t=>{if(p)return d(!1),t(v("Payment cancelled!"));d(!1),y.current=e,document.dispatchEvent(new CustomEvent("checkout_success")),h.current={resolve:t}})))),t=i((e=>{e&&e.paymentDetails&&e.paymentDetails.wc_order_id||document.dispatchEvent(new CustomEvent("checkout_fail"))}));return()=>{e(),t()}}),[c,i,p]),M(),(0,N.jsxs)(N.Fragment,{children:[" ",(0,N.jsx)(t.LoadingMask,{showSpinner:!0,isLoading:l,children:(0,N.jsx)("div",{ref:w})})]})},Z=({billing:e,setExpressPaymentError:t,eventRegistration:r,onSubmit:o,onClick:a,onClose:s,emitResponse:i})=>{const{onPaymentSetup:u,onCheckoutFail:l}=r,d=(0,n.useRef)(),m={requestShipping:!0,validate:()=>(a(),!0),createOrder:()=>v().then((e=>(d.current=e,(e=>_({data:{revolut_public_id:e,security:c.fast_checkout_params.nonce.update_order_total},endpoint:p({endpoint:O.UPDATE_PAYMENT_TOTAL})}))(e).then((()=>({publicId:e}))))))},{revolutPayRef:y,destroyRef:h}=D({paymentOptions:m,onSuccess:e=>(async e=>{try{const t=await _({data:{security:c.fast_checkout_params.nonce.load_order_data,revolut_public_id:e},endpoint:p({endpoint:O.LOAD_ORDER_DATA})});if(t)return t;throw new Error("Something went wrong while retrieving the billing address. your payment will be cancelled")}catch(e){throw new Error(e.message||"An unexpected error occurred.")}})(e).then((r=>{E({onSubmit:o,address:r.address_info}).catch((r=>{h.current(),g(e),t(r)}))})).catch((r=>{g(e),t(r)})),onError:e=>{t(e||"Something went wrong while completing your payment"),s()},onCancel:e=>{t(e||"Payment cancelled!"),s()}},[e.cartTotal.value]);return(0,n.useEffect)((()=>{const e=u((()=>({type:i.responseTypes.SUCCESS,meta:{paymentMethodData:{is_express_checkout:1}}}))),r=l((()=>{w(d.current).then((e=>{t(e.message),"failure"===e.type&&h.current()}))}));return()=>{e(),r()}}),[u,l]),(0,n.useEffect)((()=>{x()}),[]),(0,N.jsxs)(N.Fragment,{children:[" ",(0,N.jsx)("div",{id:A}),(0,N.jsx)("div",{ref:y})]})},ee=new URLSearchParams(window.location.search),te=ee.get("_rp_fr"),re=ee.get("_rp_oid"),ne=ee.get("_rp_s");(te||!ne&&re)&&((0,s.dispatch)("core/notices").createErrorNotice(d(te||"Payment Rejected"),{id:"rp-fr",context:"wc/checkout/payments"}),i.is_cart||(0,s.dispatch)(C).__internalSetActivePaymentMethod(T.REVOLUT_PAY));const oe={name:"revolut_pay",label:(0,N.jsx)(U,{}),content:(0,N.jsx)(Q,{}),edit:(0,N.jsx)("p",{children:d("Revolut Pay is not available in editor mode")}),ariaLabel:"Revolut Pay",canMakePayment:()=>i.can_make_payment,paymentMethodId:"revolut_pay",supports:{features:["products"]}},ae={...oe,name:"revolut_pay_express_checkout",paymentMethodId:"revolut_pay",content:(0,N.jsx)(Z,{settings:i}),canMakePayment:()=>i.can_make_payment&&i.is_cart};(0,t.registerPaymentMethod)(G),(0,t.registerExpressPaymentMethod)(ae),(0,t.registerPaymentMethod)(oe),(0,e.registerCheckoutBlock)(K),(0,t.registerExpressPaymentMethod)(J),(0,t.registerPaymentMethod)(W)})()})();1 (()=>{"use strict";var e={20:(e,t,r)=>{var n=r(609),o=Symbol.for("react.element"),a=Symbol.for("react.fragment"),s=Object.prototype.hasOwnProperty,c=n.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,i={key:!0,ref:!0,__self:!0,__source:!0};function u(e,t,r){var n,a={},u=null,l=null;for(n in void 0!==r&&(u=""+r),void 0!==t.key&&(u=""+t.key),void 0!==t.ref&&(l=t.ref),t)s.call(t,n)&&!i.hasOwnProperty(n)&&(a[n]=t[n]);if(e&&e.defaultProps)for(n in t=e.defaultProps)void 0===a[n]&&(a[n]=t[n]);return{$$typeof:o,type:e,key:u,ref:l,props:a,_owner:c.current}}t.Fragment=a,t.jsx=u,t.jsxs=u},848:(e,t,r)=>{e.exports=r(20)},609:e=>{e.exports=window.React}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var a=t[n]={exports:{}};return e[n](a,a.exports,r),a.exports}(()=>{const e=window.wc.blocksCheckout,t=window.wc.wcBlocksRegistry,n=window.wp.element,o=window.wc.wcSettings,a=window.wp.i18n,s=window.wp.data,c=(0,o.getSetting)("revolut_data"),i=(0,o.getSetting)("revolut_data").revolut_pay_data,u=(0,o.getSetting)("revolut_data").revolut_cc_data,l=(0,o.getSetting)("revolut_data").revolut_payment_request_data,d=e=>(0,a.__)(e,"revolut-gateway-for-woocommerce"),p=({endpoint:e,controller:t="revolut_payment_request_"})=>c.fast_checkout_params.ajax_url.toString().replace("%%wc_revolut_gateway_ajax_endpoint%%",`${t}${e}`);function m(e,t,r){const n=e;if(t&&"object"==typeof t)Object.keys(t).forEach((e=>{m(n,t[e],r?`${r}[${e}]`:e)}));else{const e=null==t?"":t;n.append(r,e)}return n}const _=async({data:e,endpoint:t})=>{const r=m(new FormData,e),n=await fetch(t,{method:"POST",body:r});if(!n.ok)throw new Error("Failed to process your request due to network issue");return await n.json()},y=e=>({countryCode:e.country,region:e.state,city:e.city,streetLine1:e.address_1,streetLine2:e.address_2,postcode:e.postcode}),h=e=>({address_1:e.address||e.addressLine.at(0),address_2:e.address_2||e.addressLine.at(1)||"",city:e.city,state:e.state||e.region,postcode:e.postcode||e.postalCode,country:e.country,phone:e.phone}),v=async()=>{const e=await _({endpoint:p({endpoint:O.GET_EXPRESS_CHECKOUT_PARAMS}),data:{security:c.fast_checkout_params.nonce.get_express_checkout_params}});return e?.success?e.revolut_public_id:Promise.reject(new Error("Something went wrong while creating the payment."))},f=async()=>{const e=await _({endpoint:c.route.create_revolut_order,data:{security:c.nonce.create_revolut_order}});if(e?.success)return e;throw new Error("An unexpected error occurred")},g=async e=>(await _({data:{revolut_public_id:e,security:c.fast_checkout_params.nonce.cancel_order},endpoint:p({endpoint:O.CANCEL_ORDER})})).success,w=async e=>{try{if(await g(e))return{type:"error",message:d("Something went wrong, your order has been cancelled.")};throw new Error("Couldn`t cancel the order")}catch(e){return{type:"failure",message:d("Your order has been completed, but we couldn't redirect you to the confirmation page. Please contact us for assistance.")}}},b=async({response:e,paymentMethod:t,shouldSavePayment:r})=>{try{const{processingResponse:n}=e,{wc_order_id:o,revolut_public_id:a}=n.paymentDetails,s=await(async({revolut_public_id:e,shouldSavePayment:t,wc_order_id:r,paymentMethod:n})=>{try{const o={revolut_gateway:n,security:c.nonce.process_order,revolut_public_id:e,revolut_payment_error:"",wc_order_id:r,reload_checkout:0,revolut_save_payment_method:Number(n===T.REVOLUT_CARD)&&(Number(t)||Number(u.is_save_payment_method_mandatory))},a=await _({data:o,endpoint:c.route.process_order});if("fail"===a?.result)throw new Error(a?.messages||"Something went wrong while trying to charge your card, please try again");if("success"===a?.result)return a;throw new Error("Failed to process your order due to server issue")}catch(e){throw new Error(e.message||"An unexpected error occurred")}})({wc_order_id:o,revolut_public_id:a,shouldSavePayment:r,paymentMethod:t});if(s.redirect)return window.location.href=decodeURI(s.redirect),{type:"success"};throw new Error("Could not redirect you to the confirmation page due to an unexpected error. Please contact the merchant")}catch(e){return{type:"error",message:d(e?.message),retry:!0,messageContext:"wc/checkout/payments"}}},E=async({onSubmit:e,address:t})=>{const{billingAddress:r,shippingAddress:n}=t;let o=r.recipient.indexOf(" "),a=r.recipient.substring(0,o),c=r.recipient.substring(o+1);(0,s.dispatch)(P).setBillingAddress({first_name:a,last_name:c,email:t.email,...h(r)}),(0,s.dispatch)(P).setShippingAddress({first_name:a,last_name:c,...h(n)}),e()},R={channel:"woocommerce-blocks"};let S=null;const k=()=>S||("undefined"!=typeof RevolutUpsell&&(S=RevolutUpsell({locale:c.locale,publicToken:c.merchant_public_key})),S),x=()=>{const e=k();if(!e)return;const t=document.getElementById(A);t&&i.banner.points_banner_enabled&&e.promotionalBanner.mount(t,{amount:c.order.amount,variant:"banner",currency:c.order.currency,__metadata:R})},{CART_STORE_KEY:P,PAYMENT_STORE_KEY:C}=window.wc.wcBlocksData,T={REVOLUT_CARD:"revolut_cc",REVOLUT_PAY:"revolut_pay",REVOLUT_PRB:"revolut_payment_request"},A="revolut-pay-informational-banner",O={GET_EXPRESS_CHECKOUT_PARAMS:"get_express_checkout_params",UPDATE_SHIPPING_METHOD:"update_shipping_method",GET_SHIPPING_OPTIONS:"get_shipping_options",LOAD_ORDER_DATA:"load_order_data",CANCEL_ORDER:"cancel_order",PROCESS_ORDER:"process_payment_result",UPDATE_PAYMENT_TOTAL:"update_payment_total"},j=["error.3ds-failed","error.email-is-not-specified","error.invalid-postcode","error.invalid-email","error.incorrect-cvv-code","error.expired-card","error.do-not-honour","error.insufficient-funds"],L=({paymentOptions:e,onSuccess:t,onError:r},o)=>{const a=(0,n.useRef)(null),s=(0,n.useRef)();return(0,n.useEffect)((()=>((async()=>{const{paymentRequest:n,destroy:o}=await RevolutCheckout.payments({publicToken:c.merchant_public_key,locale:c.locale});if(s.current=o,a.current){const o=n.mount(a.current,{...e,buttonStyle:{action:l.payment_request_button_type,size:l.payment_request_button_size,variant:l.payment_request_button_theme,radius:l.payment_request_button_radius},currency:c.order.currency,shippingOptions:c.fast_checkout_params.free_shipping_option,onSuccess(){t()},onError(e){r(e.message)},onCancel(){r("Payment cancelled!")}});o.canMakePayment().then((e=>{e?o.render():o.destroy()}))}})(),()=>s.current())),o),{revolutPrbRef:a,destroyRef:s}},M=()=>{(0,n.useEffect)((()=>{const e=document.querySelector(".wp-element-button.wc-block-components-checkout-place-order-button");return e&&(e.disabled=!0,e.style.display="none"),()=>{e&&(e.disabled=!1,e.style.display="block")}}),[])},D=({paymentOptions:e,onSuccess:t,onError:r,onCancel:o},a)=>{const s=(0,n.useRef)(null),u=(0,n.useRef)();return(0,n.useEffect)((()=>((async()=>{const{revolutPay:n,destroy:a}=await RevolutCheckout.payments({publicToken:c.merchant_public_key,locale:c.locale});u.current=a,s.current&&n.mount(s.current,{currency:c.order.currency,totalAmount:0,mobileRedirectUrls:{success:i.mobile_redirect_url,failure:i.mobile_redirect_url,cancel:i.mobile_redirect_url},buttonStyle:{cashbackCurrency:c.order.currency,variant:i.revolut_pay_button_theme,size:i.revolut_pay_button_size,radius:i.revolut_pay_button_radius},...e}),n.on("payment",(e=>{switch(e.type){case"cancel":o();break;case"success":t(e.orderId);break;case"error":r(e.error.message)}}))})(),()=>{u.current()})),a),{revolutPayRef:s,destroyRef:u}};var N=r(848);const I=({settings:e})=>(0,N.jsxs)("div",{className:"revolut-payment-method-label-container",children:[(0,N.jsx)("strong",{children:e.title}),(0,N.jsx)(q,{})]}),U=()=>((0,n.useEffect)((()=>{(()=>{const e=k();if(!e)return;const t=document.getElementById("revolut-pay-label-informational-icon");t&&i.banner.label_icon_variant&&e.promotionalBanner.mount(t,{amount:c.order.amount,variant:"cashback"===i.banner.label_icon_variant?"link":i.banner.label_icon_variant,currency:c.order.currency,style:{text:"cashback"===i.banner.label_icon_variant?"cashback":null,color:"blue"},__metadata:R})})()}),[]),(0,N.jsxs)("div",{className:"revolut-payment-method-label-container",children:[(0,N.jsxs)("div",{className:"revolut-pay-label-title-wrapper",children:[(0,N.jsx)("strong",{style:{whiteSpace:"nowrap"},children:i.title}),(0,N.jsx)("div",{style:{marginLeft:"5px",display:"flex"},id:"revolut-pay-label-informational-icon"})]}),(0,N.jsx)(q,{})]})),q=()=>{const{available_card_brands:e,wc_plugin_url:t}=c;return(0,N.jsx)("div",{className:"revolut-payment-method-label-scheme-icons",children:e&&e.filter((e=>"maestro"!==e)).map((e=>(0,N.jsx)("img",{src:`${t}/assets/images/${e}.svg`,style:{marginLeft:2},alt:e},e)))})},B=({inputRef:e})=>{const[t,r]=(0,n.useState)([]),o=(0,n.useRef)(!1),a=()=>{const t=e.current.value.trim().split(/\s+/).length>1;return!t&&o.current?(e.current.classList.add("wc-revolut-cardholder-name-error"),r([{message:"Please provide your full name"}])):(e.current.classList.remove("wc-revolut-cardholder-name-error"),r([])),t};return e.current&&(e.current.isComplete=()=>(o.current=!0,a())),(0,N.jsxs)("div",{className:"form-row validate-required",id:"cardholder-name","data-priority":"10",style:{display:"block",width:"100%",marginBottom:15},children:[(0,N.jsx)("input",{ref:e,type:"text",onChange:a,className:"input-text",name:"wc-revolut-cardholder-name",id:"wc-revolut-cardholder-name",placeholder:"Cardholder name",autoComplete:"cardholder",required:!0}),(0,N.jsx)("div",{style:{marginBottom:10,marginTop:10},children:(0,N.jsx)(F,{errorList:t})})]})},F=({errorList:e})=>(0,N.jsx)("div",{children:e.map(((e,t)=>(0,N.jsx)("li",{className:"card-field-error",children:e.message},t)))}),Y=({orderToken:e})=>((0,n.useEffect)((()=>{(e=>{const t=k();if(!t)return;const r=document.getElementById("revolut-upsell-banner");r&&u.banner.upsell_banner_enabled&&t.cardGatewayBanner.mount(r,{orderToken:e})})(e)}),[e]),(0,N.jsx)("div",{id:"revolut-upsell-banner"})),V=({eventRegistration:e,billing:t,shippingData:r,shouldSavePayment:o,emitResponse:a,components:i,checkoutStatus:u,settings:l})=>{const{onPaymentSetup:p,onCheckoutSuccess:m}=e,_=(0,n.useRef)(),h=(0,n.useRef)(),[v,g]=(0,n.useState)(!1),[w,E]=(0,n.useState)([]),[R,S]=(0,n.useState)(!1),[k,x]=(0,n.useState)(""),[P,C]=(0,n.useState)(0),{createErrorNotice:A,removeAllNotices:O}=(0,s.dispatch)("core/notices");(0,n.useEffect)((()=>{const e=p(M),t=m(D);return()=>{e(),t()}}),[m,p,w,v,o,t.billingAddress,r.shippingAddress]),(0,n.useEffect)((()=>{(async()=>{t?.cartTotal?.value&&(S(!0),f().then((e=>{x(e.revolut_order_public_id),C(e.revolut_order_amount),S(!1)})).catch((e=>A(d(e.message||"An unexpected error occurred"),{id:"create_order_failed",context:a.noticeContexts.PAYMENTS}))))})()}),[t.cartTotal.value]);const L=(({onMsg:e,publicId:t},r)=>{const o=(0,n.useRef)(e),a=(0,n.useRef)(null),s=(0,n.useRef)(null);return(0,n.useEffect)((()=>{let e=!1;return s.current&&(s.current.destroy(),o.current({type:"instance_destroyed"})),RevolutCheckout(t).then((t=>{!e&&a.current&&(s.current=t.createCardField({locale:c.locale,target:a.current,hidePostcodeField:!0,onSuccess(){o.current({type:"payment_successful"})},onError(e){j.includes(e.type)?o.current({type:"fields_errors_changed",errors:[e]}):o.current({type:"payment_failed",error:e})},onValidation:e=>o.current({type:"fields_errors_changed",errors:e}),onStatusChange:e=>{o.current({type:"fields_status_changed",status:e})},onCancel(){o.current({type:"payment_cancelled"})}}),o.current({type:"instance_mounted",instance:s.current}))})),()=>{e=!0,s.current&&(s.current.destroy(),s.current=null,o.current({type:"instance_destroyed"}))}}),[t,o,...r]),a})({publicId:k,onMsg:e=>{switch(e.type){case"payment_successful":document.dispatchEvent(new Event("payment_successful"));break;case"payment_failed":document.dispatchEvent(new CustomEvent("payment_failed",{detail:e.error.toString()}));break;case"instance_destroyed":_.current=null;break;case"instance_mounted":_.current=e.instance;break;case"fields_errors_changed":E(e.errors);break;case"fields_status_changed":g(e.status)}}},[P]),M=async()=>{O();let e=null;return t?.billingAddress||(e="Please check your billing address, and retry again."),(!v.completed||w.length>0)&&(e="The payment form is not ready for submission.",_.current&&(_.current.validate(),e="The payment form is not ready for submission. please fix the errors below and retry again.")),l.card_holder_name_field_enabled&&(h.current.isComplete()||(e="The payment form is not ready for submission. please fix the errors below and retry again.")),e?{type:a.responseTypes.ERROR,message:d(e),retry:!0,messageContext:a.noticeContexts.PAYMENTS}:{type:a.responseTypes.SUCCESS}},D=async e=>{S(!0);const{billingAddress:n}=t,{shippingAddress:s}=r,c={name:l.card_holder_name_field_enabled&&h.current.value.length>0?h.current.value:`${n.first_name} ${n.last_name}`,email:n.email,phone:n.phone,savePaymentMethodFor:o||l.is_save_payment_method_mandatory?"merchant":""};void 0!==n.country&&void 0!==n.postcode&&(c.billingAddress=y(n),c.shippingAddress=y(n)),s&&void 0!==s.country&&void 0!==s.postcode&&(c.shippingAddress=y(s));const i=await I({paymentData:c});if(!i.success)return i.error?(S(!1),{type:a.responseTypes.ERROR,message:d(i.error||"Unexpected error occurred, please try again later"),retry:!0,messageContext:a.noticeContexts.PAYMENTS}):void S(!1);b({response:e,paymentMethod:T.REVOLUT_CARD,shouldSavePayment:o})},I=async({paymentData:e})=>(_.current.submit(e),new Promise(((e,t)=>{document.addEventListener("payment_successful",(()=>{e({success:!0})})),document.addEventListener("payment_failed",(t=>{e({success:!1,error:t.detail})}))})));return(0,n.useEffect)((()=>{L.current&&(w.length>0?L.current.classList.add("woocommerce-revolut-card-element-error"):L.current.classList.remove("woocommerce-revolut-card-element-error"))}),[w]),(0,N.jsx)(N.Fragment,{children:(0,N.jsx)(i.LoadingMask,{showSpinner:!0,isLoading:u.isProcessing||u.isComplete||R,children:k&&(0,N.jsxs)(N.Fragment,{children:[(0,N.jsxs)("div",{children:[(0,N.jsx)("div",{id:"woocommerce-revolut-card-element",ref:L}),w.length>0&&(0,N.jsx)(F,{errorList:w})]}),l.card_holder_name_field_enabled&&(0,N.jsx)("div",{style:{marginTop:10},children:(0,N.jsx)(B,{inputRef:h})}),l.banner.upsell_banner_enabled&&(0,N.jsx)("div",{children:(0,N.jsx)(Y,{orderToken:k})})]})})})},G={name:T.REVOLUT_CARD,label:(0,N.jsx)(I,{settings:u}),content:(0,N.jsx)(V,{settings:u}),edit:(0,N.jsx)("p",{children:d("Revolut Gateway is not available in editor mode")}),ariaLabel:d("Revolut Card`s Gateway"),canMakePayment:()=>u.can_make_payment,supports:{features:["products","subscriptions"],showSavedCards:!0,showSaveOption:!u.is_save_payment_method_mandatory}},$=()=>((0,n.useEffect)((()=>{x()}),[]),(0,N.jsx)("div",{id:A})),H=i.can_make_payment&&i.banner.points_banner_enabled,K={metadata:{name:"revolut-gateway-for-woocommerce/revolut-banner",category:"woocommerce",parent:[e.innerBlockAreas.CHECKOUT_ORDER_SUMMARY],attributes:{lock:{type:"object",default:{remove:!0,move:!0}}}},force:!0,component:()=>H?(0,N.jsx)($,{}):""},z=({billing:e,components:t,checkoutStatus:r,eventRegistration:o,emitResponse:a,onSubmit:c})=>{const{onCheckoutSuccess:i,onCheckoutFail:u}=o,{VALIDATION_STORE_KEY:l}=window.wc.wcBlocksData,[d,p]=(0,n.useState)(!1),m=(0,n.useRef)(null),_=(0,n.useRef)(null),y=(0,n.useRef)(null),{revolutPrbRef:h}=L({paymentOptions:{amount:e.cartTotal.value,validate:()=>new Promise(((e,t)=>{p(!0),(0,s.select)(l).hasValidationErrors()&&(p(!1),t("Checkout form is incomplete")),f().then((r=>{m.current=r.revolut_order_public_id,c(),document.addEventListener("checkout_success",(()=>{e(!0)})),document.addEventListener("checkout_fail",(()=>{p(!1),t("Something went wrong")}))}))})),createOrder:()=>({publicId:m.current})},onSuccess:()=>{p(!0),b({response:_.current,paymentMethod:T.REVOLUT_PRB,shouldSavePayment:0})},onError:e=>{p(!1),y.current&&y.current.resolve((e=>({type:a.responseTypes.ERROR,message:e,retry:!0,messageContext:a.noticeContexts.PAYMENTS}))(e))}},[e.cartTotal.value]);return(0,n.useEffect)((()=>{const e=i((async e=>new Promise((t=>{p(!1),_.current=e,document.dispatchEvent(new CustomEvent("checkout_success")),y.current={resolve:t}})))),t=u((e=>{e&&e.paymentDetails&&e.paymentDetails.wc_order_id||document.dispatchEvent(new CustomEvent("checkout_fail"))}));return()=>{e(),t()}}),[i,u]),M(),(0,N.jsxs)(N.Fragment,{children:[" ",(0,N.jsx)(t.LoadingMask,{showSpinner:!0,isLoading:d||r.isProcessing||r.isComplete,children:(0,N.jsx)("div",{ref:h})})]})},X=({billing:e,setExpressPaymentError:t,eventRegistration:r,onSubmit:o,onClick:a,onClose:s,emitResponse:i})=>{const{onPaymentSetup:u,onCheckoutFail:l}=r,d=(0,n.useRef)(),m=(0,n.useRef)(),{revolutPrbRef:y,destroyRef:h}=L({paymentOptions:{amount:0,requestShipping:!0,validate:()=>(a(),!0),onShippingOptionChange:e=>function(e){let t={security:c.fast_checkout_params.nonce.update_shipping,shipping_method:[e.id],is_product_page:c.fast_checkout_params.is_product_page};return new Promise(((e,r)=>{_({data:t,endpoint:p({endpoint:O.UPDATE_SHIPPING_METHOD})}).then((t=>{e(t)})).catch((e=>{r(e)}))}))}(e),onShippingAddressChange:e=>function(e){let t={security:c.fast_checkout_params.nonce.shipping,country:e.country,state:e.region,postcode:e.postalCode,city:e.city,address:"",address_2:"",is_product_page:c.fast_checkout_params.is_product_page,require_shipping:c.fast_checkout_params.shipping_required};return new Promise(((e,r)=>{_({data:t,endpoint:p({endpoint:O.GET_SHIPPING_OPTIONS})}).then((t=>{e(t)})).catch((e=>{r(e)}))}))}(e),createOrder:()=>new Promise(((e,t)=>{v().then((t=>{m.current=t,e({publicId:t})})).catch((e=>{t(e)}))})),validate(e){d.current=e}},onSuccess:()=>E({onSubmit:o,address:d.current}).catch((e=>{h.current(),g(m.current),t(e)})),onError:e=>{t(e||"Something went wrong while completing your payment"),s()},onCancel:e=>{t(e),s()}},[e.cartTotal.value]);return(0,n.useEffect)((()=>{const e=u((()=>({type:i.responseTypes.SUCCESS,meta:{paymentMethodData:{is_express_checkout:1}}}))),r=l((()=>{w(m.current).then((e=>{t(e.message),"failure"===e.type&&h.current()}))}));return()=>{e(),r()}}),[u,l]),(0,N.jsxs)(N.Fragment,{children:[" ",(0,N.jsx)("div",{ref:y})]})},W={name:"revolut_payment_request",label:(0,N.jsx)(I,{settings:l}),content:(0,N.jsx)(z,{}),edit:(0,N.jsx)("p",{children:d("Google/Apple Pay block is not available in editor mode")}),ariaLabel:"Google Pay/Apple Pay",canMakePayment:()=>l.can_make_payment,paymentMethodId:"revolut_payment_request",supports:{features:["products"]}},J={...W,name:"revolut_payment_request_express_checkout",paymentMethodId:"revolut_payment_request",content:(0,N.jsx)(X,{}),canMakePayment:()=>l.can_make_payment&&l.is_cart},Q=({billing:e,components:t,eventRegistration:r,onSubmit:o,emitResponse:a})=>{const{onCheckoutSuccess:c,onCheckoutFail:i}=r,{VALIDATION_STORE_KEY:u}=window.wc.wcBlocksData,[l,d]=(0,n.useState)(!1),[p,m]=(0,n.useState)(!1),_=(0,n.useRef)(null),y=(0,n.useRef)(null),h=(0,n.useRef)(null),v=e=>({type:a.responseTypes.ERROR,message:e,retry:!0,messageContext:a.noticeContexts.PAYMENTS}),g={totalAmount:e.cartTotal.value,validate:()=>(m(!1),new Promise((e=>{d(!0),(0,s.select)(u).hasValidationErrors()&&(d(!1),e(!1)),f().then((t=>{_.current=t.revolut_order_public_id,o(),document.addEventListener("checkout_success",(()=>{e(!0)})),document.addEventListener("checkout_fail",(()=>{d(!1),e(!1)}))}))}))),createOrder:()=>({publicId:_.current})},{revolutPayRef:w}=D({paymentOptions:g,onSuccess:()=>{d(!0),b({response:y.current,paymentMethod:T.REVOLUT_PAY,shouldSavePayment:0})},onError:e=>{d(!1),h.current&&h.current.resolve(v(e))},onCancel:()=>{m(!0),h.current&&h.current.resolve(v("Payment cancelled!"))}},[e.cartTotal.value]);return(0,n.useEffect)((()=>{const e=c((async e=>new Promise((t=>{if(p)return d(!1),t(v("Payment cancelled!"));d(!1),y.current=e,document.dispatchEvent(new CustomEvent("checkout_success")),h.current={resolve:t}})))),t=i((e=>{e&&e.paymentDetails&&e.paymentDetails.wc_order_id||document.dispatchEvent(new CustomEvent("checkout_fail"))}));return()=>{e(),t()}}),[c,i,p]),M(),(0,N.jsxs)(N.Fragment,{children:[" ",(0,N.jsx)(t.LoadingMask,{showSpinner:!0,isLoading:l,children:(0,N.jsx)("div",{ref:w})})]})},Z=({billing:e,setExpressPaymentError:t,eventRegistration:r,onSubmit:o,onClick:a,onClose:s,emitResponse:i})=>{const{onPaymentSetup:u,onCheckoutFail:l}=r,d=(0,n.useRef)(),m={requestShipping:!0,validate:()=>(a(),!0),createOrder:()=>v().then((e=>(d.current=e,(e=>_({data:{revolut_public_id:e,security:c.fast_checkout_params.nonce.update_order_total},endpoint:p({endpoint:O.UPDATE_PAYMENT_TOTAL})}))(e).then((()=>({publicId:e}))))))},{revolutPayRef:y,destroyRef:h}=D({paymentOptions:m,onSuccess:e=>(async e=>{try{const t=await _({data:{security:c.fast_checkout_params.nonce.load_order_data,revolut_public_id:e},endpoint:p({endpoint:O.LOAD_ORDER_DATA})});if(t)return t;throw new Error("Something went wrong while retrieving the billing address. your payment will be cancelled")}catch(e){throw new Error(e.message||"An unexpected error occurred.")}})(e).then((r=>{E({onSubmit:o,address:r.address_info}).catch((r=>{h.current(),g(e),t(r)}))})).catch((r=>{g(e),t(r)})),onError:e=>{t(e||"Something went wrong while completing your payment"),s()},onCancel:e=>{t(e||"Payment cancelled!"),s()}},[e.cartTotal.value]);return(0,n.useEffect)((()=>{const e=u((()=>({type:i.responseTypes.SUCCESS,meta:{paymentMethodData:{is_express_checkout:1}}}))),r=l((()=>{w(d.current).then((e=>{t(e.message),"failure"===e.type&&h.current()}))}));return()=>{e(),r()}}),[u,l]),(0,n.useEffect)((()=>{x()}),[]),(0,N.jsxs)(N.Fragment,{children:[" ",(0,N.jsx)("div",{id:A}),(0,N.jsx)("div",{ref:y})]})},ee=new URLSearchParams(window.location.search),te=ee.get("_rp_fr"),re=ee.get("_rp_oid"),ne=ee.get("_rp_s");(te||!ne&&re)&&((0,s.dispatch)("core/notices").createErrorNotice(d(te||"Payment Rejected"),{id:"rp-fr",context:"wc/checkout/payments"}),i.is_cart||(0,s.dispatch)(C).__internalSetActivePaymentMethod(T.REVOLUT_PAY));const oe={name:"revolut_pay",label:(0,N.jsx)(U,{}),content:(0,N.jsx)(Q,{}),edit:(0,N.jsx)("p",{children:d("Revolut Pay is not available in editor mode")}),ariaLabel:"Revolut Pay",canMakePayment:()=>i.can_make_payment,paymentMethodId:"revolut_pay",supports:{features:["products"]}},ae={...oe,name:"revolut_pay_express_checkout",paymentMethodId:"revolut_pay",content:(0,N.jsx)(Z,{settings:i}),canMakePayment:()=>i.can_make_payment&&i.is_cart};(0,t.registerPaymentMethod)(G),(0,t.registerExpressPaymentMethod)(ae),(0,t.registerPaymentMethod)(oe),(0,e.registerCheckoutBlock)(K),(0,t.registerExpressPaymentMethod)(J),(0,t.registerPaymentMethod)(W)})()})(); -
revolut-gateway-for-woocommerce/trunk/gateway-revolut.php
r3230609 r3235401 7 7 * Author URI: https://www.revolut.com/business/online-payments 8 8 * Text Domain: revolut-gateway-for-woocommerce 9 * Version: 4.18. 69 * Version: 4.18.7 10 10 * Requires at least: 4.4 11 11 * Tested up to: 6.7.1 … … 16 16 defined( 'ABSPATH' ) || exit; 17 17 define( 'REVOLUT_PATH', plugin_dir_path( __FILE__ ) ); 18 define( 'WC_GATEWAY_REVOLUT_VERSION', '4.18. 6' );18 define( 'WC_GATEWAY_REVOLUT_VERSION', '4.18.7' ); 19 19 define( 'WC_GATEWAY_PUBLIC_KEY_ENDPOINT', '/public-key/latest' ); 20 20 define( 'WC_GATEWAY_REVPAY_INDEX', 'USE_REVOLUT_PAY_2_0' ); -
revolut-gateway-for-woocommerce/trunk/includes/abstract/class-wc-payment-gateway-revolut.php
r3230609 r3235401 78 78 79 79 /** 80 * Advanced plugin settings 81 * 82 * @var WC_Revolut_Advanced_Settings 83 */ 84 public $advanced_settings; 85 86 /** 80 87 * Constructor 81 88 */ … … 83 90 $this->api_settings = revolut_wc()->api_settings; 84 91 $this->promotional_settings = revolut_wc()->promotional_settings; 92 $this->advanced_settings = revolut_wc()->advanced_settings; 85 93 $this->has_fields = true; 86 94 … … 231 239 $this->maybe_cancel_previous_wc_order( $revolut_public_id, $wc_order_id ); 232 240 $revolut_order_id = $this->get_revolut_order_by_public_id( $revolut_public_id ); 233 $this->save_wc_order_id( $revolut_public_id, $revolut_order_id, $wc_order_id );241 $this->save_wc_order_id( $revolut_public_id, $revolut_order_id, $wc_order_id, $wc_order->get_order_number() ); 234 242 $wc_order->update_meta_data( 'revolut_payment_public_id', $revolut_public_id ); 235 243 $wc_order->update_meta_data( 'revolut_payment_order_id', $revolut_order_id ); … … 771 779 } 772 780 773 $this->save_wc_order_id( $revolut_payment_public_id, $revolut_order_id, $wc_order_id );781 $this->save_wc_order_id( $revolut_payment_public_id, $revolut_order_id, $wc_order_id, $wc_order->get_order_number() ); 774 782 $this->save_payment_token_to_order( $wc_order, $wc_token, get_current_user_id() ); 775 783 $this->verify_order_total( $revolut_order_id, $wc_order ); … … 888 896 * @param string $revolut_order_id Revolut order id. 889 897 * @param int $wc_order_id WooCommerce order id. 898 * @param string $wc_order_number WooCommerce order id. 890 899 * 891 900 * @throws Exception Exception. 892 901 */ 893 protected function save_wc_order_id( $public_id, $revolut_order_id, $wc_order_id ) {902 protected function save_wc_order_id( $public_id, $revolut_order_id, $wc_order_id, $wc_order_number ) { 894 903 try { 895 904 global $wpdb; … … 922 931 } 923 932 933 $merchant_order_ext_ref = $this->advanced_settings->external_order_reference_is_order_id() ? $wc_order_id : $wc_order_number; 934 924 935 $body = array( 925 'merchant_order_ext_ref' => $ wc_order_id,936 'merchant_order_ext_ref' => $merchant_order_ext_ref, 926 937 ); 927 938 -
revolut-gateway-for-woocommerce/trunk/includes/class-wc-revolut-manager.php
r3170065 r3235401 36 36 */ 37 37 public $promotional_settings; 38 39 /** 40 * Advanced Plugin Settings Class instance. 41 * 42 * @var WC_Revolut_Advanced_Settings 43 */ 44 public $advanced_settings; 38 45 39 46 /** … … 89 96 $this->api_settings = new WC_Revolut_Settings_API(); 90 97 $this->promotional_settings = new WC_Revolut_Promotional_Settings(); 98 $this->advanced_settings = new WC_Revolut_Advanced_Settings(); 91 99 new WC_Revolut_Apple_Pay_OnBoarding(); 92 100 new WC_Revolut_Payment_Ajax_Controller(); 93 101 new WC_Gateway_Revolut_Payment_Request(); 94 102 new WC_Gateway_Revolut_Pay(); 95 new WC_Revolut_Advanced_Settings();96 103 } 97 104 } -
revolut-gateway-for-woocommerce/trunk/includes/settings/class-wc-revolut-advanced-settings.php
r2903286 r3235401 52 52 53 53 /** 54 * Check External Order Reference 55 */ 56 public function external_order_reference_is_order_id() { 57 return $this->get_option( 'external_order_reference' ) === 'order_id'; 58 } 59 60 /** 54 61 * Initialize Settings Form Fields 55 62 */ 56 63 public function init_form_fields() { 57 64 $this->form_fields = array( 58 'title' => array(65 'title' => array( 59 66 'type' => 'title', 60 67 'title' => __( 'Revolut Gateway - Advanced Settings', 'revolut-gateway-for-woocommerce' ), 61 68 ), 62 'clear_unused_order_records' => array( 63 'title' => 'Clear unused orders now', 64 'type' => 'text', 65 'description' => '<button class="revolut_clear_unused_order_records" style="min-height: 30px;"><span id="span-for-active-button-sandbox">Clear</span></button><br><br><b>What is this?</b> The plugin creates a Revolut order every time a customer is attempting to pay. If you have fast checkout options active, this could mean that an order is created for every site visitor. If you have limited space on your database or you have a lot of site visitors, you might end up with a lot of unused orders. You can use this button to delete unused orders. WARNING: This could also delete orders that customers have not yet paid but have the intention to, so make sure that this is only used when there are no visitors on your website', 69 'external_order_reference' => array( 70 'title' => __( 'Select External WooCommerce Order Reference', 'revolut-gateway-for-woocommerce' ), 71 'description' => __( 'This configuration allows selecting between using the Order ID (e.g. 1756) or modified Order Numbers (e.g RVLT001756) for the purpose of external references.', 'revolut-gateway-for-woocommerce' ), 72 'desc_tip' => true, 73 'type' => 'select', 74 'default' => 'order_id', 75 'options' => array( 76 'order_id' => __( 'WooCommerce Order ID', 'revolut-gateway-for-woocommerce' ), 77 'order_number' => __( 'WooCommerce Order Number', 'revolut-gateway-for-woocommerce' ), 78 ), 66 79 ), 67 'consent_clear_unused_order_records' => array(68 'title' => '',69 'label' => __( 'By ticking this box I understand that unused order IDs stored in my website’s database will be deleted. I understand as well that this is run at my own risk and could cause temporary issues with payments being failed.', 'revolut-gateway-for-woocommerce' ),70 'type' => 'checkbox',71 'default' => 'no',72 'class' => 'info_clear_unused_order_records',73 ),74 75 80 ); 76 81 } -
revolut-gateway-for-woocommerce/trunk/readme.txt
r3230609 r3235401 4 4 Requires at least: 4.4 5 5 Tested up to: 6.6.2 6 Stable tag: 4.18. 66 Stable tag: 4.18.7 7 7 Requires PHP: 7.2 8 8 License: GPLv2 or later … … 99 99 100 100 == Changelog == 101 = 4.18.7 = 102 * Added configuration for order external reference selection 103 * Disabled postcode requirement for card payment on block checkout 104 101 105 = 4.18.6 = 102 106 * Fixed an issue where cart block is not loading when payment methods are not available
Note: See TracChangeset
for help on using the changeset viewer.