select-delivery-option.js 2.2 KB

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