1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
/**
* Refer to LICENSE.txt distributed with the Temando Shipping module for notice of license
*/
define([
'underscore',
'Magento_Checkout/js/model/url-builder',
'Magento_Customer/js/model/customer',
'mage/storage',
'Magento_Checkout/js/model/quote',
'Magento_Checkout/js/model/shipping-service',
'Temando_Shipping/js/model/cache-service',
'Temando_Shipping/js/model/collection-points',
'Temando_Shipping/js/model/pickup-locations'
], function (_, urlBuilder, customer, storage, quote, shippingService, cacheService, collectionPoints, pickupLocations) {
'use strict';
var deliveryOptions = {
clickAndCollect: pickupLocations,
toCollectionPoint: collectionPoints
};
return function (value) {
shippingService.isLoading(true);
var url, urlParams, serviceUrl;
if (customer.isLoggedIn()) {
url = '/carts/mine/delivery-option';
urlParams = {};
} else {
url = '/guest-carts/:cartId/delivery-option';
urlParams = {
cartId: quote.getQuoteId()
};
}
var payload = {cartId: quote.getQuoteId(), selectedOption: value};
serviceUrl = urlBuilder.createUrl(url, urlParams);
return storage.post(
serviceUrl,
JSON.stringify(payload)
).success(function () {
if (quote.shippingAddress()) {
// if a shipping address was selected, clear shipping rates cache
cacheService.invalidateCacheForAddress(quote.shippingAddress());
quote.shippingAddress.valueHasMutated();
} else {
// otherwise stop spinner, no new rates to display
shippingService.isLoading(false);
}
var subscription = shippingService.getShippingRates().subscribe(function () {
_.each(deliveryOptions, function (option) {
option.clear();
});
if (deliveryOptions[value]) {
deliveryOptions[value].reloadCheckoutData();
}
subscription.dispose();
});
}).fail(function () {
shippingService.isLoading(false);
});
};
});