UNPKG

@stackbit/cms-contentful

Version:

Stackbit Contentful CMS Interface

71 lines 2.13 kB
"use strict"; const _ = require('lodash'); module.exports = { localizeFieldData: localizeFieldData }; function localizeFieldData(fieldData, locale, defaultLocalesBySpaceId) { return _.mapValues(fieldData, (object) => { const selectedLocale = locale || _.get(defaultLocalesBySpaceId, object.srcProjectId); return localizeObject(object, selectedLocale); }); } function localizeObject(objectField, locale) { const { fields = {}, ...rest } = objectField; if (!locale) { return { ...rest, fields: {} }; } const mappedFields = _.reduce(fields, (accum, field, fieldName) => { const localizedField = localizeObjectField(field, locale); if (localizedField) { accum[fieldName] = localizedField; } return accum; }, {}); return { ...rest, fields: mappedFields }; } function localizeObjectField(field, locale) { if (_.has(field, 'locales')) { const { locales, ...rest } = field; let localizedFieldData; if (_.has(locales, locale)) { localizedFieldData = _.get(locales, locale); } else { localizedFieldData = _.assign({}, _.get(locales, '_unset'), { locale }); } const localizedField = _.assign(rest, localizedFieldData); return localizeChildren(localizedField, locale); } else if (_.has(field, 'locale') && field.locale === locale) { return localizeChildren(field, locale); } else { return null; } } function localizeChildren(field, locale) { if (field.type === 'object') { return localizeObject(field, locale); } else if (field.type === 'list') { return localizeListField(field, locale); } else { return field; } } function localizeListField(listField, locale) { const { items = [], ...rest } = listField; const localizedItems = _.map(items, (item) => localizeChildren(item, locale)); return { ...rest, items: localizedItems }; } //# sourceMappingURL=localize-field-data.js.map