@tsed/formio
Version:
Formio package for Ts.ED framework
57 lines (56 loc) • 1.8 kB
JavaScript
export class FormioMapper {
constructor(ctxData) {
this.ctxData = ctxData;
}
find(key) {
const store = Object.values(this.ctxData).find((store) => store.get(key));
return store?.get(key);
}
findId(data) {
const key = String(data).startsWith("$machineName:") ? String(data) : `$machineName:${String(data)}`;
const item = this.find(key);
return item ? item._id : undefined;
}
findMachineName(data) {
const key = String(data);
const item = this.find(key);
return item ? `$machineName:${item.name || item.machineName}` : undefined;
}
mapToExport(data) {
return this.mapData(data, this.findMachineName.bind(this));
}
mapToImport(data) {
return this.mapData(data, this.findId.bind(this));
}
mapData(data, resolver) {
if (!data) {
return data;
}
if (Array.isArray(data)) {
return data.map((item) => {
return this.mapData(item, resolver);
});
}
const key = resolver(data, this.ctxData);
if (key) {
return key;
}
if (typeof data === "object" && !("_bsontype" in data) && !(data instanceof Date)) {
const isForm = data.path && data.type;
const mapped = Object.entries(data).reduce((obj, [key, value]) => {
return {
...obj,
[key]: this.mapData(value, resolver)
};
}, {});
return isForm
? {
...mapped,
name: data.name,
machineName: data.machineName || data.name
}
: mapped;
}
return data;
}
}