import { Rule } from '@angular-devkit/schematics'; import { camelize, dasherize } from '@angular-devkit/core/src/utils/strings'; import { getFieldsForFormable } from '../app-formable/generate.gen'; import { AngularFieldType, ModelField, Model, formFieldsAll } from '@vmfvmf/ywtc-lib'; import { FrontEndGenerator } from '../../../shared/generator'; import { getPrjSrd } from '../../../router.gen'; import { FormBehavior } from '@vmfvmf/ywtc-lib/dist/model'; let kraftosImps: Set; let imports: Set; export function gen(model: Model): Rule { imports = new Set(); kraftosImps = new Set(); kraftosImps.add('AbstractField'); kraftosImps.add('Filterable'); const filters = new Model(model).getFilters(); model.fields?.filter(f => f.formField?.filterable).forEach(field => kraftosImps.add(formFieldsAll[field.formField!.type!].type + 'Field')); model.relations?.filter(rel => rel.formBehavior === FormBehavior.FORM_FIELD && rel.formField?.filterable) .forEach(rel => kraftosImps.add(formFieldsAll[rel.formField!.type!].type + 'Field')); const importStr = 'import {\n' + Array.from(kraftosImps).sort().map(f => '\t'+f).join(',\n') + "} from '@vmfvmf/kraftos-lib';"; importEnumsDescMap(model.fields?.filter(f => f.formField?.filterable) ?? [], imports); const enumsImportsStr = Array.from(imports).sort().join('\n'); return new FrontEndGenerator(__filename).gen({ ...model, ...getPrjSrd(),importEnumsDescMap, getFieldsForFormable, filters, importStr, enumsImportsStr }); } export function importEnumsDescMap(fields: Array, imports: Set) { return fields .filter(field => field.angularType === AngularFieldType.ENUM) .map(field => field.enumDefName) .forEach(eName => imports.add(`import { ${camelize(eName!)}DescMap } from '../enums/${dasherize(eName!)}';`)); }