Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
@filerobot/explorer / lib / components / metadata.adapter.js
Size: Mime:
var _excluded = ["regional_variants", "possible_values", "permissions"];
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _iterableToArrayLimit(r, l) { var t = null == r ? null : "undefined" != typeof Symbol && r[Symbol.iterator] || r["@@iterator"]; if (null != t) { var e, n, i, u, a = [], f = !0, o = !1; try { if (i = (t = t.call(r)).next, 0 === l) { if (Object(t) !== t) return; f = !1; } else for (; !(f = (e = i.call(t)).done) && (a.push(e.value), a.length !== l); f = !0); } catch (r) { o = !0, n = r; } finally { try { if (!f && null != t["return"] && (u = t["return"](), Object(u) !== u)) return; } finally { if (o) throw n; } } return a; } }
function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }
function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }
function _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); }
function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); }
import cuid from 'cuid';

/**
 * Connected with ticket -- http://sk.fl3x.cc/?i=8KJIbM0d51zOLt
 * We need to adapt metadata to new format which support Regional variants groups
 */

var generateFieldPossibleValue = function generateFieldPossibleValue(posValue) {
  return {
    internal_unique_value: (posValue === null || posValue === void 0 ? void 0 : posValue.internal_unique_value) || "@itm_v1_".concat(cuid().slice(0, 10).replaceAll('-', '_'), "@"),
    api_value: (posValue === null || posValue === void 0 ? void 0 : posValue.api_value) || (posValue === null || posValue === void 0 ? void 0 : posValue.label) || (posValue === null || posValue === void 0 ? void 0 : posValue.key) || '',
    // "key" and "title" are old format props, added just for support
    label: (posValue === null || posValue === void 0 ? void 0 : posValue.label) || (posValue === null || posValue === void 0 ? void 0 : posValue.title) || ''
  };
};
var generateFieldPermission = function generateFieldPermission(permission) {
  return {
    permission_uuid: (permission === null || permission === void 0 ? void 0 : permission.uuid) || cuid(),
    scope: (permission === null || permission === void 0 ? void 0 : permission.scope) || PERMISSION_SCOPE.COMPANY,
    uuids: ((permission === null || permission === void 0 ? void 0 : permission.uuids) || []).filter(function (uuidItem) {
      return uuidItem && uuidItem !== ' ';
    }),
    can_view: (permission === null || permission === void 0 ? void 0 : permission.can_view) || null,
    can_edit: (permission === null || permission === void 0 ? void 0 : permission.can_edit) || null // Edit + View
  };
};

var generateField = function generateField(field) {
  return _objectSpread({
    uuid: cuid(),
    // ckey: '',
    key: '',
    type: 'text',
    title: '',
    hint: '',
    icon: '',
    // inject: 'something inside fields',
    can_edit: true,
    required: false,
    permissions: [],
    placeholder: '',
    possible_values: [],
    permission_delivery: 'MD_HIDE',
    regional_variants_group_uuid: null
  }, field);
};
var PERMISSION_SCOPE = {
  COMPANY: 'company',
  TEAM: 'team',
  USER: 'user'
};
var REGIONAL_VARIANT_TYPE = {
  LANGUAGES: 'FTYPE_LANGUAGES',
  CUSTOM: 'FTYPE_CUSTOM',
  CURRENCIES: 'FTYPE_CURRENCIES'
};
var ROOT_FIELDS_GROUP = {
  uuid: cuid(),
  name: 'Root fields',
  isRoot: true,
  // Not editable/deletable. Fields has some restrictions.
  fields: [generateField({
    key: 'title',
    title: 'Title',
    regional_variants_group_uuid: null
  }), generateField({
    key: 'description',
    title: 'Description',
    regional_variants_group_uuid: null
  })]
};
var adaptMetadata = function adaptMetadata(metadata) {
  var _metadata$store;
  if (!metadata) {
    return metadata;
  }

  // New format, adaption is not necessary
  if (metadata !== null && metadata !== void 0 && (_metadata$store = metadata.store) !== null && _metadata$store !== void 0 && _metadata$store.regional_variants_groups) {
    var _metadata$store2, _metadata$store3;
    return Array.isArray(metadata === null || metadata === void 0 ? void 0 : (_metadata$store2 = metadata.store) === null || _metadata$store2 === void 0 ? void 0 : _metadata$store2.regional_variants_groups) ? metadata : _objectSpread(_objectSpread({}, metadata), {}, {
      store: _objectSpread(_objectSpread({
        force_filling_metadata_on_upload: false
      }, (metadata === null || metadata === void 0 ? void 0 : metadata.store) || {}), {}, {
        regional_variants_groups: regionalGroupsToArray(metadata === null || metadata === void 0 ? void 0 : (_metadata$store3 = metadata.store) === null || _metadata$store3 === void 0 ? void 0 : _metadata$store3.regional_variants_groups)
      })
    });
  }
  var adaptedMetadata = _objectSpread(_objectSpread({}, metadata), {}, {
    model: [],
    store: _objectSpread(_objectSpread({
      force_filling_metadata_on_upload: false
    }, (metadata === null || metadata === void 0 ? void 0 : metadata.store) || {}), {}, {
      regional_variants_groups: []
    })
  });
  var oldMetaModel = metadata === null || metadata === void 0 ? void 0 : metadata.model;

  /**
   * Generate regionalVariantsGroups and update model fields regional_variants params, to use group uuid instead of string[]
   */

  // Regional variants group hash buffer
  var rvGroupHashBuffer = {};
  adaptedMetadata.model = (oldMetaModel || []).map(function (item) {
    return _objectSpread(_objectSpread({}, item), {}, {
      groups: ((item === null || item === void 0 ? void 0 : item.groups) || []).map(function (group) {
        return _objectSpread(_objectSpread({}, group), {}, {
          uuid: (group === null || group === void 0 ? void 0 : group.uuid) || cuid(),
          // Add uuid when it's not exist
          fields: ((group === null || group === void 0 ? void 0 : group.fields) || []).map(function (field) {
            var fieldRegionalVariants = field.regional_variants,
              possibleValues = field.possible_values,
              permissions = field.permissions,
              fieldRest = _objectWithoutProperties(field, _excluded);
            /**
             * For select types we can't use regional variants. (Disscussed with Julian)
             * Bad file metadata:
             *   which_colors: { default:  [@item1, @item2] }
             * Good file metadata:
             *   which_colors: [@item1, @item2]
             */
            var needRemoveRegionalVariants = ['select-one', 'multi-select'].indexOf(fieldRest === null || fieldRest === void 0 ? void 0 : fieldRest.type) > -1;
            var adaptedField = _objectSpread(_objectSpread({}, fieldRest), {}, {
              possible_values: (possibleValues || []).map(function (val) {
                return generateFieldPossibleValue(val);
              }),
              permissions: (Array.isArray(permissions) ? permissions : []).map(function (val) {
                return generateFieldPermission(val);
              }),
              uuid: (field === null || field === void 0 ? void 0 : field.uuid) || cuid() // Add uuid when it's not exist
            });

            if (!needRemoveRegionalVariants && fieldRegionalVariants !== null && fieldRegionalVariants !== void 0 && fieldRegionalVariants.length) {
              var rvGroupPropName = (fieldRegionalVariants || []).sort().join('_');
              if (!rvGroupHashBuffer[rvGroupPropName]) {
                // Add group
                rvGroupHashBuffer[rvGroupPropName] = generateNewRegionalVariantGroup(rvGroupHashBuffer, fieldRegionalVariants);
              }
              adaptedField.permissions = (adaptedField.permissions || []).map(function (permission) {
                return _objectSpread(_objectSpread({}, permission), {}, {
                  can_edit: (permission.can_edit || []).map(function (label) {
                    var _rvGroupHashBuffer$rv;
                    var variant = (_rvGroupHashBuffer$rv = rvGroupHashBuffer[rvGroupPropName].variants) === null || _rvGroupHashBuffer$rv === void 0 ? void 0 : _rvGroupHashBuffer$rv.find(function (v) {
                      return (v === null || v === void 0 ? void 0 : v.label) === label;
                    });
                    return (variant === null || variant === void 0 ? void 0 : variant.internal_unique_value) || label; // TODO Vitaly: figure out what use here: internal_unique_value or api_value
                  }),

                  can_view: (permission.can_view || []).map(function (label) {
                    var _rvGroupHashBuffer$rv2;
                    var variant = (_rvGroupHashBuffer$rv2 = rvGroupHashBuffer[rvGroupPropName].variants) === null || _rvGroupHashBuffer$rv2 === void 0 ? void 0 : _rvGroupHashBuffer$rv2.find(function (v) {
                      return (v === null || v === void 0 ? void 0 : v.label) === label;
                    });
                    return (variant === null || variant === void 0 ? void 0 : variant.internal_unique_value) || label; // TODO Vitaly: figure out what use here: internal_unique_value or api_value
                  })
                });
              });

              adaptedField.regional_variants_group_uuid = rvGroupHashBuffer[rvGroupPropName].uuid;
            }
            return adaptedField;
          })
        });
      })
    });
  });
  var rvGroupsArray = Object.values(rvGroupHashBuffer);

  // It's required to have root (permanent) LANGUAGES rv group! We need to use it in "Root fields".

  // No root language group
  if (!rvGroupsArray.some(function (_ref) {
    var isRoot = _ref.isRoot,
      type = _ref.type;
    return isRoot === true && type === REGIONAL_VARIANT_TYPE.LANGUAGES;
  })) {
    var firstLanguageRvGroupIndex = rvGroupsArray === null || rvGroupsArray === void 0 ? void 0 : rvGroupsArray.find(function (_ref2) {
      var type = _ref2.type;
      return type === REGIONAL_VARIANT_TYPE.LANGUAGES;
    });
    if (firstLanguageRvGroupIndex > -1) {
      // group with languages type exists, mark it as "root"
      rvGroupsArray[rvGroupsArray] = _objectSpread(_objectSpread({}, rvGroupsArray[rvGroupsArray]), {}, {
        isRoot: true
      });
    } else {
      // Add languages root rv group because it's not exist
      rvGroupsArray.unshift(generateNewRegionalVariantGroup(rvGroupHashBuffer, ['en'], true));
    }
  }
  adaptedMetadata.store.regional_variants_groups = rvGroupsArray;

  /**
   * Add default "Root fields" group.
   * We wait what regional_variants_groups list is generated, to find language regional group
   */
  adaptedMetadata.model = adaptedMetadata.model.map(function (item) {
    var _ref3;
    if (item.applies_to !== 'FILES') {
      // For now need to add Root fields group only for files
      return item;
    }
    if ((_ref3 = item.groups || []) !== null && _ref3 !== void 0 && _ref3.find(function (group) {
      return group.isRoot;
    })) {
      // Do nothing if we already have Root fields group
      return item;
    }
    return _objectSpread(_objectSpread({}, item), {}, {
      groups: [_objectSpread(_objectSpread({}, ROOT_FIELDS_GROUP), {}, {
        fields: ROOT_FIELDS_GROUP.fields.map(function (field) {
          var _adaptedMetadata$stor;
          var rvLanguageRootGroup = (_adaptedMetadata$stor = adaptedMetadata.store.regional_variants_groups) === null || _adaptedMetadata$stor === void 0 ? void 0 : _adaptedMetadata$stor.find(function (rvGroup) {
            return rvGroup.type === REGIONAL_VARIANT_TYPE.LANGUAGES && rvGroup.isRoot;
          });
          if (!rvLanguageRootGroup) {
            return field;
          }
          return rvLanguageRootGroup ? _objectSpread(_objectSpread({}, field), {}, {
            regional_variants_group_uuid: rvLanguageRootGroup.uuid
          }) : field;
        })
      })].concat(_toConsumableArray(item.groups || []))
    });
  });
  return adaptedMetadata;
};

/**
 * @param {object} groupsObj
 * @param {string[]} variants
 * @param {boolean} [isRoot=false] - Flag to mark group as root. TRUE is mean that this group is not deletable. Added for meta "Root fields" group
 */
var generateNewRegionalVariantGroup = function generateNewRegionalVariantGroup(groupsObj, variants) {
  var _adaptedVariants;
  var isRoot = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
  var groupsReservedLabels = Object.values(groupsObj).map(function (group) {
    return group.label;
  });
  var label = 'Regional group';
  var labelIndex = 1;
  var icon = '';
  var type = REGIONAL_VARIANT_TYPE.CUSTOM;
  var generateLabel = function generateLabel() {
    return "".concat(label).concat(labelIndex > 1 ? " ".concat(labelIndex) : '');
  };
  if (variants.length === 1 && variants[0] === 'default') {
    label = 'Default';
  } else if (variants !== null && variants !== void 0 && variants.some(function (variant) {
    return new RegExp('^(eur|usd)$', 'i').test(variant);
  })) {
    label = 'Currency';
    type = REGIONAL_VARIANT_TYPE.CURRENCIES;
    icon = 'https://www.openpix.net/v1/icon.svg?id=112949';
  } else if (variants !== null && variants !== void 0 && variants.some(function (variant) {
    return new RegExp('^(de|en|fr|bg)$', 'i').test(variant);
  })) {
    label = 'Language';
    type = REGIONAL_VARIANT_TYPE.LANGUAGES;
    icon = 'https://www.openpix.net/v1/icon.svg?id=1631767';
  }

  // Check is name is already used and add suffix with index
  while (groupsReservedLabels.indexOf(generateLabel()) > -1) {
    labelIndex += 1;
  }
  var bufferValSet = new Set((variants || []).filter(function (variant) {
    return variant === null || variant === void 0 ? void 0 : variant.internal_unique_value;
  }).map(function (variant) {
    return variant === null || variant === void 0 ? void 0 : variant.internal_unique_value;
  }));
  var adaptedVariants = (variants || []).map(function (variantLabel) {
    var apiValue = generateSlug(variantLabel);
    return {
      internal_unique_value: generateUniqValue(bufferValSet, apiValue),
      api_value: apiValue,
      label: variantLabel
    };
  });

  // "default" must be first in list, if exists
  var defaultIndex = (_adaptedVariants = adaptedVariants) === null || _adaptedVariants === void 0 ? void 0 : _adaptedVariants.findIndex(function (variant) {
    return variant.label === 'default';
  });
  if (defaultIndex > -1) {
    var _adaptedVariants$spli = adaptedVariants.splice(defaultIndex, 1),
      _adaptedVariants$spli2 = _slicedToArray(_adaptedVariants$spli, 1),
      defaultVariant = _adaptedVariants$spli2[0];
    adaptedVariants = [defaultVariant].concat(_toConsumableArray(adaptedVariants));
  }
  return {
    uuid: cuid(),
    icon: icon,
    type: type,
    label: generateLabel(),
    variants: adaptedVariants,
    isRoot: isRoot
  };
};
var generateSlug = function generateSlug(string) {
  return (string || '').toLowerCase().replace(/\s/g, '_');
};
var generateUniqValue = function generateUniqValue(bufferValSet, string) {
  var length = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 3;
  var num = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;
  var value = "~".concat((string || '').substr(0, length).toUpperCase()).concat(num > 0 ? num : '');
  if (bufferValSet.has(value)) {
    return generateUniqValue(bufferValSet, string, length, num + 1);
  }
  bufferValSet.add(value);
  return value;
};
var getMetaRegionalLanguagesGroupUuid = function getMetaRegionalLanguagesGroupUuid(metaRegionalGroups) {
  var _ref4, _ref4$find;
  return (_ref4 = metaRegionalGroups || []) === null || _ref4 === void 0 ? void 0 : (_ref4$find = _ref4.find(function (group) {
    return (group === null || group === void 0 ? void 0 : group.type) === REGIONAL_VARIANT_TYPE.LANGUAGES;
  })) === null || _ref4$find === void 0 ? void 0 : _ref4$find.uuid;
};
var getMetaRegionalGroupsLanguages = function getMetaRegionalGroupsLanguages(metaRegionalGroups) {
  var _ref5, _ref5$find;
  return ((_ref5 = metaRegionalGroups || []) === null || _ref5 === void 0 ? void 0 : (_ref5$find = _ref5.find(function (group) {
    return (group === null || group === void 0 ? void 0 : group.type) === REGIONAL_VARIANT_TYPE.LANGUAGES;
  })) === null || _ref5$find === void 0 ? void 0 : _ref5$find.variants) || [];
};
var getMetaRegionalGroupsLanguagesApiValues = function getMetaRegionalGroupsLanguagesApiValues(metaRegionalGroups) {
  return getMetaRegionalGroupsLanguages(metaRegionalGroups).map(function (variant) {
    return variant === null || variant === void 0 ? void 0 : variant.api_value;
  });
};
var isMetaRegionalLanguagesGroupExists = function isMetaRegionalLanguagesGroupExists(metaRegionalGroups) {
  return Boolean(getMetaRegionalLanguagesGroupUuid(metaRegionalGroups));
};

// Fn to cover BE issue when returned stringified array
var regionalGroupsToArray = function regionalGroupsToArray(metaRegionalGroups) {
  if (Array.isArray(metaRegionalGroups)) {
    return metaRegionalGroups;
  }
  if (typeof metaRegionalGroups === 'string' && metaRegionalGroups !== '[]') {
    try {
      var parsedGroups = JSON.parse(metaRegionalGroups);
      if (Array.isArray(parsedGroups)) {
        return parsedGroups;
      }
    } catch (error) {}
  }
  return [];
};
export { adaptMetadata, getMetaRegionalLanguagesGroupUuid, getMetaRegionalGroupsLanguages, getMetaRegionalGroupsLanguagesApiValues, isMetaRegionalLanguagesGroupExists, regionalGroupsToArray, REGIONAL_VARIANT_TYPE };