text: /**
   * Copyright © Magento, Inc. All rights reserved.
   * See COPYING.txt for license details.
   */
  define([
      'underscore',
      'Magento_Ui/js/form/element/abstract'
  ], function (_, Acstract) {
      'use strict';
  
      return Acstract.extend({
          defaults: {
              prefixName: '',
              prefixElementName: '',
              elementName: '',
              suffixName: ''
          },
  
          /**
           * Parses options and merges the result with instance
           *
           * @returns {Object} Chainable.
           */
          initConfig: function () {
              this._super();
              this.configureDataScope();
  
              return this;
          },
  
          /**
           * Configure data scope.
           */
          configureDataScope: function () {
              var recordId,
                  prefixName,
                  suffixName;
  
              // Get recordId
              recordId = this.parentName.split('.').last();
  
              prefixName = this.dataScopeToHtmlArray(this.prefixName);
              this.elementName = this.prefixElementName + recordId;
  
              suffixName = '';
  
              if (!_.isEmpty(this.suffixName) || _.isNumber(this.suffixName)) {
                  suffixName = '[' + this.suffixName + ']';
              }
              this.inputName = prefixName + '[' + this.elementName + ']' + suffixName;
  
              suffixName = '';
  
              if (!_.isEmpty(this.suffixName) || _.isNumber(this.suffixName)) {
                  suffixName = '.' + this.suffixName;
              }
  
              this.exportDataLink = 'data.' + this.prefixName + '.' + this.elementName + suffixName;
              this.exports.value = this.provider + ':' + this.exportDataLink;
          },
  
          /** @inheritdoc */
          destroy: function () {
              this._super();
  
              this.source.remove(this.exportDataLink);
          },
  
          /**
           * Get HTML array from data scope.
           *
           * @param {String} dataScopeString
           * @returns {String}
           */
          dataScopeToHtmlArray: function (dataScopeString) {
              var dataScopeArray, dataScope, reduceFunction;
  
              /**
               * Add new level of nesting.
               *
               * @param {String} prev
               * @param {String} curr
               * @returns {String}
               */
              reduceFunction = function (prev, curr) {
                  return prev + '[' + curr + ']';
              };
  
              dataScopeArray = dataScopeString.split('.');
  
              dataScope = dataScopeArray.shift();
              dataScope += dataScopeArray.reduce(reduceFunction, '');
  
              return dataScope;
          }
      });
  });
  