address-converter.js 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. /**
  2. * Copyright © Magento, Inc. All rights reserved.
  3. * See COPYING.txt for license details.
  4. */
  5. /**
  6. * @api
  7. */
  8. define([
  9. 'jquery',
  10. 'Magento_Checkout/js/model/new-customer-address',
  11. 'Magento_Customer/js/customer-data',
  12. 'mage/utils/objects'
  13. ], function ($, address, customerData, mageUtils) {
  14. 'use strict';
  15. var countryData = customerData.get('directory-data');
  16. return {
  17. /**
  18. * Convert address form data to Address object
  19. * @param {Object} formData
  20. * @returns {Object}
  21. */
  22. formAddressDataToQuoteAddress: function (formData) {
  23. // clone address form data to new object
  24. var addressData = $.extend(true, {}, formData),
  25. region,
  26. regionName = addressData.region;
  27. if (mageUtils.isObject(addressData.street)) {
  28. addressData.street = this.objectToArray(addressData.street);
  29. }
  30. addressData.region = {
  31. 'region_id': addressData['region_id'],
  32. 'region_code': addressData['region_code'],
  33. region: regionName
  34. };
  35. if (addressData['region_id'] &&
  36. countryData()[addressData['country_id']] &&
  37. countryData()[addressData['country_id']].regions
  38. ) {
  39. region = countryData()[addressData['country_id']].regions[addressData['region_id']];
  40. if (region) {
  41. addressData.region['region_id'] = addressData['region_id'];
  42. addressData.region['region_code'] = region.code;
  43. addressData.region.region = region.name;
  44. }
  45. } else if (
  46. !addressData['region_id'] &&
  47. countryData()[addressData['country_id']] &&
  48. countryData()[addressData['country_id']].regions
  49. ) {
  50. addressData.region['region_code'] = '';
  51. addressData.region.region = '';
  52. }
  53. delete addressData['region_id'];
  54. if (addressData['custom_attributes']) {
  55. addressData['custom_attributes'] = Object.entries(addressData['custom_attributes'])
  56. .map(function (customAttribute) {
  57. return {
  58. 'attribute_code': customAttribute[0],
  59. 'value': customAttribute[1]
  60. };
  61. });
  62. }
  63. return address(addressData);
  64. },
  65. /**
  66. * Convert Address object to address form data.
  67. *
  68. * @param {Object} addrs
  69. * @returns {Object}
  70. */
  71. quoteAddressToFormAddressData: function (addrs) {
  72. var self = this,
  73. output = {},
  74. streetObject;
  75. $.each(addrs, function (key) {
  76. if (addrs.hasOwnProperty(key) && !$.isFunction(addrs[key])) {
  77. output[self.toUnderscore(key)] = addrs[key];
  78. }
  79. });
  80. if ($.isArray(addrs.street)) {
  81. streetObject = {};
  82. addrs.street.forEach(function (value, index) {
  83. streetObject[index] = value;
  84. });
  85. output.street = streetObject;
  86. }
  87. return output;
  88. },
  89. /**
  90. * @param {String} string
  91. */
  92. toUnderscore: function (string) {
  93. return string.replace(/([A-Z])/g, function ($1) {
  94. return '_' + $1.toLowerCase();
  95. });
  96. },
  97. /**
  98. * @param {Object} formProviderData
  99. * @param {String} formIndex
  100. * @return {Object}
  101. */
  102. formDataProviderToFlatData: function (formProviderData, formIndex) {
  103. var addressData = {};
  104. $.each(formProviderData, function (path, value) {
  105. var pathComponents = path.split('.'),
  106. dataObject = {};
  107. pathComponents.splice(pathComponents.indexOf(formIndex), 1);
  108. pathComponents.reverse();
  109. $.each(pathComponents, function (index, pathPart) {
  110. var parent = {};
  111. if (index == 0) { //eslint-disable-line eqeqeq
  112. dataObject[pathPart] = value;
  113. } else {
  114. parent[pathPart] = dataObject;
  115. dataObject = parent;
  116. }
  117. });
  118. $.extend(true, addressData, dataObject);
  119. });
  120. return addressData;
  121. },
  122. /**
  123. * Convert object to array
  124. * @param {Object} object
  125. * @returns {Array}
  126. */
  127. objectToArray: function (object) {
  128. var convertedArray = [];
  129. $.each(object, function (key) {
  130. return typeof object[key] === 'string' ? convertedArray.push(object[key]) : false;
  131. });
  132. return convertedArray.slice(0);
  133. },
  134. /**
  135. * @param {Object} addrs
  136. * @return {*|Object}
  137. */
  138. addressToEstimationAddress: function (addrs) {
  139. var self = this,
  140. estimatedAddressData = {};
  141. $.each(addrs, function (key) {
  142. estimatedAddressData[self.toUnderscore(key)] = addrs[key];
  143. });
  144. return this.formAddressDataToQuoteAddress(estimatedAddressData);
  145. }
  146. };
  147. });