PluginProbe
Sendy / 3.4.0
Sendy v3.4.0
3.4.6 3.4.7 trunk 3.0 3.0.1 3.0.2 3.0.3 3.0.4 3.0.5 3.0.6 3.0.7 3.0.8 3.0.9 3.1.0 3.1.1 3.1.2 3.1.3 3.2.0 3.2.1 3.2.2 3.2.3 3.2.4 3.2.5 3.2.6 3.2.7 All 32 releases
sendy / src / frontend.js

frontend.js in Sendy 3.4.0, at src/frontend.js

129 lines 2.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 import metadata from './block.json';
2 import { select } from '@wordpress/data';
3
4 const { registerCheckoutBlock, extensionCartUpdate } = wc.blocksCheckout;
5 const { cartStore } = window.wc.wcBlocksData;
6
7 const Block = ({ children, checkoutExtensionData }) => {
8 let store = select(cartStore);
9 const shippingRates = store.getCartData().shippingRates;
10
11 const selectedPickupPointData =
12 store.getCartData().extensions?.['sendy-pickup-point'] || null;
13
14 if (!shouldBeVisible(selectedShippingRates(shippingRates))) {
15 return <></>;
16 }
17
18 const selectedPickupPoint = (data) => {
19 if (data.name === null) {
20 return <></>;
21 }
22
23 return (
24 <>
25 <h3 className="wc-block-components-title sendy-checkout-title">
26 Geselecteerd pick-up-punt
27 </h3>
28
29 <p className="sendy-checkout-content">
30 {data.name} <br />
31 {data.street} {data.number} <br />
32 {data.postal_code} {data.city}
33 </p>
34 </>
35 );
36 };
37
38 return (
39 <div>
40 <h3 className="wc-block-components-title sendy-checkout-title">
41 Pick-up-punt
42 </h3>
43
44 <div className="sendy-checkout-content">
45 <button onClick={openPickupPointPicker}>
46 {selectedPickupPointData.name
47 ? 'Wijzig pick-up-punt'
48 : 'Selecteer pick-up-punt'}
49 </button>
50 </div>
51
52 {selectedPickupPoint(selectedPickupPointData)}
53 </div>
54 );
55 };
56
57 const options = {
58 metadata,
59 component: Block,
60 };
61
62 /**
63 * @param shippingRates
64 * @returns {boolean}
65 */
66 const shouldBeVisible = (shippingRates) => {
67 if (shippingRates === null) {
68 return false;
69 }
70
71 return shippingRates[0].rate_id.startsWith('sendy_pickup_point');
72 };
73
74 const selectedShippingRates = (shippingRates) => {
75 if (!shippingRates.length) {
76 return null;
77 }
78
79 let activeShippingRates = [];
80
81 for (let i = 0; i < shippingRates.length; i++) {
82 if (!shippingRates[i].shipping_rates) {
83 continue;
84 }
85
86 for (let j = 0; j < shippingRates[i].shipping_rates.length; j++) {
87 activeShippingRates.push(shippingRates[i].shipping_rates[j]);
88 }
89 }
90
91 return activeShippingRates.filter((shippingRate) => {
92 return shippingRate.selected;
93 });
94 };
95
96 const openPickupPointPicker = (event) => {
97 event.preventDefault();
98
99 const cartData = select(cartStore).getCartData();
100
101 const carrier = cartData?.extensions?.['sendy-carrier']?.carrier || '';
102
103 const data = {
104 country:
105 cartData.shippingAddress.country ??
106 cartData.billingAddress.country ??
107 'NL',
108 carriers: [carrier],
109 address:
110 cartData.shippingAddress.postcode ??
111 cartData.billingAddress.postcode,
112 };
113
114 window.Sendy.parcelShopPicker.open(
115 data,
116 (data) => {
117 extensionCartUpdate({
118 namespace: 'sendy-set-pickup-point',
119 data: data,
120 });
121 },
122 (errors) => {
123 console.log(errors);
124 }
125 );
126 };
127
128 registerCheckoutBlock(options);
129