@contentstack/utils
Version:
Contentstack utilities for Javascript
183 lines • 10.2 kB
JavaScript
export function addTags(entry, contentTypeUid, tagsAsObject, locale) {
var _a;
if (locale === void 0) { locale = 'en-us'; }
if (entry) {
// handle case senstivity for contentTypeUid and locale
contentTypeUid = contentTypeUid.toLowerCase();
locale = locale.toLowerCase();
var appliedVariants = entry._applied_variants || ((_a = entry === null || entry === void 0 ? void 0 : entry.system) === null || _a === void 0 ? void 0 : _a.applied_variants) || null;
entry.$ = getTag(entry, "".concat(contentTypeUid, ".").concat(entry.uid, ".").concat(locale), tagsAsObject, locale, { _applied_variants: appliedVariants, shouldApplyVariant: !!appliedVariants, metaKey: '' });
}
}
function getTag(content, prefix, tagsAsObject, locale, appliedVariants) {
var tags = {};
var metaKey = appliedVariants.metaKey, shouldApplyVariant = appliedVariants.shouldApplyVariant, _applied_variants = appliedVariants._applied_variants;
Object.entries(content).forEach(function (_a) {
var key = _a[0], value = _a[1];
if (key === '$')
return;
var metaUID = value && typeof value === 'object' && value !== null && value._metadata && value._metadata.uid ? value._metadata.uid : '';
var updatedMetakey = appliedVariants.shouldApplyVariant ? "".concat(appliedVariants.metaKey ? appliedVariants.metaKey + '.' : '').concat(key) : '';
if (metaUID && updatedMetakey)
updatedMetakey = updatedMetakey + '.' + metaUID;
switch (typeof value) {
case "object":
if (Array.isArray(value)) {
value.forEach(function (obj, index) {
var _a;
if (obj === null || obj === undefined) {
return;
}
var childKey = "".concat(key, "__").concat(index);
var parentKey = "".concat(key, "__parent");
metaUID = value && typeof value === 'object' && obj !== null && obj._metadata && obj._metadata.uid ? obj._metadata.uid : '';
updatedMetakey = appliedVariants.shouldApplyVariant ? "".concat(appliedVariants.metaKey ? appliedVariants.metaKey + '.' : '').concat(key) : '';
if (metaUID && updatedMetakey)
updatedMetakey = updatedMetakey + '.' + metaUID;
/**
* Indexes of array are handled here
* {
* "array": ["hello", "world"],
* "$": {
* "array": {"data-cslp": "content_type_uid.entry_uid.locale.array"}
* "array__0": {"data-cslp": "content_type_uid.entry_uid.locale.array.0"}
* "array__1": {"data-cslp": "content_type_uid.entry_uid.locale.array.1"}
* }
* }
*/
tags[childKey] = getTagsValue("".concat(prefix, ".").concat(key, ".").concat(index), tagsAsObject, { _applied_variants: _applied_variants, shouldApplyVariant: shouldApplyVariant, metaKey: updatedMetakey });
tags[parentKey] = getParentTagsValue("".concat(prefix, ".").concat(key), tagsAsObject);
if (typeof obj !== 'undefined' && obj !== null && obj._content_type_uid !== undefined && obj.uid !== undefined) {
/**
* References are handled here
* {
* "reference": [{
* "title": "title",
* "uid": "ref_uid",
* "_content_type_uid": "ref_content_type_uid",
* "$": {"title": {"data-cslp": "ref_content_type_uid.ref_uid.locale.title"}}
* }]
* }
*/
var newAppliedVariants = obj._applied_variants || ((_a = obj === null || obj === void 0 ? void 0 : obj.system) === null || _a === void 0 ? void 0 : _a.applied_variants) || null; //check for _applied_variants in the reference object only return null if not present , do not check in the parent object;
var newShouldApplyVariant = !!newAppliedVariants;
value[index].$ = getTag(obj, "".concat(obj._content_type_uid, ".").concat(obj.uid, ".").concat(obj.locale || locale), tagsAsObject, locale, { _applied_variants: newAppliedVariants, shouldApplyVariant: newShouldApplyVariant, metaKey: "" });
}
else if (typeof obj === "object") {
/**
* Objects inside Array like modular blocks are handled here
* {
* "array": [{
* "title": "title",
* "$": {"title": {"data-cslp": "content_type_uid.entry_uid.locale.array.0.title"}}
* }]
* }
*/
obj.$ = getTag(obj, "".concat(prefix, ".").concat(key, ".").concat(index), tagsAsObject, locale, { _applied_variants: _applied_variants, shouldApplyVariant: shouldApplyVariant, metaKey: updatedMetakey });
}
});
}
else {
if (value) {
/**
* Objects are handled here
* {
* "object": {
* "title": "title",
* "$": {
* "title": {"data-cslp": "content_type_uid.entry_uid.locale.object.title"}
* }
* },
* }
*/
value.$ = getTag(value, "".concat(prefix, ".").concat(key), tagsAsObject, locale, { _applied_variants: _applied_variants, shouldApplyVariant: shouldApplyVariant, metaKey: updatedMetakey });
}
}
/**
* {
* "object": {
* "title": "title",
* },
* "array": ["hello", "world"]
* "$": {
* "object": {"data-cslp": "content_type_uid.entry_uid.locale.object"},
* "array": {"data-cslp": "content_type_uid.entry_uid.locale.array"}
* }
* }
*/
tags[key] = getTagsValue("".concat(prefix, ".").concat(key), tagsAsObject, { _applied_variants: _applied_variants, shouldApplyVariant: shouldApplyVariant, metaKey: updatedMetakey });
break;
default:
/**
* All primitive values are handled here
* {
* "title": "title",
* "$": {title: {"data-cslp": "content_type_uid.entry_uid.locale.title"}}
* }
*/
tags[key] = getTagsValue("".concat(prefix, ".").concat(key), tagsAsObject, { _applied_variants: _applied_variants, shouldApplyVariant: shouldApplyVariant, metaKey: updatedMetakey });
}
});
return tags;
}
function getTagsValue(dataValue, tagsAsObject, appliedVariants) {
if (appliedVariants.shouldApplyVariant && appliedVariants._applied_variants) {
var isFieldVariantised = appliedVariants._applied_variants[appliedVariants.metaKey];
if (isFieldVariantised) {
var variant = appliedVariants._applied_variants[appliedVariants.metaKey];
// Adding v2 prefix to the cslp tag. New cslp tags are in v2 format. ex: v2:content_type_uid.entry_uid.locale.title
var newDataValueArray = ('v2:' + dataValue).split('.');
newDataValueArray[1] = newDataValueArray[1] + '_' + variant;
dataValue = newDataValueArray.join('.');
}
else {
var parentVariantisedPath = getParentVariantisedPath(appliedVariants);
if (parentVariantisedPath) {
var variant = appliedVariants._applied_variants[parentVariantisedPath];
var newDataValueArray = ('v2:' + dataValue).split('.');
newDataValueArray[1] = newDataValueArray[1] + '_' + variant;
dataValue = newDataValueArray.join('.');
}
}
}
if (tagsAsObject) {
return { "data-cslp": dataValue };
}
else {
return "data-cslp=".concat(dataValue);
}
}
function getParentTagsValue(dataValue, tagsAsObject) {
if (tagsAsObject) {
return { "data-cslp-parent-field": dataValue };
}
else {
return "data-cslp-parent-field=".concat(dataValue);
}
}
function getParentVariantisedPath(appliedVariants) {
var _a;
try {
// Safety fallback
if (!appliedVariants._applied_variants)
return '';
var variantisedFieldPaths = Object.keys(appliedVariants._applied_variants).sort(function (a, b) {
return b.length - a.length;
});
var childPathFragments_1 = appliedVariants.metaKey.split('.');
// Safety fallback
if (childPathFragments_1.length === 0 || variantisedFieldPaths.length === 0)
return '';
var parentVariantisedPath = (_a = variantisedFieldPaths.find(function (path) {
var parentFragments = path.split('.');
if (parentFragments.length > childPathFragments_1.length)
return false;
return parentFragments.every(function (fragment, index) { return childPathFragments_1[index] === fragment; });
})) !== null && _a !== void 0 ? _a : '';
return parentVariantisedPath;
}
catch (e) {
return '';
}
}
//# sourceMappingURL=entry-editable.js.map