import { Rule, SchematicContext, Tree } from '@angular-devkit/schematics'; import { ModelField, ModelRelation, ClassRelationEnum } from '@vmfvmf/ywtc-lib'; import { camelize, classify, dasherize } from '@angular-devkit/core/src/utils/strings'; import { addEntitiesFormFields, addEnumImports, getFieldDeclaration, getFormFieldsImports, getImport, setImport } from '../update-page/generate.gen'; import { getModelById, getPrjSrd, setModel } from '../../../../router.gen'; import { E2EGenerator } from '../../../../shared/generator'; import { P3, P4 } from '../../../../router.map'; export function gen(relation: ModelRelation): Rule { return async (tree: Tree, _context: SchematicContext) => { setImport(new Set()); if (relation.relation != ClassRelationEnum.OneToMany) { return; } const cModel = getModelById(relation.toModelId); const pModel = getModelById(relation.modelId); setModel(pModel); addEnumImports(cModel); const formFields = addEntitiesFormFields(cModel); cModel.getAllFields().map(getFormFieldsImports); const fieldsStr = cModel.getAllFields().map(f => `${camelize(cModel.name)}FormFields.${f.name}`).join(',\n\t\t'); const cucNo = cModel.ucNo; const cNClasd = classify(cModel.name); const cNDashd = dasherize(cNClasd); const cNUndUp = cNDashd.toUpperCase().replace('-', '_'); const cNCamld = camelize(cNClasd); const ctIndex = pModel.getChildTables().findIndex((ct: ModelRelation) => ct.toModelId === cModel.id); const ctIndexStr = ctIndex >= 0 ? '': `,\n${P4}${ctIndex}`; const fieldsDeclarationStr = cModel.fields.map(getFieldDeclaration).join(',\n'); const enumsDescMapDeclarationsStr = cModel.fields .filter((field: ModelField) => field.angularType == 'ENUM') .map((field: ModelField) => `import { ${camelize(field.enumDefName)}DescMap } from 'src/app/${getPrjSrd().prjNDashd}-frontend/enums/${dasherize(field.enumDefName)}';`); const formfieldsNames = cModel.fields.map((field: ModelField) => `${P3}${getPrjSrd().mdlNCamld}FormFields.${field.name}`).join(',\n'); const importStr = Array.from(getImport()).join('\n'); return new E2EGenerator(__filename).gen({ ...getPrjSrd(), fieldsStr, formFields, cucNo, enumsDescMapDeclarationsStr, fieldsDeclarationStr, importStr, formfieldsNames, cNClasd, cNDashd, cNUndUp, cNCamld, ctIndexStr }); }; } export function importEnums(fields: Array) { return fields .filter(f => f.angularType == 'ENUM') .map(f => `import { ${f.enumDefName} } from '../../../src/app/demo-frontend/enums/${dasherize(f.enumDefName)}';`) }