@memberjunction/codegen-lib 1.7.0 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (101) hide show
  1. package/dist/Angular/angular-codegen.d.ts +63 -0
  2. package/dist/Angular/angular-codegen.d.ts.map +1 -0
  3. package/dist/{angular_client_codegen.js → Angular/angular-codegen.js} +148 -44
  4. package/dist/Angular/angular-codegen.js.map +1 -0
  5. package/dist/Angular/join-grid-related-entity-component.d.ts +24 -0
  6. package/dist/Angular/join-grid-related-entity-component.d.ts.map +1 -0
  7. package/dist/Angular/join-grid-related-entity-component.js +86 -0
  8. package/dist/Angular/join-grid-related-entity-component.js.map +1 -0
  9. package/dist/Angular/related-entity-components.d.ts +111 -0
  10. package/dist/Angular/related-entity-components.d.ts.map +1 -0
  11. package/dist/Angular/related-entity-components.js +82 -0
  12. package/dist/Angular/related-entity-components.js.map +1 -0
  13. package/dist/Angular/user-view-grid-related-entity-component.d.ts +11 -0
  14. package/dist/Angular/user-view-grid-related-entity-component.d.ts.map +1 -0
  15. package/dist/Angular/user-view-grid-related-entity-component.js +51 -0
  16. package/dist/Angular/user-view-grid-related-entity-component.js.map +1 -0
  17. package/dist/Config/config.d.ts.map +1 -0
  18. package/dist/{config.js → Config/config.js} +1 -1
  19. package/dist/Config/config.js.map +1 -0
  20. package/dist/{db.d.ts → Config/db-connection.d.ts} +1 -1
  21. package/dist/Config/db-connection.d.ts.map +1 -0
  22. package/dist/{db.js → Config/db-connection.js} +1 -1
  23. package/dist/Config/db-connection.js.map +1 -0
  24. package/dist/Database/dbSchema.d.ts.map +1 -0
  25. package/dist/{dbSchema.js → Database/dbSchema.js} +2 -2
  26. package/dist/Database/dbSchema.js.map +1 -0
  27. package/dist/{manageMetadata.d.ts → Database/manage-metadata.d.ts} +36 -3
  28. package/dist/Database/manage-metadata.d.ts.map +1 -0
  29. package/dist/{manageMetadata.js → Database/manage-metadata.js} +166 -16
  30. package/dist/Database/manage-metadata.js.map +1 -0
  31. package/dist/Database/sql.d.ts.map +1 -0
  32. package/dist/{sql.js → Database/sql.js} +5 -5
  33. package/dist/Database/sql.js.map +1 -0
  34. package/dist/Database/sql_codegen.d.ts.map +1 -0
  35. package/dist/{sql_codegen.js → Database/sql_codegen.js} +20 -30
  36. package/dist/Database/sql_codegen.js.map +1 -0
  37. package/dist/{advanced_generation.d.ts → Misc/advanced_generation.d.ts} +1 -1
  38. package/dist/Misc/advanced_generation.d.ts.map +1 -0
  39. package/dist/{advanced_generation.js → Misc/advanced_generation.js} +1 -1
  40. package/dist/Misc/advanced_generation.js.map +1 -0
  41. package/dist/Misc/createNewUser.d.ts +12 -0
  42. package/dist/Misc/createNewUser.d.ts.map +1 -0
  43. package/dist/Misc/createNewUser.js +113 -0
  44. package/dist/Misc/createNewUser.js.map +1 -0
  45. package/dist/Misc/logging.d.ts.map +1 -0
  46. package/dist/{logging.js → Misc/logging.js} +1 -1
  47. package/dist/Misc/logging.js.map +1 -0
  48. package/dist/{runCommand.d.ts → Misc/runCommand.d.ts} +1 -1
  49. package/dist/Misc/runCommand.d.ts.map +1 -0
  50. package/dist/Misc/runCommand.js.map +1 -0
  51. package/dist/Misc/util.d.ts.map +1 -0
  52. package/dist/Misc/util.js.map +1 -0
  53. package/dist/action_subclasses_codegen.js +1 -1
  54. package/dist/action_subclasses_codegen.js.map +1 -1
  55. package/dist/createNewUser.d.ts +1 -1
  56. package/dist/createNewUser.d.ts.map +1 -1
  57. package/dist/createNewUser.js +2 -2
  58. package/dist/createNewUser.js.map +1 -1
  59. package/dist/entity_subclasses_codegen.js +1 -1
  60. package/dist/entity_subclasses_codegen.js.map +1 -1
  61. package/dist/graphql_server_codegen.d.ts.map +1 -1
  62. package/dist/graphql_server_codegen.js +10 -6
  63. package/dist/graphql_server_codegen.js.map +1 -1
  64. package/dist/index.d.ts +14 -11
  65. package/dist/index.d.ts.map +1 -1
  66. package/dist/index.js +14 -11
  67. package/dist/index.js.map +1 -1
  68. package/dist/runCodeGen.js +21 -21
  69. package/dist/runCodeGen.js.map +1 -1
  70. package/package.json +7 -7
  71. package/dist/advanced_generation.d.ts.map +0 -1
  72. package/dist/advanced_generation.js.map +0 -1
  73. package/dist/angular_client_codegen.d.ts +0 -43
  74. package/dist/angular_client_codegen.d.ts.map +0 -1
  75. package/dist/angular_client_codegen.js.map +0 -1
  76. package/dist/config.d.ts.map +0 -1
  77. package/dist/config.js.map +0 -1
  78. package/dist/db.d.ts.map +0 -1
  79. package/dist/db.js.map +0 -1
  80. package/dist/dbSchema.d.ts.map +0 -1
  81. package/dist/dbSchema.js.map +0 -1
  82. package/dist/logging.d.ts.map +0 -1
  83. package/dist/logging.js.map +0 -1
  84. package/dist/manageMetadata.d.ts.map +0 -1
  85. package/dist/manageMetadata.js.map +0 -1
  86. package/dist/runCommand.d.ts.map +0 -1
  87. package/dist/runCommand.js.map +0 -1
  88. package/dist/sql.d.ts.map +0 -1
  89. package/dist/sql.js.map +0 -1
  90. package/dist/sql_codegen.d.ts.map +0 -1
  91. package/dist/sql_codegen.js.map +0 -1
  92. package/dist/util.d.ts.map +0 -1
  93. package/dist/util.js.map +0 -1
  94. /package/dist/{config.d.ts → Config/config.d.ts} +0 -0
  95. /package/dist/{dbSchema.d.ts → Database/dbSchema.d.ts} +0 -0
  96. /package/dist/{sql.d.ts → Database/sql.d.ts} +0 -0
  97. /package/dist/{sql_codegen.d.ts → Database/sql_codegen.d.ts} +0 -0
  98. /package/dist/{logging.d.ts → Misc/logging.d.ts} +0 -0
  99. /package/dist/{runCommand.js → Misc/runCommand.js} +0 -0
  100. /package/dist/{util.d.ts → Misc/util.d.ts} +0 -0
  101. /package/dist/{util.js → Misc/util.js} +0 -0
@@ -0,0 +1,63 @@
1
+ import { EntityInfo, EntityFieldInfo, GeneratedFormSectionType, UserInfo } from '@memberjunction/core';
2
+ import { GenerationResult } from './related-entity-components';
3
+ export declare class AngularFormSectionInfo {
4
+ Type: GeneratedFormSectionType;
5
+ Name: string;
6
+ TabCode: string;
7
+ ClassName?: string;
8
+ FileName?: string;
9
+ ComponentCode?: string;
10
+ Fields?: EntityFieldInfo[];
11
+ FileNameWithoutExtension?: string;
12
+ EntityClassName?: string;
13
+ IsRelatedEntity?: boolean;
14
+ RelatedEntityDisplayLocation?: 'Before Field Tabs' | 'After Field Tabs';
15
+ GeneratedOutput?: GenerationResult;
16
+ }
17
+ /**
18
+ * Base class for generating Angular client code, you can sub-class this class to create your own Angular client code generator logic
19
+ */
20
+ export declare class AngularClientGeneratorBase {
21
+ generateAngularCode(entities: EntityInfo[], directory: string, modulePrefix: string, contextUser: UserInfo): Promise<boolean>;
22
+ protected generateAngularModule(componentImports: string[], componentNames: {
23
+ componentName: string;
24
+ relatedEntityItemsRequired: {
25
+ itemClassName: string;
26
+ moduleClassName: string;
27
+ }[];
28
+ }[], relatedEntityModuleImports: {
29
+ library: string;
30
+ modules: string[];
31
+ }[], sections: AngularFormSectionInfo[], modulePrefix: string, maxComponentsPerModule?: number): string;
32
+ protected generateAngularModuleCode(componentNames: {
33
+ componentName: string;
34
+ relatedEntityItemsRequired: {
35
+ itemClassName: string;
36
+ moduleClassName: string;
37
+ }[];
38
+ }[], sections: AngularFormSectionInfo[], maxComponentsPerModule: number, modulePrefix: string): string;
39
+ protected subModule_BaseName: string;
40
+ /**
41
+ * Get the base name for the sub-modules, override this method to change the base name. Defaults to 'GeneratedForms_SubModule_'
42
+ */
43
+ get SubModuleBaseName(): string;
44
+ protected generateSubModuleEnding(moduleNumber: number, additionalModulesToImport: string[]): string;
45
+ protected generateSingleEntityTypeScriptForAngular(entity: EntityInfo, additionalSections: AngularFormSectionInfo[], relatedEntitySections: AngularFormSectionInfo[]): string;
46
+ protected entityHasTopArea(entity: EntityInfo): boolean;
47
+ protected generateTopAreaHTMLForAngular(entity: EntityInfo): string;
48
+ protected AddSectionIfNeeded(entity: EntityInfo, sections: AngularFormSectionInfo[], type: GeneratedFormSectionType, name: string): void;
49
+ protected generateAngularAdditionalSections(entity: EntityInfo, startIndex: number): AngularFormSectionInfo[];
50
+ protected generateSectionHTMLForAngular(entity: EntityInfo, section: AngularFormSectionInfo): string;
51
+ protected generateRelatedEntityTabs(entity: EntityInfo, startIndex: number, contextUser: UserInfo): Promise<AngularFormSectionInfo[]>;
52
+ protected stripWhiteSpace(s: string): string;
53
+ protected generateSingleEntityHTMLForAngular(entity: EntityInfo, contextUser: UserInfo): Promise<{
54
+ htmlCode: string;
55
+ additionalSections: AngularFormSectionInfo[];
56
+ relatedEntitySections: AngularFormSectionInfo[];
57
+ }>;
58
+ protected generateSingleEntityHTMLWithSplitterForAngular(topArea: any, additionalSections: AngularFormSectionInfo[], relatedEntitySections: AngularFormSectionInfo[]): string;
59
+ protected innerTopAreaHTML(topArea: string): string;
60
+ protected innerTabStripHTML(additionalSections: AngularFormSectionInfo[], relatedEntitySections: AngularFormSectionInfo[]): string;
61
+ protected generateSingleEntityHTMLWithOUTSplitterForAngular(topArea: any, additionalSections: AngularFormSectionInfo[], relatedEntitySections: AngularFormSectionInfo[]): string;
62
+ }
63
+ //# sourceMappingURL=angular-codegen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-codegen.d.ts","sourceRoot":"","sources":["../../src/Angular/angular-codegen.ts"],"names":[],"mappings":"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"}
@@ -11,12 +11,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
12
  exports.AngularClientGeneratorBase = exports.AngularFormSectionInfo = void 0;
13
13
  const core_1 = require("@memberjunction/core");
14
- const logging_1 = require("./logging");
14
+ const logging_1 = require("../Misc/logging");
15
15
  const fs_1 = __importDefault(require("fs"));
16
16
  const path_1 = __importDefault(require("path"));
17
- const config_1 = require("./config");
17
+ const config_1 = require("../Config/config");
18
18
  const global_1 = require("@memberjunction/global");
19
+ const related_entity_components_1 = require("./related-entity-components");
19
20
  class AngularFormSectionInfo {
21
+ constructor() {
22
+ this.IsRelatedEntity = false;
23
+ this.RelatedEntityDisplayLocation = 'After Field Tabs';
24
+ }
20
25
  }
21
26
  exports.AngularFormSectionInfo = AngularFormSectionInfo;
22
27
  /**
@@ -26,11 +31,12 @@ let AngularClientGeneratorBase = class AngularClientGeneratorBase {
26
31
  constructor() {
27
32
  this.subModule_BaseName = 'GeneratedForms_SubModule_';
28
33
  }
29
- generateAngularCode(entities, directory, modulePrefix) {
34
+ async generateAngularCode(entities, directory, modulePrefix, contextUser) {
30
35
  try {
31
36
  const entityPath = path_1.default.join(directory, 'Entities');
32
37
  //const classMapEntries: string[] = [];
33
38
  const componentImports = [];
39
+ const relatedEntityModuleImports = [];
34
40
  const componentNames = [];
35
41
  const sections = [];
36
42
  if (!fs_1.default.existsSync(entityPath))
@@ -41,29 +47,50 @@ let AngularClientGeneratorBase = class AngularClientGeneratorBase {
41
47
  const thisEntityPath = path_1.default.join(entityPath, entity.ClassName);
42
48
  if (!fs_1.default.existsSync(thisEntityPath))
43
49
  fs_1.default.mkdirSync(thisEntityPath, { recursive: true }); // create the directory if it doesn't exist
44
- const { htmlCode, sections: entitySections } = this.generateSingleEntityHTMLForAngular(entity);
45
- const tsCode = this.generateSingleEntityTypeScriptForAngular(entity, entitySections);
50
+ const { htmlCode, additionalSections, relatedEntitySections } = await this.generateSingleEntityHTMLForAngular(entity, contextUser);
51
+ const tsCode = this.generateSingleEntityTypeScriptForAngular(entity, additionalSections, relatedEntitySections);
46
52
  fs_1.default.writeFileSync(path_1.default.join(thisEntityPath, `${entity.ClassName.toLowerCase()}.form.component.ts`), tsCode);
47
53
  fs_1.default.writeFileSync(path_1.default.join(thisEntityPath, `${entity.ClassName.toLowerCase()}.form.component.html`), htmlCode);
48
- if (entitySections.length > 0) {
54
+ if (additionalSections.length > 0) {
49
55
  const sectionPath = path_1.default.join(thisEntityPath, 'sections');
50
56
  if (!fs_1.default.existsSync(sectionPath))
51
57
  fs_1.default.mkdirSync(sectionPath, { recursive: true }); // create the directory if it doesn't exist
52
- for (let j = 0; j < entitySections.length; ++j) {
53
- fs_1.default.writeFileSync(path_1.default.join(sectionPath, `${entitySections[j].FileName}`), entitySections[j].ComponentCode);
54
- sections.push(entitySections[j]); // add the entity's secitons one by one to the master/global list of sections
58
+ for (let j = 0; j < additionalSections.length; ++j) {
59
+ fs_1.default.writeFileSync(path_1.default.join(sectionPath, `${additionalSections[j].FileName}`), additionalSections[j].ComponentCode);
60
+ sections.push(additionalSections[j]); // add the entity's secitons one by one to the master/global list of sections
55
61
  }
56
62
  }
57
63
  const componentName = `${entity.ClassName}FormComponent`;
58
64
  componentImports.push(`import { ${componentName}, Load${componentName} } from "./Entities/${entity.ClassName}/${entity.ClassName.toLowerCase()}.form.component";`);
59
- componentNames.push(componentName);
65
+ const currentComponentDistinctRelatedEntityClassNames = [];
66
+ relatedEntitySections.forEach(s => s.GeneratedOutput.Component.ImportItems.forEach(i => {
67
+ if (!currentComponentDistinctRelatedEntityClassNames.find(ii => ii.itemClassName === i.ClassName))
68
+ currentComponentDistinctRelatedEntityClassNames.push({ itemClassName: i.ClassName, moduleClassName: i.ModuleName });
69
+ }));
70
+ componentNames.push({
71
+ componentName: componentName,
72
+ relatedEntityItemsRequired: currentComponentDistinctRelatedEntityClassNames,
73
+ });
74
+ // go through all related entities used by this component and add them to the relatedEntityModuleImports array, but distinct for the library and the module names within the library
75
+ relatedEntitySections.forEach(s => {
76
+ let match = relatedEntityModuleImports.find(m => m.library === s.GeneratedOutput.Component.ImportPath);
77
+ if (!match) {
78
+ match = { library: s.GeneratedOutput.Component.ImportPath, modules: [] };
79
+ relatedEntityModuleImports.push(match);
80
+ }
81
+ s.GeneratedOutput.Component.ImportItems.forEach(i => {
82
+ if (!match.modules.includes(i.ModuleName))
83
+ match.modules.push(i.ModuleName);
84
+ });
85
+ });
86
+ // now the imports are good
60
87
  }
61
88
  else {
62
89
  (0, logging_1.logStatus)(` Entity ${entity.Name} does not have a primary key or is not included in the API, skipping code generation for this entity`);
63
90
  }
64
91
  }
65
92
  const maxComponentsPerModule = (0, config_1.outputOptionValue)('Angular', 'maxComponentsPerModule', 25);
66
- const moduleCode = this.generateAngularModule(componentImports, componentNames, sections, modulePrefix, maxComponentsPerModule);
93
+ const moduleCode = this.generateAngularModule(componentImports, componentNames, relatedEntityModuleImports, sections, modulePrefix, maxComponentsPerModule);
67
94
  fs_1.default.writeFileSync(path_1.default.join(directory, 'generated-forms.module.ts'), moduleCode);
68
95
  return true;
69
96
  }
@@ -72,7 +99,7 @@ let AngularClientGeneratorBase = class AngularClientGeneratorBase {
72
99
  return false;
73
100
  }
74
101
  }
75
- generateAngularModule(componentImports, componentNames, sections, modulePrefix, maxComponentsPerModule = 25) {
102
+ generateAngularModule(componentImports, componentNames, relatedEntityModuleImports, sections, modulePrefix, maxComponentsPerModule = 25) {
76
103
  // this function will generate the overall code for the module file.
77
104
  // there is one master angular module called GeneratedFormsModule, and this module will include all of the sub-modules
78
105
  // the reason we do this is because of limits in the size of the types you can create in TypeScript and if we have a very large
@@ -110,7 +137,9 @@ import { DropDownListModule } from '@progress/kendo-angular-dropdowns';
110
137
  // Import Generated Components
111
138
  ${componentImports.join('\n')}
112
139
  ${sections.map(s => `import { ${s.ClassName}, Load${s.ClassName} } from "./Entities/${s.EntityClassName}/sections/${s.FileNameWithoutExtension}"`).join('\n')}
113
-
140
+ ${relatedEntityModuleImports.filter(remi => remi.library.trim().toLowerCase() !== '@memberjunction/ng-user-view-grid')
141
+ .map(remi => `import { ${remi.modules.map(m => m).join(', ')} } from "${remi.library}"`)
142
+ .join('\n')}
114
143
  ${moduleCode}
115
144
 
116
145
  export function Load${modulePrefix}GeneratedForms() {
@@ -119,7 +148,7 @@ export function Load${modulePrefix}GeneratedForms() {
119
148
  // code do NOTHING - the point is to prevent the code from being eliminated during tree shaking
120
149
  // since it is dynamically instantiated on demand, and the Angular compiler has no way to know that,
121
150
  // in production builds tree shaking will eliminate the code unless we do this
122
- ${componentNames.map(c => `Load${c}();`).join('\n ')}
151
+ ${componentNames.map(c => `Load${c.componentName}();`).join('\n ')}
123
152
  ${sections.map(s => `Load${s.ClassName}();`).join('\n ')}
124
153
  }
125
154
  `;
@@ -128,7 +157,8 @@ export function Load${modulePrefix}GeneratedForms() {
128
157
  // this function breaks up the componentNames and sections up, we only want to have a max of maxComponentsPerModule components per module (of components and/or sections, doesn't matter)
129
158
  // so, we break up the list of components into sub-modules, and then generate the code for each sub-module
130
159
  // iterate through the componentNames first, then after we've exhausted those, then iterate through the sections
131
- const combinedArray = componentNames.concat(sections.map(s => s.ClassName));
160
+ const simpleComponentNames = componentNames.map(c => c.componentName);
161
+ const combinedArray = simpleComponentNames.concat(sections.map(s => s.ClassName));
132
162
  const subModules = [];
133
163
  let currentComponentCount = 0;
134
164
  const subModuleStarter = `
@@ -137,14 +167,23 @@ declarations: [
137
167
  `;
138
168
  let currentSubModuleCode = subModuleStarter;
139
169
  // loop through the combined array which is the combination of the componentNames and the sections
170
+ let currentSubModuleAdditionalModulesToImport = [];
140
171
  for (let i = 0; i < combinedArray.length; ++i) {
141
172
  currentSubModuleCode += (currentComponentCount === 0 ? '' : ',\n') + ' ' + combinedArray[i]; // prepend a comma if this isn't the first component in the module
142
- if ((currentComponentCount === maxComponentsPerModule - 1) ||
143
- (i === combinedArray.length - 1)) {
173
+ // lookup the componentName and see if we have any relatedEntityItemsRequired, if so, add them to the currentSubModuleAdditionalModulesToImport array
174
+ const relatedEntityItemsRequired = componentNames.find(c => c.componentName === combinedArray[i])?.relatedEntityItemsRequired;
175
+ if (relatedEntityItemsRequired && relatedEntityItemsRequired.length > 0) {
176
+ relatedEntityItemsRequired.forEach(r => {
177
+ if (!currentSubModuleAdditionalModulesToImport.includes(r.moduleClassName))
178
+ currentSubModuleAdditionalModulesToImport.push(r.moduleClassName);
179
+ });
180
+ }
181
+ if ((currentComponentCount === maxComponentsPerModule - 1) || (i === combinedArray.length - 1)) {
144
182
  // we have reached the max number of components for this module, so generate the module code and reset the counters
145
- currentSubModuleCode += this.generateSubModuleEnding(subModules.length);
183
+ currentSubModuleCode += this.generateSubModuleEnding(subModules.length, currentSubModuleAdditionalModulesToImport);
146
184
  subModules.push(currentSubModuleCode);
147
- currentSubModuleCode = subModuleStarter;
185
+ currentSubModuleCode = subModuleStarter; // reset
186
+ currentSubModuleAdditionalModulesToImport = []; // reset
148
187
  currentComponentCount = 0;
149
188
  }
150
189
  else
@@ -171,7 +210,7 @@ export class ${modulePrefix}GeneratedFormsModule { }`;
171
210
  get SubModuleBaseName() {
172
211
  return this.subModule_BaseName;
173
212
  }
174
- generateSubModuleEnding(moduleNumber) {
213
+ generateSubModuleEnding(moduleNumber, additionalModulesToImport) {
175
214
  return `],
176
215
  imports: [
177
216
  CommonModule,
@@ -187,7 +226,7 @@ imports: [
187
226
  MJTabStripModule,
188
227
  ContainerDirectivesModule,
189
228
  DropDownListModule,
190
- ComboBoxModule
229
+ ComboBoxModule${additionalModulesToImport.length > 0 ? ',\n ' + additionalModulesToImport.join(',\n ') : ''}
191
230
  ],
192
231
  exports: [
193
232
  ]
@@ -195,14 +234,44 @@ exports: [
195
234
  export class ${this.SubModuleBaseName}${moduleNumber} { }
196
235
  `;
197
236
  }
198
- generateSingleEntityTypeScriptForAngular(entity, sections) {
237
+ generateSingleEntityTypeScriptForAngular(entity, additionalSections, relatedEntitySections) {
199
238
  const entityObjectClass = entity.ClassName;
200
- const sectionImports = sections.length > 0 ? sections.map(s => `import { Load${s.ClassName} } from "./sections/${s.FileNameWithoutExtension}"`).join('\n') : '';
239
+ const sectionImports = additionalSections.length > 0 ? additionalSections.map(s => `import { Load${s.ClassName} } from "./sections/${s.FileNameWithoutExtension}"`).join('\n') : '';
240
+ // next, build a list of distinct imports at the library level and for components within the library
241
+ const libs = relatedEntitySections.length > 0 ? relatedEntitySections.filter(s => s.GeneratedOutput && s.GeneratedOutput.Component && s.GeneratedOutput.Component.ImportPath)
242
+ .map(s => {
243
+ return {
244
+ lib: s.GeneratedOutput.Component.ImportPath,
245
+ items: []
246
+ };
247
+ }) : [];
248
+ const distinctLibs = [];
249
+ libs.forEach(l => {
250
+ if (!distinctLibs.find(ll => ll.lib === l.lib))
251
+ distinctLibs.push(l);
252
+ });
253
+ // now we have a list of distinct libraries, next we go through all the ITEMS and add them to the appropriate library but make sure to keep those items distinct too
254
+ relatedEntitySections.filter(s => s.GeneratedOutput && s.GeneratedOutput.Component && s.GeneratedOutput.Component.ImportItems)
255
+ .forEach(s => {
256
+ const lib = distinctLibs.find(l => l.lib === s.GeneratedOutput.Component.ImportPath);
257
+ if (lib) {
258
+ s.GeneratedOutput.Component.ImportItems.forEach(i => {
259
+ if (!lib.items.includes(i.ClassName))
260
+ lib.items.push(i.ClassName);
261
+ });
262
+ }
263
+ });
264
+ // nowe our libs array is good to go, we can generate the import statements for the libraries and the items within the libraries
265
+ const generationImports = distinctLibs.map(l => `import { ${l.items.join(", ")} } from "${l.lib}"`).join('\n');
266
+ const generationInjectedCode = relatedEntitySections.length > 0 ?
267
+ relatedEntitySections.filter(s => s.GeneratedOutput && s.GeneratedOutput.CodeOutput?.length > 0)
268
+ .map(s => s.GeneratedOutput.CodeOutput.split("\n").map(l => ` ${l}`).join("\n")).join('\n') : '';
201
269
  return `import { Component } from '@angular/core';
202
270
  import { ${entityObjectClass}Entity } from '${entity.SchemaName === config_1.mjCoreSchema ? '@memberjunction/core-entities' : 'mj_generatedentities'}';
203
271
  import { RegisterClass } from '@memberjunction/global';
204
272
  import { BaseFormComponent } from '@memberjunction/ng-base-forms';
205
- ${sectionImports}
273
+ ${sectionImports}${generationImports.length > 0 ? '\n' + generationImports : ''}
274
+
206
275
  @RegisterClass(BaseFormComponent, '${entity.Name}') // Tell MemberJunction about this class
207
276
  @Component({
208
277
  selector: 'gen-${entity.ClassName.toLowerCase()}-form',
@@ -210,11 +279,11 @@ ${sectionImports}
210
279
  styleUrls: ['../../../../shared/form-styles.css']
211
280
  })
212
281
  export class ${entity.ClassName}FormComponent extends BaseFormComponent {
213
- public record!: ${entityObjectClass}Entity;
282
+ public record!: ${entityObjectClass}Entity;${generationInjectedCode.length > 0 ? '\n' + generationInjectedCode : ''}
214
283
  }
215
284
 
216
285
  export function Load${entity.ClassName}FormComponent() {
217
- ${sections.map(s => `Load${s.ClassName}();`).join('\n ')}
286
+ ${additionalSections.map(s => `Load${s.ClassName}();`).join('\n ')}
218
287
  }
219
288
  `;
220
289
  }
@@ -397,25 +466,52 @@ export function Load${entity.ClassName}${this.stripWhiteSpace(section.Name)}Comp
397
466
  }
398
467
  return html;
399
468
  }
400
- generateRelatedEntityTabs(entity, startIndex) {
469
+ async generateRelatedEntityTabs(entity, startIndex, contextUser) {
470
+ const md = new core_1.Metadata();
401
471
  const tabs = [];
472
+ const sortedRelatedEntities = entity.RelatedEntities.filter(re => re.DisplayInForm).sort((a, b) => a.Sequence - b.Sequence); // only show related entities that are marked to display in the form and sort by sequence
402
473
  let index = startIndex;
403
- for (const relatedEntity of entity.RelatedEntities) {
474
+ for (const relatedEntity of sortedRelatedEntities) {
404
475
  const tabName = relatedEntity.DisplayName ? relatedEntity.DisplayName : relatedEntity.RelatedEntity;
405
- tabs.push(`${index > 0 ? '\n' : ''} <mj-tab Name="${tabName}"
476
+ let icon = '';
477
+ switch (relatedEntity.DisplayIconType) {
478
+ case 'Custom':
479
+ if (relatedEntity.DisplayIcon && relatedEntity.DisplayIcon.length > 0)
480
+ icon = `<span class="${relatedEntity.DisplayIcon} tab-header-icon"></span>`;
481
+ break;
482
+ case 'Related Entity Icon':
483
+ const re = md.Entities.find(e => e.ID === relatedEntity.RelatedEntityID);
484
+ if (re && re.Icon && re.Icon.length > 0)
485
+ icon = `<span class="${re.Icon} tab-header-icon"></span>`;
486
+ break;
487
+ default:
488
+ // none
489
+ break;
490
+ }
491
+ const component = await related_entity_components_1.RelatedEntityDisplayComponentGeneratorBase.GetComponent(relatedEntity, contextUser);
492
+ const generateResults = await component.Generate({
493
+ Entity: entity,
494
+ RelationshipInfo: relatedEntity,
495
+ TabName: tabName
496
+ });
497
+ // now for each newline add a series of tabs to map to the indentation we need for pretty formatting
498
+ const componentCodeWithTabs = generateResults.TemplateOutput.split('\n').map(l => ` ${l}`).join('\n');
499
+ const tabCode = `${index > 0 ? '\n' : ''} <mj-tab Name="${tabName}"
406
500
  [Visible]="record.IsSaved"
407
501
  [Props]="{EntityRelationshipID: ${relatedEntity.ID}}">
408
- ${tabName}
502
+ ${icon}${tabName}
409
503
  </mj-tab>
410
504
  <mj-tab-body>
411
- <mj-user-view-grid
412
- [Params]="BuildRelationshipViewParamsByEntityName('${relatedEntity.RelatedEntity}')"
413
- [NewRecordValues]="NewRecordValues('${relatedEntity.RelatedEntity}')"
414
- [AllowLoad]="IsCurrentTab('${tabName}')"
415
- [EditMode]="GridEditMode()"
416
- [BottomMargin]="GridBottomMargin">
417
- </mj-user-view-grid>
418
- </mj-tab-body>`);
505
+ ${componentCodeWithTabs}
506
+ </mj-tab-body>`;
507
+ tabs.push({
508
+ Type: core_1.GeneratedFormSectionType.Category,
509
+ IsRelatedEntity: true,
510
+ RelatedEntityDisplayLocation: relatedEntity.DisplayLocation,
511
+ Name: tabName,
512
+ TabCode: tabCode,
513
+ GeneratedOutput: generateResults,
514
+ });
419
515
  index++;
420
516
  }
421
517
  return tabs;
@@ -423,15 +519,15 @@ export function Load${entity.ClassName}${this.stripWhiteSpace(section.Name)}Comp
423
519
  stripWhiteSpace(s) {
424
520
  return s.replace(/\s/g, '');
425
521
  }
426
- generateSingleEntityHTMLForAngular(entity) {
522
+ async generateSingleEntityHTMLForAngular(entity, contextUser) {
427
523
  const topArea = this.generateTopAreaHTMLForAngular(entity);
428
524
  const additionalSections = this.generateAngularAdditionalSections(entity, 0);
429
525
  // calc ending index for additional sections so we can pass taht into the related entity tabs because they need to start incrementally up from there...
430
526
  const endingIndex = additionalSections && additionalSections.length ? (topArea && topArea.length > 0 ? additionalSections.length - 1 : additionalSections.length) : 0;
431
- const relatedEntitySections = this.generateRelatedEntityTabs(entity, endingIndex);
527
+ const relatedEntitySections = await this.generateRelatedEntityTabs(entity, endingIndex, contextUser);
432
528
  const htmlCode = topArea.length > 0 ? this.generateSingleEntityHTMLWithSplitterForAngular(topArea, additionalSections, relatedEntitySections) :
433
529
  this.generateSingleEntityHTMLWithOUTSplitterForAngular(topArea, additionalSections, relatedEntitySections);
434
- return { htmlCode, sections: additionalSections };
530
+ return { htmlCode, additionalSections, relatedEntitySections };
435
531
  }
436
532
  generateSingleEntityHTMLWithSplitterForAngular(topArea, additionalSections, relatedEntitySections) {
437
533
  const htmlCode = `<div class="record-form-container" mjFillContainer [bottomMargin]="20" [rightMargin]="5">
@@ -451,14 +547,22 @@ ${this.innerTabStripHTML(additionalSections, relatedEntitySections)}
451
547
  return htmlCode;
452
548
  }
453
549
  innerTopAreaHTML(topArea) {
454
- return ` <div #topArea class="record-form-group">
550
+ if (topArea.trim().length === 0)
551
+ return '';
552
+ else
553
+ return ` <div #topArea class="record-form-group">
455
554
  ${topArea}
456
555
  </div>`;
457
556
  }
458
557
  innerTabStripHTML(additionalSections, relatedEntitySections) {
558
+ // come up with the overall order by looking for the tabs that have DisplayLocation === 'Before Field Tabs' and put those, in sequence order
559
+ // ahead of the additionalSections, then do the additionalSections, and then do the relatedEntitySections
560
+ const relatedEntityBeforeFieldTabs = relatedEntitySections.filter(s => s.RelatedEntityDisplayLocation === 'Before Field Tabs');
561
+ const relatedEntityAfterFieldTabs = relatedEntitySections.filter(s => s.RelatedEntityDisplayLocation === 'After Field Tabs');
459
562
  return ` <mj-tabstrip (TabSelected)="onTabSelect($event.index)" mjFillContainer>
563
+ ${relatedEntityBeforeFieldTabs ? relatedEntityBeforeFieldTabs.map(s => s.TabCode).join('\n') : ''}
460
564
  ${additionalSections ? additionalSections.filter(s => s.Type !== core_1.GeneratedFormSectionType.Top).map(s => s.TabCode).join('\n ') : ''}
461
- ${relatedEntitySections ? relatedEntitySections.join('\n') : ''}
565
+ ${relatedEntityAfterFieldTabs ? relatedEntityAfterFieldTabs.map(s => s.TabCode).join('\n') : ''}
462
566
  </mj-tabstrip>`;
463
567
  }
464
568
  generateSingleEntityHTMLWithOUTSplitterForAngular(topArea, additionalSections, relatedEntitySections) {
@@ -477,4 +581,4 @@ exports.AngularClientGeneratorBase = AngularClientGeneratorBase;
477
581
  exports.AngularClientGeneratorBase = AngularClientGeneratorBase = __decorate([
478
582
  (0, global_1.RegisterClass)(AngularClientGeneratorBase)
479
583
  ], AngularClientGeneratorBase);
480
- //# sourceMappingURL=angular_client_codegen.js.map
584
+ //# sourceMappingURL=angular-codegen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"angular-codegen.js","sourceRoot":"","sources":["../../src/Angular/angular-codegen.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import { AngularComponentInfo, ComponentConfigBase, GenerationInput, GenerationResult, RelatedEntityDisplayComponentGeneratorBase } from "./related-entity-components";
2
+ /**
3
+ * Configuration settings for each instance's use of the JoinGrid via the related entity. Defines the shape of the
4
+ * JSON that should be used to configure the JoinGrid component.
5
+ */
6
+ export declare class JoinGridConfigInfo extends ComponentConfigBase {
7
+ RowsEntityName: string;
8
+ RowsExtraFilter?: string;
9
+ RowsEntityDisplayField: string;
10
+ RowsEntityDisplayName?: string;
11
+ RowsOrderBy?: string;
12
+ JoinEntityDisplayColumns?: string[];
13
+ }
14
+ /**
15
+ * Implementation of the UserViewGridRelatedEntityGenerator class that generates the Angular component for a related entity in a UserViewGrid display component
16
+ */
17
+ export declare class JoinGridRelatedEntityGenerator extends RelatedEntityDisplayComponentGeneratorBase {
18
+ get ConfigType(): typeof JoinGridConfigInfo;
19
+ get ImportPath(): string;
20
+ get ImportItems(): AngularComponentInfo[];
21
+ protected GetForeignKeyName(entityName: string, relatedEntityName: string): string;
22
+ Generate(input: GenerationInput): Promise<GenerationResult>;
23
+ }
24
+ //# sourceMappingURL=join-grid-related-entity-component.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-grid-related-entity-component.d.ts","sourceRoot":"","sources":["../../src/Angular/join-grid-related-entity-component.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,eAAe,EAAE,gBAAgB,EAAE,0CAA0C,EAAE,MAAM,6BAA6B,CAAC;AAIvK;;;GAGG;AACH,qBAAa,kBAAmB,SAAQ,mBAAmB;IAChD,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wBAAwB,CAAC,EAAE,MAAM,EAAE,CAAC;CAC9C;AAED;;GAEG;AACH,qBACa,8BAA+B,SAAQ,0CAA0C;IAC1F,IAAW,UAAU,IAAI,OAAO,kBAAkB,CAEjD;IACD,IAAW,UAAU,IAAI,MAAM,CAE9B;IACD,IAAW,WAAW,IAAI,oBAAoB,EAAE,CAQ/C;IAED,SAAS,CAAC,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,iBAAiB,EAAE,MAAM,GAAG,MAAM;IAerE,QAAQ,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CA+B3E"}
@@ -0,0 +1,86 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.JoinGridRelatedEntityGenerator = exports.JoinGridConfigInfo = void 0;
10
+ const global_1 = require("@memberjunction/global");
11
+ const related_entity_components_1 = require("./related-entity-components");
12
+ const core_1 = require("@memberjunction/core");
13
+ /**
14
+ * Configuration settings for each instance's use of the JoinGrid via the related entity. Defines the shape of the
15
+ * JSON that should be used to configure the JoinGrid component.
16
+ */
17
+ class JoinGridConfigInfo extends related_entity_components_1.ComponentConfigBase {
18
+ }
19
+ exports.JoinGridConfigInfo = JoinGridConfigInfo;
20
+ /**
21
+ * Implementation of the UserViewGridRelatedEntityGenerator class that generates the Angular component for a related entity in a UserViewGrid display component
22
+ */
23
+ let JoinGridRelatedEntityGenerator = class JoinGridRelatedEntityGenerator extends related_entity_components_1.RelatedEntityDisplayComponentGeneratorBase {
24
+ get ConfigType() {
25
+ return JoinGridConfigInfo;
26
+ }
27
+ get ImportPath() {
28
+ return "@memberjunction/ng-join-grid";
29
+ }
30
+ get ImportItems() {
31
+ return [
32
+ {
33
+ ClassName: "JoinGridComponent",
34
+ AngularSelectorName: "mj-join-grid",
35
+ ModuleName: "JoinGridModule"
36
+ }
37
+ ];
38
+ }
39
+ GetForeignKeyName(entityName, relatedEntityName) {
40
+ // find a foreign key field that links the entity to the related entity
41
+ const md = new core_1.Metadata();
42
+ const e = md.EntityByName(entityName);
43
+ if (!e)
44
+ throw new Error("Could not find entity " + entityName);
45
+ // now find the field in e that matches the related entity
46
+ const field = e.Fields.find(f => f.RelatedEntity === relatedEntityName);
47
+ if (!field)
48
+ throw new Error("Could not find a foreign key field in entity " + entityName + " that links to " + relatedEntityName);
49
+ return field.Name;
50
+ }
51
+ async Generate(input) {
52
+ const config = (0, global_1.SafeJSONParse)(input.RelationshipInfo.DisplayComponentConfiguration);
53
+ if (!config)
54
+ throw new Error("Invalid configuration for JoinGrid component for relationship " + input.RelationshipInfo.ID);
55
+ const template = `<mj-join-grid
56
+ [ShowSaveButton]="false"
57
+ [ShowCancelButton]="false"
58
+ [EditMode]="GridEditMode()"
59
+ RowsEntityName="${config.RowsEntityName}"
60
+ RowsEntityDisplayField="${config.RowsEntityDisplayField}"
61
+ RowsExtraFilter="${config.RowsExtraFilter ? config.RowsExtraFilter : ''}"
62
+ RowsEntityDataSource="FullEntity"
63
+ RowsOrderBy="${config.RowsOrderBy ? config.RowsOrderBy : ''}"
64
+ RowsEntityDisplayName="${config.RowsEntityDisplayName ? config.RowsEntityDisplayName : config.RowsEntityDisplayField}"
65
+ ColumnsMode="Fields"
66
+ JoinEntityName="${input.RelationshipInfo.RelatedEntity}"
67
+ JoinEntityRowForeignKey="${this.GetForeignKeyName(input.RelationshipInfo.RelatedEntity, config.RowsEntityName)}"
68
+ [JoinEntityExtraFilter]="'${this.GetForeignKeyName(input.RelationshipInfo.RelatedEntity, input.Entity.Name)}=' + record.${input.Entity.FirstPrimaryKey.Name}"
69
+ [JoinEntityDisplayColumns]="${config.JoinEntityDisplayColumns ? `[${config.JoinEntityDisplayColumns.map(c => `'${c}'`).join(',')}]` : '[]'}"
70
+ [NewRecordDefaultValues]="{${this.GetForeignKeyName(input.RelationshipInfo.RelatedEntity, input.Entity.Name)}: record.${input.Entity.FirstPrimaryKey.Name}}"
71
+ >
72
+ </mj-join-grid>
73
+ `;
74
+ return {
75
+ Success: true,
76
+ TemplateOutput: template,
77
+ CodeOutput: null,
78
+ Component: this
79
+ };
80
+ }
81
+ };
82
+ exports.JoinGridRelatedEntityGenerator = JoinGridRelatedEntityGenerator;
83
+ exports.JoinGridRelatedEntityGenerator = JoinGridRelatedEntityGenerator = __decorate([
84
+ (0, global_1.RegisterClass)(related_entity_components_1.RelatedEntityDisplayComponentGeneratorBase, "JoinGrid")
85
+ ], JoinGridRelatedEntityGenerator);
86
+ //# sourceMappingURL=join-grid-related-entity-component.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"join-grid-related-entity-component.js","sourceRoot":"","sources":["../../src/Angular/join-grid-related-entity-component.ts"],"names":[],"mappings":"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"}