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.
 
 
 
 
 
 

58 lines
1.2 KiB

export interface Schema {
title: string,
type: string,
properties: object
}
export interface ConfigResponse {
name: string,
schema: Schema,
template: string
}
export class ConfigTemplateItem {
constructor(
private schema: Schema,
public template: string
) {}
static valueOf(
{ schema, template }:
{ schema: Schema, template: string }
): ConfigTemplateItem {
return new ConfigTemplateItem(schema, template)
}
get modelName(): string {
return this.schema.title
}
get fields() {
const response = []
for (const [key, value] of Object.entries(this.schema.properties)) {
if ('type' in value && value.type === 'string') {
response.push({name: key, type: 'textField', value: ''})
} else if ('anyOf' in value) {
response.push(
{
name: key,
type: 'selectField',
value: '',
items: value['anyOf'].map(
(item: {'const': string, 'type': string}) => item.const
)
}
)
}
}
return response
}
toObject(): Object {
return {
model_name: this.modelName,
template: this.template,
model_attrs: this.fields
}
}
}