From a332a934899cd946dd05d8c33147c285c07eb09b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jan=20Potu=C5=BEn=C3=ADk?= Date: Mon, 16 Sep 2024 16:47:36 +0200 Subject: [PATCH] PES-2228: fillRateAttrValues extracted --- public/block/index.asset.php | 2 +- public/block/index.js | 2 +- src/PacketaWidget/fillRateAttrValues.js | 23 ++++++++++++++++ .../useOnHDWidgetButtonClicked.js | 27 +++---------------- src/PacketaWidget/useOnWidgetButtonClicked.js | 25 ++--------------- 5 files changed, 30 insertions(+), 49 deletions(-) create mode 100644 src/PacketaWidget/fillRateAttrValues.js diff --git a/public/block/index.asset.php b/public/block/index.asset.php index a8f9832ec..25d957647 100644 --- a/public/block/index.asset.php +++ b/public/block/index.asset.php @@ -1 +1 @@ - array('react', 'wc-blocks-checkout', 'wc-blocks-components', 'wc-settings', 'wp-block-editor', 'wp-blocks', 'wp-data', 'wp-i18n'), 'version' => 'f764441bfe2d788f5370'); + array('react', 'wc-blocks-checkout', 'wc-blocks-components', 'wc-settings', 'wp-block-editor', 'wp-blocks', 'wp-data', 'wp-i18n'), 'version' => '2dc2ca82076e7852d03b'); diff --git a/public/block/index.js b/public/block/index.js index 99a035f68..369682e85 100644 --- a/public/block/index.js +++ b/public/block/index.js @@ -1 +1 @@ -(()=>{"use strict";const e=window.wp.blocks,t=window.wc.blocksCheckout,o=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"packeta/packeta-widget","version":"0.1.0","title":"Packeta Widget","category":"woocommerce","parent":["woocommerce/checkout-shipping-methods-block"],"attributes":{"lock":{"type":"object","default":{"remove":true,"move":true}}},"icon":"cart","description":"Packeta Widget Block","textdomain":"packeta-widget","viewScript":"file:./index.js"}'),n=window.React,i=window.wp.blockEditor,a=({children:e,buttonLabel:t,logoSrc:o,logoAlt:i,info:a,onClick:c,loading:r,placeholderText:s})=>(0,n.createElement)("div",{className:"packetery-widget-button-wrapper"},r&&(0,n.createElement)("div",{className:"packeta-widget-loading"},s),!r&&(0,n.createElement)("div",{className:"form-row packeta-widget blocks"},(0,n.createElement)("div",{className:"packetery-widget-button-row packeta-widget-button"},(0,n.createElement)("img",{className:"packetery-widget-button-logo",src:o,alt:i}),(0,n.createElement)("a",{onClick:c,className:"button alt components-button wc-block-components-button wp-element-button contained"},t)),e,a&&(0,n.createElement)("p",{className:"packeta-widget-info"},a))),c=window.wp.data,r=window.wc.wcSettings,s=window.wc.blocksComponents,{PAYMENT_STORE_KEY:l}=window.wc.wcBlocksData,d=window.wp.i18n,{extensionCartUpdate:p}=wc.blocksCheckout,u=function(e,t){let o=null;if(t)o=t.value;else{const e=document.querySelector('input[name="radio-control-wc-payment-method-options"]:checked');null!==e&&(o=e.value)}let n=null;if(e)n=e.shippingRateId;else{let e=document.querySelectorAll('.wc-block-components-shipping-rates-control input[type="radio"]');for(let t=0;t{const e=(0,i.useBlockProps)();return(0,n.createElement)("div",{...e},(0,n.createElement)(a,{buttonLabel:"Choose pickup point",logoSrc:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZyc3R2YV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMzcgNDAiIHN0eWxlPSJmaWxsOiNhN2FhYWQiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiAjYTdhYWFkO30KPC9zdHlsZT4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTE5LjQsMTYuMWwtMC45LDAuNGwtMC45LTAuNGwtMTMtNi41bDYuMi0yLjRsMTMuNCw2LjVMMTkuNCwxNi4xeiBNMzIuNSw5LjZsLTQuNywyLjNsLTEzLjUtNmw0LjItMS42CglMMzIuNSw5LjZ6Ii8+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xOSwwbDE3LjIsNi42bC0yLjQsMS45bC0xNS4yLTZMMy4yLDguNkwwLjgsNi42TDE4LDBMMTksMEwxOSwweiBNMzQuMSw5LjFsMi44LTEuMWwtMi4xLDE3LjZsLTAuNCwwLjgKCUwxOS40LDQwbC0wLjUtMy4xbDEzLjQtMTJMMzQuMSw5LjF6IE0yLjUsMjYuNWwtMC40LTAuOEwwLDguMWwyLjgsMS4xbDEuOSwxNS43bDEzLjQsMTJMMTcuNiw0MEwyLjUsMjYuNXoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTI4LjIsMTIuNGw0LjMtMi43bC0xLjcsMTQuMkwxOC42LDM1bDAuNi0xN2w1LjQtMy4zTDI0LjMsMjNsMy4zLTIuM0wyOC4yLDEyLjR6Ii8+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xNy43LDE3LjlsMC42LDE3bC0xMi4yLTExTDQuNCw5LjhMMTcuNywxNy45eiIvPgo8L3N2Zz4K",logoAlt:"Packeta",info:"Pickup Point Name"}))}}),(0,t.registerCheckoutBlock)({metadata:o,component:({cart:e})=>{const[t,o]=(0,n.useState)(null),{shippingRates:i,shippingAddress:d,cartItemsWeight:p}=e,u=(0,c.useSelect)((e=>e(l)),[]),w=(0,r.getSetting)("packeta-widget_data"),{carrierConfig:k,translations:g,logo:h,widgetAutoOpen:m,adminAjaxUrl:y}=w,M=((e,t)=>{if(!e||0===e.length)return null;const{shipping_rates:o}=e[0];if(!o||0===o.length)return null;const n=e=>o.find((({rate_id:o,selected:n})=>{if(!n)return!1;const i=o.split(":").pop(),a=t[i];return!!a&&e(a)}));return{packetaPickupPointShippingRate:n((e=>{const{is_pickup_points:t}=e;return e&&t}))||null,packetaHomeDeliveryShippingRate:n((e=>{const{is_pickup_points:t}=e;return e&&!t}))||null,chosenShippingRate:o.find((({selected:e})=>e))||null}})(i,k),{packetaPickupPointShippingRate:L=null,packetaHomeDeliveryShippingRate:f=null,chosenShippingRate:b=null}=M||{},[I,C,N]=(e=>{let[t,o]=(0,n.useState)(null),[i,a]=(0,n.useState)(!1);return(0,n.useEffect)((()=>{i||null!==t||(a(!0),fetch(e,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({action:"get_settings"})}).then((e=>e.json())).then((e=>{const{isAgeVerificationRequired:t}=e;o((e=>({...e,isAgeVerificationRequired:t})))})).catch((e=>{console.error("Error:",e),o(!1)})).finally((()=>{a(!1)})))}),[t,e,i]),[t,o,i]})(y);(0,n.useEffect)((()=>{if(!I)return;const e=u.getActivePaymentMethod(),t=b?.rate_id||null;let o=!1,n=!1;(!I.shippingSaved&&t||!I.paymentSaved&&""!==e)&&(t&&(o=!0),""!==e&&(n=!0),wp.hooks.doAction("packetery_save_shipping_and_payment_methods",t,e),C({...I,shippingSaved:o,paymentSaved:n}))}),[u,b,I,C,wp]),(0,n.useEffect)((()=>{if(!I)return;const e=d.country.toLowerCase();I.lastCountry?I.lastCountry!==e&&(t&&o(null),C({...I,lastCountry:e})):C({...I,lastCountry:e})}),[I,C,t,o,d]);const S=((e,t,o,i,a,c)=>{const{carrierConfig:r,language:s,packeteryApiKey:l,appIdentity:d,nonce:p,saveSelectedPickupPointUrl:u,pickupPointAttrs:w}=t;return(0,n.useCallback)((()=>{const t=e.rate_id.split(":").pop();let n=+(c/1e3).toFixed(2),k={language:s,appIdentity:d,weight:n};k.country=a.country.toLowerCase(),r[t].carriers&&(k.carriers=r[t].carriers),r[t].vendors&&(k.vendors=r[t].vendors),o&&o.isAgeVerificationRequired&&(k.livePickupPoint=!0);let g={};Packeta.Widget.pick(l,(e=>{if(!e)return;i({pickupPoint:e}),function(e,t,o){for(let n in t){if(!t.hasOwnProperty(n))continue;const{name:i,widgetResultField:a,isWidgetResultField:c}=t[n];if(!1===c)continue;let r=o[a||n];g[e]=g[e]||{},g[e][i]=r}}(t,w,e);let o=g[t];o.packetery_rate_id=t,fetch(u,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","X-WP-Nonce":p},body:new URLSearchParams(o)}).then((e=>{if(!e.ok)throw new Error("HTTP error "+e.status)})).catch((e=>{console.error("Failed to save pickup point data:",e)}))}),k)}),[e,o])})(L,w,I,o,d,p),P=((e,t,o,i,a)=>{const{carrierConfig:c,language:r,packeteryApiKey:s,appIdentity:l,nonce:d,saveValidatedAddressUrl:p,homeDeliveryAttrs:u,translations:w}=t;return(0,n.useCallback)((()=>{const o=e.rate_id.split(":").pop();let n={language:r,appIdentity:l,layout:"hd"};n.country=a.country.toLowerCase(),n.street=a.address_1,n.city=a.city,n.postcode=a.postcode,n.carrierId=c[o].id;let k={};Packeta.Widget.pick(s,(e=>{if(!e||!e.address)return;if(e.address.country!==n.country)return void i({deliveryAddressError:t.translations.invalidAddressCountrySelected});const a=w.deliveryAddressNotification+" "+e.address.name;i({deliveryAddressInfo:a}),function(e,t,o){for(let n in t){if(!t.hasOwnProperty(n))continue;const{name:i,widgetResultField:a,isWidgetResultField:c}=t[n];if(!1===c)continue;let r=o[a||n];k[e]=k[e]||{},k[e][i]=r}}(o,u,e.address);let c=k[o];c.packetery_rate_id=o,c.packetery_address_isValidated=1,fetch(p,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","X-WP-Nonce":d},body:new URLSearchParams(c)}).then((e=>{if(!e.ok)throw new Error("HTTP error "+e.status)})).catch((e=>{console.error("Failed to save pickup point data:",e)}))}),n)}),[e,o])})(f,w,I,o,d);(0,n.useEffect)((()=>{L&&I&&!t&&m&&S()}),[L,m,S]);const j=function(e,t){return"optional"===t||e&&e.deliveryAddressInfo?null:e&&e.deliveryAddressError?e.deliveryAddressError:g.addressIsNotValidatedAndRequiredByCarrier},{choosePickupPoint:v,chooseAddress:T,packeta:E}=g;if(L)return(0,n.createElement)(a,{onClick:S,buttonLabel:v,logoSrc:h,logoAlt:E,info:t&&t.pickupPoint&&t.pickupPoint.name,loading:N,placeholderText:g.placeholderText},(0,n.createElement)(s.ValidatedTextInput,{value:t&&t.pickupPoint?t.pickupPoint.name:"",required:!0,errorMessage:function(e){return e&&e.pickupPoint?null:g.pickupPointNotChosen}(t)}));if(f){const e=k[f.rate_id.split(":").pop()].address_validation||"none";let o=!0;return"none"===e?null:("optional"===e&&(o=!1),(0,n.createElement)(a,{onClick:P,buttonLabel:T,logoSrc:h,logoAlt:E,info:t&&t.deliveryAddressInfo,loading:N,placeholderText:g.placeholderText},(0,n.createElement)(s.ValidatedTextInput,{value:t&&t.deliveryAddressInfo?t.deliveryAddressInfo:"",required:o,errorMessage:j(t,e)})))}return null}});const{extensionCartUpdate:w}=wc.blocksCheckout;wp.hooks.addAction("experimental__woocommerce_blocks-checkout-set-selected-shipping-rate","packetery-js-hooks",(function(e){u(e,null)})),wp.hooks.addAction("experimental__woocommerce_blocks-checkout-set-active-payment-method","packetery-js-hooks",(function(e){u(null,e)})),wp.hooks.addAction("experimental__woocommerce_blocks-checkout-render-checkout-form","packetery-js-hooks",(function(e){w({namespace:"packetery-js-hooks",data:{shipping_method:"n/a",payment_method:"n/a"}})})),wp.hooks.addAction("packetery_save_shipping_and_payment_methods","packetery-js-hooks",(function(e,t){u(e?{shippingRateId:e}:null,""!==t?{value:t}:null)}))})(); \ No newline at end of file +(()=>{"use strict";const e=window.wp.blocks,t=window.wc.blocksCheckout,o=JSON.parse('{"$schema":"https://schemas.wp.org/trunk/block.json","apiVersion":3,"name":"packeta/packeta-widget","version":"0.1.0","title":"Packeta Widget","category":"woocommerce","parent":["woocommerce/checkout-shipping-methods-block"],"attributes":{"lock":{"type":"object","default":{"remove":true,"move":true}}},"icon":"cart","description":"Packeta Widget Block","textdomain":"packeta-widget","viewScript":"file:./index.js"}'),n=window.React,i=window.wp.blockEditor,a=({children:e,buttonLabel:t,logoSrc:o,logoAlt:i,info:a,onClick:c,loading:r,placeholderText:s})=>(0,n.createElement)("div",{className:"packetery-widget-button-wrapper"},r&&(0,n.createElement)("div",{className:"packeta-widget-loading"},s),!r&&(0,n.createElement)("div",{className:"form-row packeta-widget blocks"},(0,n.createElement)("div",{className:"packetery-widget-button-row packeta-widget-button"},(0,n.createElement)("img",{className:"packetery-widget-button-logo",src:o,alt:i}),(0,n.createElement)("a",{onClick:c,className:"button alt components-button wc-block-components-button wp-element-button contained"},t)),e,a&&(0,n.createElement)("p",{className:"packeta-widget-info"},a))),c=window.wp.data,r=window.wc.wcSettings,s=window.wc.blocksComponents,l=function(e,t,o,n){for(let i in t){if(!t.hasOwnProperty(i))continue;const{name:a,widgetResultField:c,isWidgetResultField:r}=t[i];if(!1===r)continue;let s=o[c||i];n[e]=n[e]||{},n[e][a]=s}return n},{PAYMENT_STORE_KEY:d}=window.wc.wcBlocksData,p=window.wp.i18n,{extensionCartUpdate:u}=wc.blocksCheckout,w=function(e,t){let o=null;if(t)o=t.value;else{const e=document.querySelector('input[name="radio-control-wc-payment-method-options"]:checked');null!==e&&(o=e.value)}let n=null;if(e)n=e.shippingRateId;else{let e=document.querySelectorAll('.wc-block-components-shipping-rates-control input[type="radio"]');for(let t=0;t{const e=(0,i.useBlockProps)();return(0,n.createElement)("div",{...e},(0,n.createElement)(a,{buttonLabel:"Choose pickup point",logoSrc:"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjEuMCwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgaWQ9IlZyc3R2YV8xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4PSIwcHgiIHk9IjBweCIKCSB2aWV3Qm94PSIwIDAgMzcgNDAiIHN0eWxlPSJmaWxsOiNhN2FhYWQiIHhtbDpzcGFjZT0icHJlc2VydmUiPgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLnN0MHtmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiAjYTdhYWFkO30KPC9zdHlsZT4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTE5LjQsMTYuMWwtMC45LDAuNGwtMC45LTAuNGwtMTMtNi41bDYuMi0yLjRsMTMuNCw2LjVMMTkuNCwxNi4xeiBNMzIuNSw5LjZsLTQuNywyLjNsLTEzLjUtNmw0LjItMS42CglMMzIuNSw5LjZ6Ii8+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xOSwwbDE3LjIsNi42bC0yLjQsMS45bC0xNS4yLTZMMy4yLDguNkwwLjgsNi42TDE4LDBMMTksMEwxOSwweiBNMzQuMSw5LjFsMi44LTEuMWwtMi4xLDE3LjZsLTAuNCwwLjgKCUwxOS40LDQwbC0wLjUtMy4xbDEzLjQtMTJMMzQuMSw5LjF6IE0yLjUsMjYuNWwtMC40LTAuOEwwLDguMWwyLjgsMS4xbDEuOSwxNS43bDEzLjQsMTJMMTcuNiw0MEwyLjUsMjYuNXoiLz4KPHBhdGggY2xhc3M9InN0MCIgZD0iTTI4LjIsMTIuNGw0LjMtMi43bC0xLjcsMTQuMkwxOC42LDM1bDAuNi0xN2w1LjQtMy4zTDI0LjMsMjNsMy4zLTIuM0wyOC4yLDEyLjR6Ii8+CjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xNy43LDE3LjlsMC42LDE3bC0xMi4yLTExTDQuNCw5LjhMMTcuNywxNy45eiIvPgo8L3N2Zz4K",logoAlt:"Packeta",info:"Pickup Point Name"}))}}),(0,t.registerCheckoutBlock)({metadata:o,component:({cart:e})=>{const[t,o]=(0,n.useState)(null),{shippingRates:i,shippingAddress:p,cartItemsWeight:u}=e,w=(0,c.useSelect)((e=>e(d)),[]),k=(0,r.getSetting)("packeta-widget_data"),{carrierConfig:g,translations:h,logo:m,widgetAutoOpen:y,adminAjaxUrl:M}=k,L=((e,t)=>{if(!e||0===e.length)return null;const{shipping_rates:o}=e[0];if(!o||0===o.length)return null;const n=e=>o.find((({rate_id:o,selected:n})=>{if(!n)return!1;const i=o.split(":").pop(),a=t[i];return!!a&&e(a)}));return{packetaPickupPointShippingRate:n((e=>{const{is_pickup_points:t}=e;return e&&t}))||null,packetaHomeDeliveryShippingRate:n((e=>{const{is_pickup_points:t}=e;return e&&!t}))||null,chosenShippingRate:o.find((({selected:e})=>e))||null}})(i,g),{packetaPickupPointShippingRate:b=null,packetaHomeDeliveryShippingRate:f=null,chosenShippingRate:I=null}=L||{},[C,N,S]=(e=>{let[t,o]=(0,n.useState)(null),[i,a]=(0,n.useState)(!1);return(0,n.useEffect)((()=>{i||null!==t||(a(!0),fetch(e,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({action:"get_settings"})}).then((e=>e.json())).then((e=>{const{isAgeVerificationRequired:t}=e;o((e=>({...e,isAgeVerificationRequired:t})))})).catch((e=>{console.error("Error:",e),o(!1)})).finally((()=>{a(!1)})))}),[t,e,i]),[t,o,i]})(M);(0,n.useEffect)((()=>{if(!C)return;const e=w.getActivePaymentMethod(),t=I?.rate_id||null;let o=!1,n=!1;(!C.shippingSaved&&t||!C.paymentSaved&&""!==e)&&(t&&(o=!0),""!==e&&(n=!0),wp.hooks.doAction("packetery_save_shipping_and_payment_methods",t,e),N({...C,shippingSaved:o,paymentSaved:n}))}),[w,I,C,N,wp]),(0,n.useEffect)((()=>{if(!C)return;const e=p.country.toLowerCase();C.lastCountry?C.lastCountry!==e&&(t&&o(null),N({...C,lastCountry:e})):N({...C,lastCountry:e})}),[C,N,t,o,p]);const v=((e,t,o,i,a,c)=>{const{carrierConfig:r,language:s,packeteryApiKey:d,appIdentity:p,nonce:u,saveSelectedPickupPointUrl:w,pickupPointAttrs:k}=t;return(0,n.useCallback)((()=>{const t=e.rate_id.split(":").pop();let n=+(c/1e3).toFixed(2),g={language:s,appIdentity:p,weight:n};g.country=a.country.toLowerCase(),r[t].carriers&&(g.carriers=r[t].carriers),r[t].vendors&&(g.vendors=r[t].vendors),o&&o.isAgeVerificationRequired&&(g.livePickupPoint=!0);let h={};Packeta.Widget.pick(d,(e=>{if(!e)return;i({pickupPoint:e}),h=l(t,k,e,h);let o=h[t];o.packetery_rate_id=t,fetch(w,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","X-WP-Nonce":u},body:new URLSearchParams(o)}).then((e=>{if(!e.ok)throw new Error("HTTP error "+e.status)})).catch((e=>{console.error("Failed to save pickup point data:",e)}))}),g)}),[e,o])})(b,k,C,o,p,u),P=((e,t,o,i,a)=>{const{carrierConfig:c,language:r,packeteryApiKey:s,appIdentity:d,nonce:p,saveValidatedAddressUrl:u,homeDeliveryAttrs:w,translations:k}=t;return(0,n.useCallback)((()=>{const o=e.rate_id.split(":").pop();let n={language:r,appIdentity:d,layout:"hd"};n.country=a.country.toLowerCase(),n.street=a.address_1,n.city=a.city,n.postcode=a.postcode,n.carrierId=c[o].id;let g={};Packeta.Widget.pick(s,(e=>{if(!e||!e.address)return;if(e.address.country!==n.country)return void i({deliveryAddressError:t.translations.invalidAddressCountrySelected});const a=k.deliveryAddressNotification+" "+e.address.name;i({deliveryAddressInfo:a}),g=l(o,w,e.address,g);let c=g[o];c.packetery_rate_id=o,c.packetery_address_isValidated=1,fetch(u,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","X-WP-Nonce":p},body:new URLSearchParams(c)}).then((e=>{if(!e.ok)throw new Error("HTTP error "+e.status)})).catch((e=>{console.error("Failed to save validated address data:",e)}))}),n)}),[e,o])})(f,k,C,o,p);(0,n.useEffect)((()=>{b&&C&&!t&&y&&v()}),[b,y,v]);const j=function(e,t){return"optional"===t||e&&e.deliveryAddressInfo?null:e&&e.deliveryAddressError?e.deliveryAddressError:h.addressIsNotValidatedAndRequiredByCarrier},{choosePickupPoint:T,chooseAddress:E,packeta:_}=h;if(b)return(0,n.createElement)(a,{onClick:v,buttonLabel:T,logoSrc:m,logoAlt:_,info:t&&t.pickupPoint&&t.pickupPoint.name,loading:S,placeholderText:h.placeholderText},(0,n.createElement)(s.ValidatedTextInput,{value:t&&t.pickupPoint?t.pickupPoint.name:"",required:!0,errorMessage:function(e){return e&&e.pickupPoint?null:h.pickupPointNotChosen}(t)}));if(f){const e=g[f.rate_id.split(":").pop()].address_validation||"none";let o=!0;return"none"===e?null:("optional"===e&&(o=!1),(0,n.createElement)(a,{onClick:P,buttonLabel:E,logoSrc:m,logoAlt:_,info:t&&t.deliveryAddressInfo,loading:S,placeholderText:h.placeholderText},(0,n.createElement)(s.ValidatedTextInput,{value:t&&t.deliveryAddressInfo?t.deliveryAddressInfo:"",required:o,errorMessage:j(t,e)})))}return null}});const{extensionCartUpdate:k}=wc.blocksCheckout;wp.hooks.addAction("experimental__woocommerce_blocks-checkout-set-selected-shipping-rate","packetery-js-hooks",(function(e){w(e,null)})),wp.hooks.addAction("experimental__woocommerce_blocks-checkout-set-active-payment-method","packetery-js-hooks",(function(e){w(null,e)})),wp.hooks.addAction("experimental__woocommerce_blocks-checkout-render-checkout-form","packetery-js-hooks",(function(e){k({namespace:"packetery-js-hooks",data:{shipping_method:"n/a",payment_method:"n/a"}})})),wp.hooks.addAction("packetery_save_shipping_and_payment_methods","packetery-js-hooks",(function(e,t){w(e?{shippingRateId:e}:null,""!==t?{value:t}:null)}))})(); \ No newline at end of file diff --git a/src/PacketaWidget/fillRateAttrValues.js b/src/PacketaWidget/fillRateAttrValues.js new file mode 100644 index 000000000..1b05f53c7 --- /dev/null +++ b/src/PacketaWidget/fillRateAttrValues.js @@ -0,0 +1,23 @@ +export const fillRateAttrValues = function ( carrierRateId, data, source, rateAttrValues ) { + for ( let attrKey in data ) { + if ( ! data.hasOwnProperty( attrKey ) ) { + continue; + } + + const { name, widgetResultField, isWidgetResultField } = + data[ attrKey ]; + + if ( false === isWidgetResultField ) { + continue; + } + + let widgetField = widgetResultField || attrKey; + let addressFieldValue = source[ widgetField ]; + + rateAttrValues[ carrierRateId ] = + rateAttrValues[ carrierRateId ] || {}; + rateAttrValues[ carrierRateId ][ name ] = addressFieldValue; + } + + return rateAttrValues; +}; diff --git a/src/PacketaWidget/useOnHDWidgetButtonClicked.js b/src/PacketaWidget/useOnHDWidgetButtonClicked.js index 326d8723e..57de2424c 100644 --- a/src/PacketaWidget/useOnHDWidgetButtonClicked.js +++ b/src/PacketaWidget/useOnHDWidgetButtonClicked.js @@ -5,6 +5,7 @@ */ import { useCallback } from 'react'; +import { fillRateAttrValues } from './fillRateAttrValues'; export const useOnHDWidgetButtonClicked = ( packetaShippingRate, @@ -35,28 +36,6 @@ export const useOnHDWidgetButtonClicked = ( widgetOptions.postcode = shippingAddress.postcode; widgetOptions.carrierId = carrierConfig[ rateId ].id; - const fillRateAttrValues = function ( carrierRateId, data, source ) { - for ( let attrKey in data ) { - if ( ! data.hasOwnProperty( attrKey ) ) { - continue; - } - - const { name, widgetResultField, isWidgetResultField } = - data[ attrKey ]; - - if ( false === isWidgetResultField ) { - continue; - } - - let widgetField = widgetResultField || attrKey; - let addressFieldValue = source[ widgetField ]; - - rateAttrValues[ carrierRateId ] = - rateAttrValues[ carrierRateId ] || {}; - rateAttrValues[ carrierRateId ][ name ] = addressFieldValue; - } - }; - // Storage to store settings of all Packeta shipping methods displayed at checkout. let rateAttrValues = {}; @@ -75,7 +54,7 @@ export const useOnHDWidgetButtonClicked = ( const deliveryAddressInfo = translations.deliveryAddressNotification + ' ' + result.address.name; setViewState( { deliveryAddressInfo } ); - fillRateAttrValues( rateId, homeDeliveryAttrs, result.address ); + rateAttrValues = fillRateAttrValues( rateId, homeDeliveryAttrs, result.address, rateAttrValues ); let homeDeliveryDataToSave = rateAttrValues[ rateId ]; homeDeliveryDataToSave.packetery_rate_id = rateId; homeDeliveryDataToSave.packetery_address_isValidated = 1; @@ -94,7 +73,7 @@ export const useOnHDWidgetButtonClicked = ( } } ) .catch( ( error ) => { - console.error( 'Failed to save pickup point data:', error ); + console.error( 'Failed to save validated address data:', error ); } ); }, widgetOptions diff --git a/src/PacketaWidget/useOnWidgetButtonClicked.js b/src/PacketaWidget/useOnWidgetButtonClicked.js index 9209b494d..2c3c1d015 100644 --- a/src/PacketaWidget/useOnWidgetButtonClicked.js +++ b/src/PacketaWidget/useOnWidgetButtonClicked.js @@ -5,6 +5,7 @@ */ import { useCallback } from 'react'; +import { fillRateAttrValues } from './fillRateAttrValues'; export const useOnWidgetButtonClicked = ( packetaShippingRate, @@ -40,28 +41,6 @@ export const useOnWidgetButtonClicked = ( widgetOptions.livePickupPoint = true; // Pickup points with real person only. } - const fillRateAttrValues = function ( carrierRateId, data, source ) { - for ( let attrKey in data ) { - if ( ! data.hasOwnProperty( attrKey ) ) { - continue; - } - - const { name, widgetResultField, isWidgetResultField } = - data[ attrKey ]; - - if ( false === isWidgetResultField ) { - continue; - } - - let widgetField = widgetResultField || attrKey; - let addressFieldValue = source[ widgetField ]; - - rateAttrValues[ carrierRateId ] = - rateAttrValues[ carrierRateId ] || {}; - rateAttrValues[ carrierRateId ][ name ] = addressFieldValue; - } - }; - // Storage to store settings of all Packeta shipping methods displayed at checkout. let rateAttrValues = {}; @@ -74,7 +53,7 @@ export const useOnWidgetButtonClicked = ( setViewState( { pickupPoint } ); - fillRateAttrValues( rateId, pickupPointAttrs, pickupPoint ); + rateAttrValues = fillRateAttrValues( rateId, pickupPointAttrs, pickupPoint, rateAttrValues ); let pickupPointDataToSave = rateAttrValues[ rateId ]; pickupPointDataToSave.packetery_rate_id = rateId;