|
|
@ -0,0 +1,58 @@ |
|
|
|
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 |
|
|
|
} |
|
|
|
} |
|
|
|
} |