Magento – TypeError: target.extend is not a function

checkoutmagento-2.1magento2requirejs

I need to change some logic formAddressDataToQuoteAddress() from vendor\magento\module-checkout\view\frontend\web\js\model\address-converter.js

I have referred the Magento docs and written this code and i am getting this error

TypeError: target.extend is not a function

app\code\Module\Checkout\view\frontend\requirejs-config.js

   var config = {
          config: {
              mixins: {
                  'Magento_Checkout/js/model/address-converter': {
                      'Perficient_Checkout/js/model/address-converter': true
                  }
              }
         } };

app\code\Module\Checkout\view\frontend\web\js\model\address-converter.js

define(function () {
    'use strict';

    var mixin = {
        formAddressDataToQuoteAddress: function (addressData) {
            return addressData;
        }
    };
    return function (target) {
        return target.extend(mixin);
    };
});

Can any one share some suggestion.

Thanks in advance.

Best Answer

You should use a wrapper for extending this plugin.

Alan Storm has a good guide http://alanstorm.com/the-curious-case-of-magento-2-mixins/

Related question: https://magento.stackexchange.com/a/158072/53205

Magento example: https://github.com/magento/magento2/blob/2.1/app/code/Magento/CheckoutAgreements/view/frontend/web/js/model/place-order-mixin.js

define(['mage/utils/wrapper'],function (wrapper){
'use strict';

    return function (target) {

        var formAddressDataToQuoteAddress = wrapper.wrap(target.formAddressDataToQuoteAddress, function(super, formData){
            return super(formData);
        });

        target.formAddressDataToQuoteAddress = formAddressDataToQuoteAddress;

        return target;
    };
});
Related Topic