@contrail/document-generation 2.0.17 → 2.0.18

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.
@@ -1,5 +1,5 @@
1
1
  import { DocumentElement, PositionDefinition } from "@contrail/documents";
2
- import { DocumentGenerationOptions, DocumentTemplate } from "./interfaces";
2
+ import { DocumentGenerationOptions, DocumentTemplate, FrameDocumentTemplate } from "./interfaces";
3
3
  import { DataGroup } from "@contrail/data-grouping";
4
4
  export declare class BoardDocumentGenerator {
5
5
  constructor();
@@ -13,9 +13,9 @@ export declare class BoardDocumentGenerator {
13
13
  y: number;
14
14
  };
15
15
  static generateBoardGroupHeaders(group: DataGroup, template: DocumentTemplate, startingPosition: PositionDefinition, totalDepth: number, currentDepth: number): any[];
16
- static generateBoardFrames(group: DataGroup, template: DocumentTemplate, startingPosition: PositionDefinition, totalDepth: number, currentDepth: number): any[];
16
+ static generateBoardFrames(group: DataGroup, template: DocumentTemplate, frameTemplate: FrameDocumentTemplate, startingPosition: PositionDefinition, totalDepth: number, currentDepth: number): any[];
17
17
  static getGroupSpan(group: DataGroup, totalDepth: any, currentDepth: any): number;
18
18
  private static findDeepestSubgroups;
19
- static generateFrameGroup(dataGroup: DataGroup, template: DocumentTemplate, position: PositionDefinition): Array<DocumentElement>;
19
+ static generateFrameGroup(dataGroup: DataGroup, template: DocumentTemplate, frameTemplate: any, position: PositionDefinition): Array<DocumentElement>;
20
20
  static generateBoardGroupHeader(dataGroup: DataGroup, template: DocumentTemplate, position: PositionDefinition, span: any): any[];
21
21
  }
@@ -13,11 +13,15 @@ class BoardDocumentGenerator {
13
13
  const elements = [];
14
14
  const structure = options.data.dataGroup;
15
15
  const template = options.documentTemplateDefinition;
16
+ const frameTemplate = options.frameTemplate;
17
+ if (frameTemplate) {
18
+ template.frameSize = frameTemplate.document.size;
19
+ }
16
20
  console.log("generateDocumentElements: ", structure.depth, structure.groupingProperties.length);
17
21
  let position = options.startingCoordinates || { x: 0, y: 0 };
18
22
  const group = structure.rootGroup;
19
23
  elements.push(...this.generateBoardGroupHeaders(group, template, position, structure.depth, 0));
20
- elements.push(...this.generateBoardFrames(group, template, position, structure.depth, 0));
24
+ elements.push(...this.generateBoardFrames(group, template, frameTemplate, position, structure.depth, 0));
21
25
  return elements;
22
26
  }
23
27
  static adjustPositionBasedGroupHeaderSpan(currentPosition, template, subGroup, totalDepth, currentDepth) {
@@ -59,18 +63,18 @@ class BoardDocumentGenerator {
59
63
  }
60
64
  return elements;
61
65
  }
62
- static generateBoardFrames(group, template, startingPosition, totalDepth, currentDepth) {
66
+ static generateBoardFrames(group, template, frameTemplate, startingPosition, totalDepth, currentDepth) {
63
67
  const elements = [];
64
68
  let position = util_1.ObjectUtil.cloneDeep(startingPosition);
65
69
  if (currentDepth > 0) {
66
70
  position = this.adjustPositionBasedOnGroupHeaderSize(position, template);
67
71
  }
68
72
  if (currentDepth === totalDepth) {
69
- elements.push(...this.generateFrameGroup(group, template, position));
73
+ elements.push(...this.generateFrameGroup(group, template, frameTemplate, position));
70
74
  }
71
75
  if (currentDepth < totalDepth) {
72
76
  for (let subGroup of group.subGroups) {
73
- elements.push(...this.generateBoardFrames(subGroup, template, position, totalDepth, currentDepth + 1));
77
+ elements.push(...this.generateBoardFrames(subGroup, template, frameTemplate, position, totalDepth, currentDepth + 1));
74
78
  position = util_1.ObjectUtil.cloneDeep(this.adjustPositionBasedGroupHeaderSpan(position, template, subGroup, totalDepth, currentDepth));
75
79
  }
76
80
  }
@@ -94,11 +98,11 @@ class BoardDocumentGenerator {
94
98
  this.findDeepestSubgroups(group.subGroups[i], subgroups, totalDepth, currentDepth + 1);
95
99
  }
96
100
  }
97
- static generateFrameGroup(dataGroup, template, position) {
101
+ static generateFrameGroup(dataGroup, template, frameTemplate, position) {
98
102
  const elements = [];
99
103
  let framePosition = { x: position.x + template.framePadding, y: position.y + template.framePadding };
100
104
  for (let group of dataGroup.subGroups) {
101
- let frame = frame_generator_1.FrameGenerator.generateBoardFrameForDataGroup(group, framePosition, template);
105
+ let frame = frame_generator_1.FrameGenerator.generateBoardFrameForDataGroup(group, framePosition, template, frameTemplate);
102
106
  elements.push(...frame.toDocumentElements());
103
107
  if (template.frameOrientation === interfaces_1.Orientation.HORIZONTAL) {
104
108
  framePosition.x = framePosition.x + template.frameSize.width + template.framePadding || 10;
@@ -1,11 +1,12 @@
1
1
  import { DocumentElement, PositionDefinition, SizeDefinition } from "@contrail/documents";
2
2
  import { DataGroup } from "@contrail/data-grouping";
3
- import { DocumentTemplate } from "../interfaces";
3
+ import { DocumentTemplate, FrameDocumentTemplate } from "../interfaces";
4
4
  import { DocumentFrame } from "./frame";
5
5
  export declare class FrameGenerator {
6
- static generateBoardFrameForDataGroup(dataGroup: DataGroup, framePosition: PositionDefinition, template: DocumentTemplate): DocumentFrame;
7
- static generateFrameContentForGroup(frame: DocumentFrame, dataGroup: DataGroup, template: DocumentTemplate): DocumentFrame;
6
+ static generateBoardFrameForDataGroup(dataGroup: DataGroup, framePosition: PositionDefinition, template: DocumentTemplate, frameTemplate: FrameDocumentTemplate): DocumentFrame;
7
+ static generateFrameContentForGroup(frame: DocumentFrame, dataGroup: DataGroup, template: DocumentTemplate, frameTemplate?: FrameDocumentTemplate): DocumentFrame;
8
8
  static generateFrameHeaderForDataGroup(dataGroup: DataGroup, position: PositionDefinition, template: DocumentTemplate, headerSize: SizeDefinition): DocumentElement[];
9
9
  static generateFrameInfoPanelForDataGroup(dataGroup: DataGroup, position: PositionDefinition, template: DocumentTemplate, panelSize: SizeDefinition): DocumentElement[];
10
10
  static generateFrame(options: DocumentElement): DocumentElement;
11
+ static generateFrameTemplateElements(frameTemplate: FrameDocumentTemplate, dataGroup: DataGroup): DocumentElement[];
11
12
  }
@@ -8,13 +8,20 @@ const document_util_1 = require("../util/document-util");
8
8
  const info_panel_generator_1 = require("../info-panel/info-panel-generator");
9
9
  const frame_1 = require("./frame");
10
10
  class FrameGenerator {
11
- static generateBoardFrameForDataGroup(dataGroup, framePosition, template) {
12
- const style = { backgroundColor: "#fff", border: { width: 1, color: "#616161" } };
13
- let frame = new frame_1.BoardFrame(dataGroup.name, util_1.ObjectUtil.cloneDeep(framePosition), template.frameSize, style);
14
- frame = this.generateFrameContentForGroup(frame, dataGroup, template);
11
+ static generateBoardFrameForDataGroup(dataGroup, framePosition, template, frameTemplate) {
12
+ let style = { backgroundColor: "#fff", border: { width: 1, color: "#616161" } };
13
+ let frameSize = template.frameSize;
14
+ if (frameTemplate) {
15
+ if (frameTemplate.document.style) {
16
+ style = frameTemplate.document.style;
17
+ }
18
+ frameSize = frameTemplate.document.size;
19
+ }
20
+ let frame = new frame_1.BoardFrame(dataGroup.name, util_1.ObjectUtil.cloneDeep(framePosition), frameSize, style);
21
+ frame = this.generateFrameContentForGroup(frame, dataGroup, template, frameTemplate);
15
22
  return frame;
16
23
  }
17
- static generateFrameContentForGroup(frame, dataGroup, template) {
24
+ static generateFrameContentForGroup(frame, dataGroup, template, frameTemplate = null) {
18
25
  var _a, _b;
19
26
  const FRAME_PADDING = 20;
20
27
  const headerPosition = {
@@ -29,34 +36,47 @@ class FrameGenerator {
29
36
  let framePanelDimensions = { height: 0, width: 0 };
30
37
  let hasPanel = false;
31
38
  let hasHeader = false;
32
- if (template.frameHeaderTemplate) {
33
- hasHeader = true;
34
- frameHeaderDimensions = { height: 50, width: template.frameSize.width - 50 };
35
- const headerElements = this.generateFrameHeaderForDataGroup(dataGroup, headerPosition, template, frameHeaderDimensions);
36
- frame.addDocumentElements(headerElements);
39
+ if (frameTemplate) {
40
+ const elements = this.generateFrameTemplateElements(frameTemplate, dataGroup);
41
+ frame.addDocumentElements(elements);
37
42
  }
38
- if (template.frameInfoPanelTemplate) {
39
- hasPanel = true;
40
- framePanelDimensions = { width: ((_b = (_a = template.frameInfoPanelTemplate.panelDocumentTemplate) === null || _a === void 0 ? void 0 : _a.size) === null || _b === void 0 ? void 0 : _b.width) || 300 };
41
- framePanelDimensions.height = template.frameSize.height - (2 * FRAME_PADDING);
42
- const panelElements = this.generateFrameInfoPanelForDataGroup(dataGroup, panelPosition, template, framePanelDimensions);
43
- frame.addDocumentElements(panelElements);
43
+ else {
44
+ if (template.frameHeaderTemplate) {
45
+ hasHeader = true;
46
+ frameHeaderDimensions = { height: 50, width: template.frameSize.width - 50 };
47
+ const headerElements = this.generateFrameHeaderForDataGroup(dataGroup, headerPosition, template, frameHeaderDimensions);
48
+ frame.addDocumentElements(headerElements);
49
+ }
50
+ if (template.frameInfoPanelTemplate) {
51
+ hasPanel = true;
52
+ framePanelDimensions = { width: ((_b = (_a = template.frameInfoPanelTemplate.panelDocumentTemplate) === null || _a === void 0 ? void 0 : _a.size) === null || _b === void 0 ? void 0 : _b.width) || 300 };
53
+ framePanelDimensions.height = template.frameSize.height - (2 * FRAME_PADDING);
54
+ const panelElements = this.generateFrameInfoPanelForDataGroup(dataGroup, panelPosition, template, framePanelDimensions);
55
+ frame.addDocumentElements(panelElements);
56
+ }
44
57
  }
45
58
  const GRID_MARGIN = 20;
46
59
  let gridPosition = { x: 0, y: 0 };
47
- if (hasHeader) {
48
- gridPosition = util_1.ObjectUtil.cloneDeep(headerPosition);
49
- gridPosition.y = gridPosition.y + frameHeaderDimensions.height + GRID_MARGIN;
60
+ let idealGridSize = { width: 0, height: 0 };
61
+ if (frameTemplate) {
62
+ gridPosition = frameTemplate.gridSpaceDefinition.position;
63
+ idealGridSize = frameTemplate.gridSpaceDefinition.size;
50
64
  }
51
- if (hasPanel) {
52
- gridPosition = util_1.ObjectUtil.cloneDeep(panelPosition);
53
- gridPosition.x = gridPosition.x + framePanelDimensions.width + GRID_MARGIN;
65
+ else {
66
+ if (hasHeader) {
67
+ gridPosition = util_1.ObjectUtil.cloneDeep(headerPosition);
68
+ gridPosition.y = gridPosition.y + frameHeaderDimensions.height + GRID_MARGIN;
69
+ }
70
+ if (hasPanel) {
71
+ gridPosition = util_1.ObjectUtil.cloneDeep(panelPosition);
72
+ gridPosition.x = gridPosition.x + framePanelDimensions.width + GRID_MARGIN;
73
+ }
74
+ const frameSize = template.frameSize;
75
+ idealGridSize = {
76
+ width: frameSize.width - gridPosition.x - FRAME_PADDING,
77
+ height: frameSize.height - gridPosition.y - FRAME_PADDING
78
+ };
54
79
  }
55
- const frameSize = template.frameSize;
56
- const idealGridSize = {
57
- width: frameSize.width - gridPosition.x - FRAME_PADDING,
58
- height: frameSize.height - gridPosition.y - FRAME_PADDING
59
- };
60
80
  const gridElements = component_grid_generator_1.ComponentGridGenerator.generateComponentGrid(dataGroup.data, gridPosition, template.componentGridTemplate, idealGridSize);
61
81
  frame.addDocumentElements(gridElements);
62
82
  return frame;
@@ -76,5 +96,18 @@ class FrameGenerator {
76
96
  const frame = documents_1.DocumentElementFactory.createFrameElement(options);
77
97
  return frame;
78
98
  }
99
+ static generateFrameTemplateElements(frameTemplate, dataGroup) {
100
+ const templateElements = util_1.ObjectUtil.cloneDeep(frameTemplate.document.elements);
101
+ const createdElements = [];
102
+ for (let element of templateElements) {
103
+ const documentElement = documents_1.DocumentElementFactory.createElement(element.type, element);
104
+ if (documentElement.type === 'text') {
105
+ documentElement.text = documentElement.text.replace('{{dataGroup.name}}', dataGroup.name);
106
+ }
107
+ createdElements.push(documentElement);
108
+ }
109
+ ;
110
+ return createdElements;
111
+ }
79
112
  }
80
113
  exports.FrameGenerator = FrameGenerator;
@@ -41,10 +41,22 @@ class BoardFrame extends DocumentFrame {
41
41
  const repositionedElements = [];
42
42
  for (let element of util_1.ObjectUtil.cloneDeep(this.frameContentElements)) {
43
43
  if (this.frameElement.position.x !== 0) {
44
- element.position.x += this.frameElement.position.x;
44
+ if (element.type === 'line') {
45
+ element.lineDefinition.x1 += this.frameElement.position.x;
46
+ element.lineDefinition.x2 += this.frameElement.position.x;
47
+ }
48
+ else {
49
+ element.position.x += this.frameElement.position.x;
50
+ }
45
51
  }
46
52
  if (this.frameElement.position.y !== 0) {
47
- element.position.y += this.frameElement.position.y;
53
+ if (element.type === 'line') {
54
+ element.lineDefinition.y1 += this.frameElement.position.y;
55
+ element.lineDefinition.y2 += this.frameElement.position.y;
56
+ }
57
+ else {
58
+ element.position.y += this.frameElement.position.y;
59
+ }
48
60
  }
49
61
  repositionedElements.push(element);
50
62
  }
@@ -1,5 +1,5 @@
1
1
  import { DataGroupStructure } from "@contrail/data-grouping";
2
- import { PositionDefinition, SizeDefinition, DocumentElement, StyleDefinition } from "@contrail/documents";
2
+ import { PositionDefinition, SizeDefinition, Document, DocumentElement, StyleDefinition } from "@contrail/documents";
3
3
  import { TypeProperty } from "@contrail/types";
4
4
  export declare enum Orientation {
5
5
  HORIZONTAL = "horizontal",
@@ -12,6 +12,7 @@ export interface DocumentGenerationOptions {
12
12
  startingCoordinates: PositionDefinition;
13
13
  data: DocumentGenerationDataDefinition;
14
14
  documentTemplateDefinition: DocumentTemplate;
15
+ frameTemplate?: FrameDocumentTemplate;
15
16
  }
16
17
  export interface DocumentTemplate {
17
18
  frameOrientation: Orientation;
@@ -22,6 +23,16 @@ export interface DocumentTemplate {
22
23
  frameInfoPanelTemplate?: FrameInfoPanelTemplate;
23
24
  componentGridTemplate: ComponentGridTemplate;
24
25
  }
26
+ export interface GridSpaceDefinition {
27
+ size: SizeDefinition;
28
+ position: PositionDefinition;
29
+ }
30
+ export interface FrameDocumentTemplate {
31
+ templateType: 'FRAME' | 'BOARD';
32
+ document: Document;
33
+ gridSpaceDefinition: GridSpaceDefinition;
34
+ name: string;
35
+ }
25
36
  export interface FrameInfoPanelTemplate {
26
37
  panelDocumentTemplate: DocumentElement;
27
38
  propertyTemplate: PanelPropertyTemplate;
@@ -10,9 +10,10 @@ class ShowcaseFrameGenerator {
10
10
  const frames = [];
11
11
  const structure = options.data.dataGroup;
12
12
  const template = options.documentTemplateDefinition;
13
+ const frameTemplate = options.frameTemplate;
13
14
  const groups = this.getFrameGroups(structure);
14
15
  for (let group of groups) {
15
- const showcaseFrame = frame_generator_1.FrameGenerator.generateFrameContentForGroup(new frame_1.ShowcaseFrame(), group, template);
16
+ const showcaseFrame = frame_generator_1.FrameGenerator.generateFrameContentForGroup(new frame_1.ShowcaseFrame(), group, template, frameTemplate);
16
17
  console.log("showcaseFrame: ", showcaseFrame);
17
18
  frames.push(showcaseFrame);
18
19
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@contrail/document-generation",
3
- "version": "2.0.17",
3
+ "version": "2.0.18",
4
4
  "description": "Utilities for automatic generation of documents.",
5
5
  "main": "lib/index.js",
6
6
  "types": "lib/index.d.ts",