UNPKG

@contentstack/utils

Version:
183 lines 10.2 kB
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