Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var popUp = null;
- return Component.extend({
- defaults: {
- template: 'Magento_Checkout/shipping',
- shippingFormTemplate: 'Magento_Checkout/shipping-address/form',
- shippingMethodListTemplate: 'Magento_Checkout/shipping-address/shipping-method-list',
- shippingMethodItemTemplate: 'Magento_Checkout/shipping-address/shipping-method-item'
- },
- visible: ko.observable(!quote.isVirtual()),
- errorValidationMessage: ko.observable(false),
- isCustomerLoggedIn: customer.isLoggedIn,
- isFormPopUpVisible: formPopUpState.isVisible,
- isFormInline: addressList().length === 0,
- isNewAddressAdded: ko.observable(false),
- saveInAddressBook: 1,
- quoteIsVirtual: quote.isVirtual(),
- /**
- * @return {exports}
- */
- initialize: function () {
- var self = this,
- hasNewAddress,
- fieldsetName = 'checkout.steps.shipping-step.shippingAddress.shipping-address-fieldset';
- this._super();
- if (!quote.isVirtual()) {
- stepNavigator.registerStep(
- 'shipping',
- '',
- $t('Shipping'),
- this.visible, _.bind(this.navigate, this),
- 10
- );
- }
- checkoutDataResolver.resolveShippingAddress();
- hasNewAddress = addressList.some(function (address) {
- return address.getType() == 'new-customer-address'; //eslint-disable-line eqeqeq
- });
- this.isNewAddressAdded(hasNewAddress);
- this.isFormPopUpVisible.subscribe(function (value) {
- if (value) {
- self.getPopUp().openModal();
- }
- });
- quote.shippingMethod.subscribe(function () {
- self.errorValidationMessage(false);
- });
- registry.async('checkoutProvider')(function (checkoutProvider) {
- var shippingAddressData = checkoutData.getShippingAddressFromData();
- if (shippingAddressData) {
- checkoutProvider.set(
- 'shippingAddress',
- $.extend(true, {}, checkoutProvider.get('shippingAddress'), shippingAddressData)
- );
- }
- checkoutProvider.on('shippingAddress', function (shippingAddrsData) {
- checkoutData.setShippingAddressFromData(shippingAddrsData);
- });
- shippingRatesValidator.initFields(fieldsetName);
- });
- return this;
- },
- /**
- * Navigator change hash handler.
- *
- * @param {Object} step - navigation step
- */
- navigate: function (step) {
- step && step.isVisible(true);
- },
- /**
- * @return {*}
- */
- getPopUp: function () {
- var self = this,
- buttons;
- if (!popUp) {
- buttons = this.popUpForm.options.buttons;
- this.popUpForm.options.buttons = [
- {
- text: buttons.save.text ? buttons.save.text : $t('Save Address'),
- class: buttons.save.class ? buttons.save.class : 'action primary action-save-address',
- click: self.saveNewAddress.bind(self)
- },
- {
- text: buttons.cancel.text ? buttons.cancel.text : $t('Cancel'),
- class: buttons.cancel.class ? buttons.cancel.class : 'action secondary action-hide-popup',
- /** @inheritdoc */
- click: this.onClosePopUp.bind(this)
- }
- ];
- /** @inheritdoc */
- this.popUpForm.options.closed = function () {
- self.isFormPopUpVisible(false);
- };
- this.popUpForm.options.modalCloseBtnHandler = this.onClosePopUp.bind(this);
- this.popUpForm.options.keyEventHandlers = {
- escapeKey: this.onClosePopUp.bind(this)
- };
- /** @inheritdoc */
- this.popUpForm.options.opened = function () {
- // Store temporary address for revert action in case when user click cancel action
- self.temporaryAddress = $.extend(true, {}, checkoutData.getShippingAddressFromData());
- };
- popUp = modal(this.popUpForm.options, $(this.popUpForm.element));
- }
- return popUp;
- },
- /**
- * Revert address and close modal.
- */
- onClosePopUp: function () {
- checkoutData.setShippingAddressFromData($.extend(true, {}, this.temporaryAddress));
- this.getPopUp().closeModal();
- },
- /**
- * Show address form popup
- */
- showFormPopUp: function () {
- this.isFormPopUpVisible(true);
- },
- /**
- * Save new shipping address
- */
- saveNewAddress: function () {
- var addressData,
- newShippingAddress;
- this.source.set('params.invalid', false);
- this.triggerShippingDataValidateEvent();
- if (!this.source.get('params.invalid')) {
- addressData = this.source.get('shippingAddress');
- // if user clicked the checkbox, its value is true or false. Need to convert.
- addressData['save_in_address_book'] = this.saveInAddressBook ? 1 : 0;
- // New address must be selected as a shipping address
- newShippingAddress = createShippingAddress(addressData);
- selectShippingAddress(newShippingAddress);
- checkoutData.setSelectedShippingAddress(newShippingAddress.getKey());
- checkoutData.setNewCustomerShippingAddress($.extend(true, {}, addressData));
- this.getPopUp().closeModal();
- this.isNewAddressAdded(true);
- }
- },
- /**
- * Shipping Method View
- */
- rates: shippingService.getShippingRates(),
- isLoading: shippingService.isLoading,
- isSelected: ko.computed(function () {
- return quote.shippingMethod() ?
- quote.shippingMethod()['carrier_code'] + '_' + quote.shippingMethod()['method_code'] :
- null;
- }),
- /**
- * @param {Object} shippingMethod
- * @return {Boolean}
- */
- selectShippingMethod: function (shippingMethod) {
- selectShippingMethodAction(shippingMethod);
- checkoutData.setSelectedShippingRate(shippingMethod['carrier_code'] + '_' + shippingMethod['method_code']);
- return true;
- },
- /**
- * Set shipping information handler
- */
- setShippingInformation: function () {
- if (this.validateShippingInformation()) {
- setShippingInformationAction().done(
- function () {
- stepNavigator.next();
- }
- );
- }
- },
- /**
- * @return {Boolean}
- */
- validateShippingInformation: function () {
- var shippingAddress,
- addressData,
- loginFormSelector = 'form[data-role=email-with-possible-login]',
- emailValidationResult = customer.isLoggedIn(),
- field;
- if (!quote.shippingMethod()) {
- this.errorValidationMessage($t('Please specify a shipping method.'));
- return false;
- }
- if (!customer.isLoggedIn()) {
- $(loginFormSelector).validation();
- emailValidationResult = Boolean($(loginFormSelector + ' input[name=username]').valid());
- }
- if (this.isFormInline) {
- this.source.set('params.invalid', false);
- this.triggerShippingDataValidateEvent();
- if (emailValidationResult &&
- this.source.get('params.invalid') ||
- !quote.shippingMethod()['method_code'] ||
- !quote.shippingMethod()['carrier_code']
- ) {
- this.focusInvalid();
- return false;
- }
- shippingAddress = quote.shippingAddress();
- addressData = addressConverter.formAddressDataToQuoteAddress(
- this.source.get('shippingAddress')
- );
- //Copy form data to quote shipping address object
- for (field in addressData) {
- if (addressData.hasOwnProperty(field) && //eslint-disable-line max-depth
- shippingAddress.hasOwnProperty(field) &&
- typeof addressData[field] != 'function' &&
- _.isEqual(shippingAddress[field], addressData[field])
- ) {
- shippingAddress[field] = addressData[field];
- } else if (typeof addressData[field] != 'function' &&
- !_.isEqual(shippingAddress[field], addressData[field])) {
- shippingAddress = addressData;
- break;
- }
- }
- if (customer.isLoggedIn()) {
- shippingAddress['save_in_address_book'] = 1;
- }
- selectShippingAddress(shippingAddress);
- }
- if (!emailValidationResult) {
- $(loginFormSelector + ' input[name=username]').focus();
- return false;
- }
- return true;
- },
- /**
- * Trigger Shipping data Validate Event.
- */
- triggerShippingDataValidateEvent: function () {
- this.source.trigger('shippingAddress.data.validate');
- if (this.source.get('shippingAddress.custom_attributes')) {
- this.source.trigger('shippingAddress.custom_attributes.data.validate');
- }
- }
- });
Add Comment
Please, Sign In to add comment