You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

79 lines
2.0 KiB

export class ConfigItemList {
constructor(public configItems: ConfigItem[]) {}
static valueOf(items: ConfigItem[]): ConfigItemList {
return new ConfigItemList(items)
}
toArray(): Object[] {
return this.configItems.map(item => item.toObject())
}
}
interface LabelMappingForUI {
from: string,
to: string
}
export interface ParametersForUI {
name: string,
value: string | object[],
type?: string,
items?: string[]
}
export interface Fields {
modelName: string,
modelAttrs: ParametersForUI[],
template: string,
labelMapping: LabelMappingForUI[]
}
export class ConfigItem {
constructor(
public id: number,
public modelName: string,
public modelAttrs: object,
public template: string,
public labelMapping: object
) {}
static valueOf(
{ id, model_name, model_attrs, template, label_mapping }:
{ id: number, model_name: string, model_attrs: object, template: string, label_mapping: object }
): ConfigItem {
return new ConfigItem(id, model_name, model_attrs, template, label_mapping)
}
static parseFromUI(
{ modelName, modelAttrs, template, labelMapping }: Fields): ConfigItem {
const mapping = labelMapping.reduce((a, x) => ({...a, [x.from]: x.to}), {})
const attributes: {[key: string]: any} = modelAttrs.reduce((a, x) => ({...a, [x.name]: x.value}), {})
for (const [key, value] of Object.entries(attributes)) {
if (Array.isArray(value)) {
attributes[key] = value.reduce((a, x) => ({...a, [x.key]: x.value}), {})
}
}
return new ConfigItem(99999, modelName, attributes, template, mapping)
}
toObject(): object {
return {
id: this.id,
modelName: this.modelName,
modelAttrs: this.modelAttrs,
template: this.template,
labelMapping: this.labelMapping
}
}
toAPI(): object {
return {
id: this.id,
model_name: this.modelName,
model_attrs: this.modelAttrs,
template: this.template,
label_mapping: this.labelMapping
}
}
}