@contrail/document-generation 2.0.17 → 2.0.19
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.
- package/lib/board-document-generator.d.ts +3 -3
- package/lib/board-document-generator.js +10 -6
- package/lib/frames/frame-generator.d.ts +4 -3
- package/lib/frames/frame-generator.js +65 -27
- package/lib/frames/frame.js +14 -2
- package/lib/interfaces.d.ts +12 -1
- package/lib/showcase-frame-generator.js +2 -1
- package/package.json +1 -1
|
@@ -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
|
-
|
|
13
|
-
let
|
|
14
|
-
|
|
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 (
|
|
33
|
-
|
|
34
|
-
|
|
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
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
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
|
-
|
|
48
|
-
|
|
49
|
-
gridPosition
|
|
60
|
+
let idealGridSize = { width: 0, height: 0 };
|
|
61
|
+
if (frameTemplate) {
|
|
62
|
+
gridPosition = frameTemplate.gridSpaceDefinition.position;
|
|
63
|
+
idealGridSize = frameTemplate.gridSpaceDefinition.size;
|
|
50
64
|
}
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
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,23 @@ 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
|
+
delete element.id;
|
|
104
|
+
delete element.updatedOn;
|
|
105
|
+
delete element.updatedById;
|
|
106
|
+
delete element.createdOn;
|
|
107
|
+
delete element.createdById;
|
|
108
|
+
const documentElement = documents_1.DocumentElementFactory.createElement(element.type, element);
|
|
109
|
+
if (documentElement.type === 'text') {
|
|
110
|
+
documentElement.text = documentElement.text.replace('{{dataGroup.name}}', dataGroup.name);
|
|
111
|
+
}
|
|
112
|
+
createdElements.push(documentElement);
|
|
113
|
+
}
|
|
114
|
+
;
|
|
115
|
+
return createdElements;
|
|
116
|
+
}
|
|
79
117
|
}
|
|
80
118
|
exports.FrameGenerator = FrameGenerator;
|
package/lib/frames/frame.js
CHANGED
|
@@ -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.
|
|
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.
|
|
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
|
}
|
package/lib/interfaces.d.ts
CHANGED
|
@@ -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
|
}
|