import { Fields, ParametersForUI } from '~/domain/models/autoLabeling/config' 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(): ParametersForUI[] { const response: ParametersForUI[] = [] 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) }) } else if ('type' in value && value.type === 'object') { response.push({ name: key, type: 'objectField', value: [] }) } } return response } toObject(): Fields { return { modelName: this.modelName, template: this.template, modelAttrs: this.fields, labelMapping: [], taskType: '' } } }