@becklyn/contentful-adapter
Version:
[](https://github.com/Becklyn-Studios/contentful-adapter/actions/workflows/ci.yml)
108 lines (107 loc) • 3.48 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.getComponentDataConfig = void 0;
const util_1 = require("../data/util");
const getComponentDataConfig = (data) => {
if (!data) {
return [];
}
const configs = {};
for (const config of data) {
let currentConfig;
if (isComponentDataConfig(config)) {
const component = config.component;
currentConfig = {
key: component.key,
contentType: config.contentType,
data: getDataAndApplyChildConfigs(configs, component.data),
};
}
else {
currentConfig = {
key: config.key,
contentType: config.key,
data: getDataAndApplyChildConfigs(configs, config.data),
};
}
addConfigToConfigs(configs, currentConfig);
}
return Object.values(configs);
};
exports.getComponentDataConfig = getComponentDataConfig;
const addConfigToConfigs = (configs, newConfig) => {
if (!configs[newConfig.key]) {
configs[newConfig.key] = newConfig;
}
};
const getDataAndApplyChildConfigs = (configs, dataConfig) => {
if (!dataConfig) {
return dataConfig;
}
const cleanConfig = {};
for (const field in dataConfig) {
const fieldConfig = dataConfig[field];
if (!(0, util_1.isRelationType)(fieldConfig)) {
cleanConfig[field] = fieldConfig;
continue;
}
getRelationTypeAndApplyChildConfigs(configs, cleanConfig, field, fieldConfig);
}
return cleanConfig;
};
const getRelationTypeAndApplyChildConfigs = (configs, cleanConfig, field, fieldConfig) => {
if ("string" === typeof fieldConfig.data || !fieldConfig.data) {
cleanConfig[field] = {
multiple: fieldConfig.multiple,
data: fieldConfig.data,
};
return;
}
if ((0, util_1.isBaseComponentConfig)(fieldConfig.data)) {
const cleanChildConfig = getDataAndApplyChildConfigs(configs, fieldConfig.data.data);
if (cleanChildConfig) {
addConfigToConfigs(configs, {
key: fieldConfig.data.key,
contentType: fieldConfig.data.key,
data: cleanChildConfig,
});
}
cleanConfig[field] = {
multiple: fieldConfig.multiple,
data: {
key: fieldConfig.data.key,
data: cleanChildConfig,
},
};
return;
}
let cleanArrayConfig = [];
for (const singleConfig of fieldConfig.data) {
if ("string" === typeof singleConfig) {
cleanArrayConfig = [...cleanArrayConfig, singleConfig];
continue;
}
const cleanChildConfig = getDataAndApplyChildConfigs(configs, singleConfig.data);
if (cleanChildConfig) {
addConfigToConfigs(configs, {
key: singleConfig.key,
contentType: singleConfig.key,
data: cleanChildConfig,
});
}
cleanArrayConfig = [
...cleanArrayConfig,
{
key: singleConfig.key,
data: cleanChildConfig,
},
];
}
cleanConfig[field] = {
multiple: fieldConfig.multiple,
data: cleanArrayConfig,
};
};
const isComponentDataConfig = (data) => {
return data.contentType !== undefined;
};