@stackbit/cms-contentful
Version:
Stackbit Contentful CMS Interface
71 lines • 2.13 kB
JavaScript
;
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