@contrail/document-generation 2.1.20 → 2.1.22
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 +23 -0
- package/lib/board-document-generator.js +241 -0
- package/lib/components/component-generator.d.ts +6 -0
- package/lib/components/component-generator.js +55 -0
- package/lib/components/component-grid-generator.d.ts +7 -0
- package/lib/components/component-grid-generator.js +102 -0
- package/lib/components/component-util.d.ts +5 -0
- package/lib/components/component-util.js +43 -0
- package/lib/document-generator.d.ts +6 -0
- package/lib/document-generator.js +11 -0
- package/lib/frames/frame-generator.d.ts +12 -0
- package/lib/frames/frame-generator.js +160 -0
- package/lib/frames/frame.d.ts +18 -0
- package/lib/frames/frame.js +71 -0
- package/lib/frames/index.d.ts +2 -0
- package/lib/frames/index.js +18 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +22 -0
- package/lib/info-panel/info-panel-generator.d.ts +6 -0
- package/lib/info-panel/info-panel-generator.js +56 -0
- package/lib/interfaces.d.ts +73 -0
- package/lib/interfaces.js +8 -0
- package/lib/showcase-frame-generator.d.ts +8 -0
- package/lib/showcase-frame-generator.js +44 -0
- package/lib/util/document-dynamic-text-element-util.d.ts +9 -0
- package/lib/util/document-dynamic-text-element-util.js +61 -0
- package/lib/util/document-property-util.d.ts +9 -0
- package/lib/util/document-property-util.js +103 -0
- package/lib/util/document-text-element-util.d.ts +12 -0
- package/lib/util/document-text-element-util.js +148 -0
- package/lib/util/document-util.d.ts +8 -0
- package/lib/util/document-util.js +22 -0
- package/lib/util/index.d.ts +2 -0
- package/lib/util/index.js +18 -0
- package/lib/util/text-util.d.ts +4 -0
- package/lib/util/text-util.js +28 -0
- package/package.json +1 -1
- package/lib/mocks/test-type-data.d.ts +0 -142
- package/lib/mocks/test-type-data.js +0 -149
- package/mocks/test-type-data.ts +0 -146
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FrameGenerator = void 0;
|
|
4
|
+
const documents_1 = require("@contrail/documents");
|
|
5
|
+
const component_grid_generator_1 = require("../components/component-grid-generator");
|
|
6
|
+
const util_1 = require("@contrail/util");
|
|
7
|
+
const document_util_1 = require("../util/document-util");
|
|
8
|
+
const info_panel_generator_1 = require("../info-panel/info-panel-generator");
|
|
9
|
+
const frame_1 = require("./frame");
|
|
10
|
+
const document_dynamic_text_element_util_1 = require("../util/document-dynamic-text-element-util");
|
|
11
|
+
const document_table_1 = require("@contrail/document-table");
|
|
12
|
+
class FrameGenerator {
|
|
13
|
+
static generateBoardFrameForDataGroup(dataGroup, framePosition, template, frameTemplate, frameTitle) {
|
|
14
|
+
let style = { backgroundColor: '#fff', border: { width: 1, color: '#616161' } };
|
|
15
|
+
let frameSize = template.frameSize;
|
|
16
|
+
let clipContent = false;
|
|
17
|
+
if (frameTemplate) {
|
|
18
|
+
if (frameTemplate.document.style) {
|
|
19
|
+
style = frameTemplate.document.style;
|
|
20
|
+
}
|
|
21
|
+
frameSize = frameTemplate.document.size;
|
|
22
|
+
if (frameTemplate.document.clipContent) {
|
|
23
|
+
clipContent = frameTemplate.document.clipContent;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
let frame = new frame_1.BoardFrame(frameTitle || dataGroup.name, { x: framePosition.x, y: framePosition.y }, frameSize, style, clipContent);
|
|
27
|
+
frame = this.generateFrameContentForGroup(frame, dataGroup, template, frameTemplate, frameTitle);
|
|
28
|
+
return frame;
|
|
29
|
+
}
|
|
30
|
+
static generateFrameContentForGroup(frame, dataGroup, template, frameTemplate = null, frameTitle = null) {
|
|
31
|
+
var _a, _b;
|
|
32
|
+
const FRAME_PADDING = 20;
|
|
33
|
+
const headerPosition = {
|
|
34
|
+
x: FRAME_PADDING,
|
|
35
|
+
y: FRAME_PADDING,
|
|
36
|
+
};
|
|
37
|
+
const panelPosition = {
|
|
38
|
+
x: FRAME_PADDING,
|
|
39
|
+
y: FRAME_PADDING,
|
|
40
|
+
};
|
|
41
|
+
let frameHeaderDimensions = { height: 0, width: 0 };
|
|
42
|
+
let framePanelDimensions = { height: 0, width: 0 };
|
|
43
|
+
let hasPanel = false;
|
|
44
|
+
let hasHeader = false;
|
|
45
|
+
if (frameTemplate) {
|
|
46
|
+
const elements = this.generateFrameTemplateElements(frameTemplate, dataGroup, frameTitle);
|
|
47
|
+
frame.addDocumentElements(elements);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
if (template.frameHeaderTemplate) {
|
|
51
|
+
hasHeader = true;
|
|
52
|
+
frameHeaderDimensions = { height: 50, width: template.frameSize.width - 50 };
|
|
53
|
+
const headerElements = this.generateFrameHeaderForDataGroup(dataGroup, headerPosition, template, frameHeaderDimensions, frameTitle);
|
|
54
|
+
frame.addDocumentElements(headerElements);
|
|
55
|
+
}
|
|
56
|
+
if (template.frameInfoPanelTemplate) {
|
|
57
|
+
hasPanel = true;
|
|
58
|
+
framePanelDimensions = { width: ((_b = (_a = template.frameInfoPanelTemplate.panelDocumentTemplate) === null || _a === void 0 ? void 0 : _a.size) === null || _b === void 0 ? void 0 : _b.width) || 300 };
|
|
59
|
+
framePanelDimensions.height = template.frameSize.height - 2 * FRAME_PADDING;
|
|
60
|
+
const panelElements = this.generateFrameInfoPanelForDataGroup(dataGroup, panelPosition, template, framePanelDimensions);
|
|
61
|
+
frame.addDocumentElements(panelElements);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const GRID_MARGIN = 20;
|
|
65
|
+
let gridPosition = { x: 0, y: 0 };
|
|
66
|
+
let idealGridSize = { width: 0, height: 0 };
|
|
67
|
+
if (frameTemplate) {
|
|
68
|
+
gridPosition = frameTemplate.gridSpaceDefinition.position;
|
|
69
|
+
idealGridSize = frameTemplate.gridSpaceDefinition.size;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
if (hasHeader) {
|
|
73
|
+
gridPosition = {
|
|
74
|
+
x: headerPosition.x,
|
|
75
|
+
y: headerPosition.y,
|
|
76
|
+
};
|
|
77
|
+
gridPosition.y = gridPosition.y + frameHeaderDimensions.height + GRID_MARGIN;
|
|
78
|
+
}
|
|
79
|
+
if (hasPanel) {
|
|
80
|
+
gridPosition = {
|
|
81
|
+
x: panelPosition.x,
|
|
82
|
+
y: panelPosition.y,
|
|
83
|
+
};
|
|
84
|
+
gridPosition.x = gridPosition.x + framePanelDimensions.width + GRID_MARGIN;
|
|
85
|
+
}
|
|
86
|
+
const frameSize = template.frameSize;
|
|
87
|
+
idealGridSize = {
|
|
88
|
+
width: frameSize.width - gridPosition.x - FRAME_PADDING,
|
|
89
|
+
height: frameSize.height - gridPosition.y - FRAME_PADDING,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const gridElements = component_grid_generator_1.ComponentGridGenerator.generateComponentGrid(dataGroup.data, gridPosition, template.componentGridTemplate, idealGridSize);
|
|
93
|
+
frame.addDocumentElements(gridElements);
|
|
94
|
+
return frame;
|
|
95
|
+
}
|
|
96
|
+
static generateFrameHeaderForDataGroup(dataGroup, position, template, headerSize, frameTitle = null) {
|
|
97
|
+
const heading = documents_1.DocumentElementFactory.createTextElement(dataGroup.name, template.frameHeaderTemplate);
|
|
98
|
+
heading.style = {
|
|
99
|
+
border: { width: 1, color: 'rgba(0,0,0,0)' },
|
|
100
|
+
color: '#000000',
|
|
101
|
+
backgroundColor: template.frameHeaderTemplate.style.backgroundColor || 'black',
|
|
102
|
+
};
|
|
103
|
+
heading.text = `<p><span style=\"font-size: ${template.frameHeaderTemplate.style.font.size}pt;\"><strong><span style=\"color: ${template.frameHeaderTemplate.style.color};\">${document_util_1.DocumentUtil.sanitizeHTML(frameTitle || dataGroup.name)}</span></strong></span></p>`;
|
|
104
|
+
heading.size = { width: headerSize.width, height: headerSize.height };
|
|
105
|
+
heading.position = { x: position.x, y: position.y };
|
|
106
|
+
return [heading];
|
|
107
|
+
}
|
|
108
|
+
static generateFrameInfoPanelForDataGroup(dataGroup, position, template, panelSize) {
|
|
109
|
+
return info_panel_generator_1.InfoPanelGenerator.generatePanelFromTemplate(dataGroup.propertyValues, template.frameInfoPanelTemplate, position, panelSize);
|
|
110
|
+
}
|
|
111
|
+
static generateFrame(options) {
|
|
112
|
+
const frame = documents_1.DocumentElementFactory.createFrameElement(options);
|
|
113
|
+
return frame;
|
|
114
|
+
}
|
|
115
|
+
static generateFrameTemplateElements(frameTemplate, dataGroup, frameTitle = null) {
|
|
116
|
+
const templateElements = util_1.ObjectUtil.cloneDeep(frameTemplate.document.elements);
|
|
117
|
+
const elementMapping = {};
|
|
118
|
+
const createdElements = [];
|
|
119
|
+
for (let element of templateElements) {
|
|
120
|
+
if (['row', 'column', 'cell'].indexOf(element.type) !== -1)
|
|
121
|
+
continue;
|
|
122
|
+
const origElementId = element.id;
|
|
123
|
+
delete element.id;
|
|
124
|
+
delete element.updatedOn;
|
|
125
|
+
delete element.updatedById;
|
|
126
|
+
delete element.createdOn;
|
|
127
|
+
delete element.createdById;
|
|
128
|
+
let documentElement = documents_1.DocumentElementFactory.createElement(element.type, element);
|
|
129
|
+
let childDocumentElements = [];
|
|
130
|
+
elementMapping[origElementId] = documentElement.id;
|
|
131
|
+
if (documentElement.type === 'text') {
|
|
132
|
+
documentElement.text = documentElement.text.replace('{{dataGroup.name}}', dataGroup.name);
|
|
133
|
+
}
|
|
134
|
+
if (document_dynamic_text_element_util_1.DocumentDynamicTextElementUtil.isDynamicText(documentElement)) {
|
|
135
|
+
document_dynamic_text_element_util_1.DocumentDynamicTextElementUtil.handleDynamicText(documentElement, dataGroup, frameTitle);
|
|
136
|
+
}
|
|
137
|
+
if (documentElement.elementIds) {
|
|
138
|
+
documentElement.elementIds = [elementMapping[documentElement.elementIds[0]]];
|
|
139
|
+
}
|
|
140
|
+
if (documentElement.type === 'table') {
|
|
141
|
+
const oldChildElements = templateElements.filter((e) => e.tableId === origElementId && ['cell', 'column', 'row'].indexOf(e.type) !== -1);
|
|
142
|
+
let newTableElement, newChildElements = [];
|
|
143
|
+
try {
|
|
144
|
+
[newTableElement, ...newChildElements] = document_table_1.TableCopyService.copy(documentElement, oldChildElements);
|
|
145
|
+
}
|
|
146
|
+
catch (e) { }
|
|
147
|
+
if (oldChildElements.length !== newChildElements.length || oldChildElements.length === 0) {
|
|
148
|
+
console.log(`Invalid table element to copy`, documentElement, oldChildElements, newChildElements);
|
|
149
|
+
continue;
|
|
150
|
+
}
|
|
151
|
+
documentElement = newTableElement;
|
|
152
|
+
childDocumentElements = newChildElements;
|
|
153
|
+
}
|
|
154
|
+
createdElements.push(documentElement);
|
|
155
|
+
createdElements.push(...childDocumentElements);
|
|
156
|
+
}
|
|
157
|
+
return createdElements;
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
exports.FrameGenerator = FrameGenerator;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { DocumentElement, PositionDefinition, SizeDefinition, StyleDefinition } from '@contrail/documents';
|
|
2
|
+
export declare abstract class DocumentFrame {
|
|
3
|
+
frameContentElements: Array<DocumentElement>;
|
|
4
|
+
constructor();
|
|
5
|
+
addDocumentElements(elements: Array<DocumentElement>): void;
|
|
6
|
+
toDocumentElements(): Array<DocumentElement>;
|
|
7
|
+
}
|
|
8
|
+
export declare class ShowcaseFrame extends DocumentFrame {
|
|
9
|
+
name?: string;
|
|
10
|
+
documentGenerationConfigId?: string;
|
|
11
|
+
constructor(name?: string);
|
|
12
|
+
}
|
|
13
|
+
export declare class BoardFrame extends DocumentFrame {
|
|
14
|
+
private frameElement;
|
|
15
|
+
name: string;
|
|
16
|
+
constructor(name: string, position: PositionDefinition, size: SizeDefinition, style: StyleDefinition, clipContent?: boolean);
|
|
17
|
+
toDocumentElements(): Array<DocumentElement>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BoardFrame = exports.ShowcaseFrame = exports.DocumentFrame = void 0;
|
|
4
|
+
const documents_1 = require("@contrail/documents");
|
|
5
|
+
const util_1 = require("@contrail/util");
|
|
6
|
+
class DocumentFrame {
|
|
7
|
+
constructor() {
|
|
8
|
+
this.frameContentElements = [];
|
|
9
|
+
}
|
|
10
|
+
addDocumentElements(elements) {
|
|
11
|
+
this.frameContentElements.push(...elements);
|
|
12
|
+
}
|
|
13
|
+
toDocumentElements() {
|
|
14
|
+
const elements = [];
|
|
15
|
+
elements.push(...this.frameContentElements);
|
|
16
|
+
return elements;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.DocumentFrame = DocumentFrame;
|
|
20
|
+
class ShowcaseFrame extends DocumentFrame {
|
|
21
|
+
constructor(name = '') {
|
|
22
|
+
super();
|
|
23
|
+
this.name = name;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
exports.ShowcaseFrame = ShowcaseFrame;
|
|
27
|
+
class BoardFrame extends DocumentFrame {
|
|
28
|
+
constructor(name, position, size, style, clipContent = false) {
|
|
29
|
+
super();
|
|
30
|
+
if (!position) {
|
|
31
|
+
position = { x: 0, y: 0 };
|
|
32
|
+
}
|
|
33
|
+
if (!size) {
|
|
34
|
+
size = { width: 1200, height: 675 };
|
|
35
|
+
}
|
|
36
|
+
if (!style) {
|
|
37
|
+
style = {};
|
|
38
|
+
}
|
|
39
|
+
this.frameElement = documents_1.DocumentElementFactory.createFrameElement({ size, position, style, clipContent });
|
|
40
|
+
this.frameElement.name = name;
|
|
41
|
+
}
|
|
42
|
+
toDocumentElements() {
|
|
43
|
+
const elements = [];
|
|
44
|
+
elements.push(this.frameElement);
|
|
45
|
+
const repositionedElements = [];
|
|
46
|
+
for (let element of util_1.ObjectUtil.cloneDeep(this.frameContentElements)) {
|
|
47
|
+
if (this.frameElement.position.x !== 0) {
|
|
48
|
+
if (element.type === 'line') {
|
|
49
|
+
element.lineDefinition.x1 += this.frameElement.position.x;
|
|
50
|
+
element.lineDefinition.x2 += this.frameElement.position.x;
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
element.position.x += this.frameElement.position.x;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if (this.frameElement.position.y !== 0) {
|
|
57
|
+
if (element.type === 'line') {
|
|
58
|
+
element.lineDefinition.y1 += this.frameElement.position.y;
|
|
59
|
+
element.lineDefinition.y2 += this.frameElement.position.y;
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
element.position.y += this.frameElement.position.y;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
repositionedElements.push(element);
|
|
66
|
+
}
|
|
67
|
+
elements.push(...repositionedElements);
|
|
68
|
+
return elements;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.BoardFrame = BoardFrame;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./frame"), exports);
|
|
18
|
+
__exportStar(require("./frame-generator"), exports);
|
package/lib/index.d.ts
ADDED
package/lib/index.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./document-generator"), exports);
|
|
18
|
+
__exportStar(require("./board-document-generator"), exports);
|
|
19
|
+
__exportStar(require("./showcase-frame-generator"), exports);
|
|
20
|
+
__exportStar(require("./interfaces"), exports);
|
|
21
|
+
__exportStar(require("./frames"), exports);
|
|
22
|
+
__exportStar(require("./util"), exports);
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { DocumentElement, PositionDefinition, SizeDefinition } from '@contrail/documents';
|
|
2
|
+
import { FrameInfoPanelTemplate } from '../interfaces';
|
|
3
|
+
export declare class InfoPanelGenerator {
|
|
4
|
+
static generatedModelBindings(data: any): any;
|
|
5
|
+
static generatePanelFromTemplate(data: any, template: FrameInfoPanelTemplate, position: PositionDefinition, panelSize: SizeDefinition): Array<DocumentElement>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InfoPanelGenerator = void 0;
|
|
4
|
+
const documents_1 = require("@contrail/documents");
|
|
5
|
+
const document_property_util_1 = require("../util/document-property-util");
|
|
6
|
+
class InfoPanelGenerator {
|
|
7
|
+
static generatedModelBindings(data) {
|
|
8
|
+
const model = {};
|
|
9
|
+
if (data.item) {
|
|
10
|
+
model.item = `item:${data.item.id}`;
|
|
11
|
+
}
|
|
12
|
+
if (data.projectItem) {
|
|
13
|
+
model.projectItem = `project-item:${data.projectItem.id}`;
|
|
14
|
+
}
|
|
15
|
+
if (data.assortmentItem) {
|
|
16
|
+
model.assortmentItem = `assortment-item:${data.assortmentItem.id}`;
|
|
17
|
+
}
|
|
18
|
+
if (data.assortment) {
|
|
19
|
+
model.assortment = `assortment:${data.assortment.id}`;
|
|
20
|
+
}
|
|
21
|
+
return model;
|
|
22
|
+
}
|
|
23
|
+
static generatePanelFromTemplate(data, template, position, panelSize) {
|
|
24
|
+
var _a;
|
|
25
|
+
if (!template.propertyTemplate) {
|
|
26
|
+
throw Error('No panel property template defined');
|
|
27
|
+
}
|
|
28
|
+
const elements = [];
|
|
29
|
+
const panel = documents_1.DocumentElementFactory.createShapeElement('rectangle', {});
|
|
30
|
+
panel.style = ((_a = template.panelDocumentTemplate) === null || _a === void 0 ? void 0 : _a.style) || {};
|
|
31
|
+
panel.size = panelSize
|
|
32
|
+
? {
|
|
33
|
+
width: panelSize.width,
|
|
34
|
+
height: panelSize.height,
|
|
35
|
+
}
|
|
36
|
+
: {};
|
|
37
|
+
panel.position = { x: position.x, y: position.y };
|
|
38
|
+
elements.push(panel);
|
|
39
|
+
const modelBindings = this.generatedModelBindings(data);
|
|
40
|
+
const textOptions = {
|
|
41
|
+
style: {
|
|
42
|
+
text: {
|
|
43
|
+
align: template.propertyTemplate.textHorizontalAlignment,
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
size: {
|
|
47
|
+
width: panelSize.width - 10,
|
|
48
|
+
},
|
|
49
|
+
modelBindings,
|
|
50
|
+
};
|
|
51
|
+
const textElements = document_property_util_1.DocumentPropertyUtil.generatePropertyElements(data, template.propertyTemplate.properties, textOptions, { x: panel.position.x, y: panel.position.y }, {}, false);
|
|
52
|
+
elements.push(...textElements);
|
|
53
|
+
return elements;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
exports.InfoPanelGenerator = InfoPanelGenerator;
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
import { DataGroupStructure } from '@contrail/data-grouping';
|
|
2
|
+
import { PositionDefinition, SizeDefinition, Document, DocumentElement, StyleDefinition } from '@contrail/documents';
|
|
3
|
+
import { TypeProperty } from '@contrail/types';
|
|
4
|
+
export declare enum Orientation {
|
|
5
|
+
HORIZONTAL = "horizontal",
|
|
6
|
+
VERTICAL = "vertical"
|
|
7
|
+
}
|
|
8
|
+
export interface DocumentGenerationDataDefinition {
|
|
9
|
+
dataGroup: DataGroupStructure;
|
|
10
|
+
}
|
|
11
|
+
export interface DocumentGenerationOptions {
|
|
12
|
+
startingCoordinates: PositionDefinition;
|
|
13
|
+
data: DocumentGenerationDataDefinition;
|
|
14
|
+
documentTemplateDefinition: DocumentTemplate;
|
|
15
|
+
frameTemplate?: FrameDocumentTemplate;
|
|
16
|
+
}
|
|
17
|
+
export interface DocumentTemplate {
|
|
18
|
+
frameOrientation: Orientation;
|
|
19
|
+
frameSize: SizeDefinition;
|
|
20
|
+
framePadding?: number;
|
|
21
|
+
frameGroupHeaderTemplate: DocumentElement;
|
|
22
|
+
secondaryFrameGroupHeaderTemplate?: DocumentElement;
|
|
23
|
+
frameHeaderTemplate?: DocumentElement;
|
|
24
|
+
frameInfoPanelTemplate?: FrameInfoPanelTemplate;
|
|
25
|
+
componentGridTemplate: ComponentGridTemplate;
|
|
26
|
+
}
|
|
27
|
+
export interface GridSpaceDefinition {
|
|
28
|
+
size: SizeDefinition;
|
|
29
|
+
position: PositionDefinition;
|
|
30
|
+
}
|
|
31
|
+
export interface FrameDocumentTemplate {
|
|
32
|
+
id: string;
|
|
33
|
+
templateType: 'FRAME' | 'BOARD';
|
|
34
|
+
document: Document;
|
|
35
|
+
gridSpaceDefinition: GridSpaceDefinition;
|
|
36
|
+
name: string;
|
|
37
|
+
clipContent: boolean;
|
|
38
|
+
}
|
|
39
|
+
export interface FrameInfoPanelTemplate {
|
|
40
|
+
panelDocumentTemplate: DocumentElement;
|
|
41
|
+
propertyTemplate: PanelPropertyTemplate;
|
|
42
|
+
}
|
|
43
|
+
export interface PanelPropertyTemplate {
|
|
44
|
+
textHorizontalAlignment?: 'center' | 'right' | 'left';
|
|
45
|
+
properties: Array<DocumentPropertyDefinition>;
|
|
46
|
+
}
|
|
47
|
+
export interface ComponentGridTemplate {
|
|
48
|
+
componentTemplate: ComponentTemplate;
|
|
49
|
+
componentPadding?: number;
|
|
50
|
+
gridDimensions: {
|
|
51
|
+
rows: number;
|
|
52
|
+
cols: number;
|
|
53
|
+
};
|
|
54
|
+
alignment?: 'left' | 'center' | 'right';
|
|
55
|
+
}
|
|
56
|
+
export interface ComponentTemplate {
|
|
57
|
+
propertyTemplate?: ComponentPropertyTemplate;
|
|
58
|
+
}
|
|
59
|
+
export interface ComponentPropertyTemplate {
|
|
60
|
+
imageDimension?: SizeDefinition;
|
|
61
|
+
imageLocation?: 'top' | 'right' | 'left' | 'bottom';
|
|
62
|
+
textHorizontalAlignment?: 'center' | 'right' | 'left';
|
|
63
|
+
properties: Array<DocumentPropertyDefinition>;
|
|
64
|
+
}
|
|
65
|
+
export interface DocumentPropertyDefinition {
|
|
66
|
+
style?: StyleDefinition;
|
|
67
|
+
propertyDefinition: TypeProperty;
|
|
68
|
+
slug: string;
|
|
69
|
+
typeRootSlug: string;
|
|
70
|
+
includeLabel?: boolean;
|
|
71
|
+
isHidden?: boolean;
|
|
72
|
+
size?: SizeDefinition;
|
|
73
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Orientation = void 0;
|
|
4
|
+
var Orientation;
|
|
5
|
+
(function (Orientation) {
|
|
6
|
+
Orientation["HORIZONTAL"] = "horizontal";
|
|
7
|
+
Orientation["VERTICAL"] = "vertical";
|
|
8
|
+
})(Orientation = exports.Orientation || (exports.Orientation = {}));
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { DocumentGenerationOptions } from './interfaces';
|
|
2
|
+
import { DocumentFrame } from './frames/frame';
|
|
3
|
+
export declare class ShowcaseFrameGenerator {
|
|
4
|
+
constructor();
|
|
5
|
+
static generateFrames(options: DocumentGenerationOptions): Array<DocumentFrame>;
|
|
6
|
+
private static getFrameGroups;
|
|
7
|
+
private static getLeafGroupsFromGroups;
|
|
8
|
+
}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ShowcaseFrameGenerator = void 0;
|
|
4
|
+
const frame_1 = require("./frames/frame");
|
|
5
|
+
const frame_generator_1 = require("./frames/frame-generator");
|
|
6
|
+
class ShowcaseFrameGenerator {
|
|
7
|
+
constructor() { }
|
|
8
|
+
static generateFrames(options) {
|
|
9
|
+
const frames = [];
|
|
10
|
+
const structure = options.data.dataGroup;
|
|
11
|
+
const template = options.documentTemplateDefinition;
|
|
12
|
+
const frameTemplate = options.frameTemplate;
|
|
13
|
+
const groups = this.getFrameGroups(structure);
|
|
14
|
+
for (let group of groups) {
|
|
15
|
+
const showcaseFrame = frame_generator_1.FrameGenerator.generateFrameContentForGroup(new frame_1.ShowcaseFrame((group === null || group === void 0 ? void 0 : group.name) || ''), group, template, frameTemplate);
|
|
16
|
+
console.log('showcaseFrame: ', showcaseFrame);
|
|
17
|
+
frames.push(showcaseFrame);
|
|
18
|
+
}
|
|
19
|
+
return frames;
|
|
20
|
+
}
|
|
21
|
+
static getFrameGroups(groupStructure) {
|
|
22
|
+
return this.getLeafGroupsFromGroups(groupStructure.rootGroup.subGroups, groupStructure.depth, 0);
|
|
23
|
+
}
|
|
24
|
+
static getLeafGroupsFromGroups(groups, totalDepth, currentDepth, groupName = null) {
|
|
25
|
+
const currentGroupName = groupName;
|
|
26
|
+
const leafGroups = [];
|
|
27
|
+
for (let group of groups) {
|
|
28
|
+
if (currentDepth === 0) {
|
|
29
|
+
groupName = null;
|
|
30
|
+
}
|
|
31
|
+
if (currentDepth === totalDepth) {
|
|
32
|
+
group.name = !groupName ? group.name : groupName + ' / ' + group.name;
|
|
33
|
+
leafGroups.push(group);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
if (currentDepth < totalDepth - 1)
|
|
37
|
+
groupName = !currentGroupName ? group.name : currentGroupName + ' / ' + group.name;
|
|
38
|
+
leafGroups.push(...this.getLeafGroupsFromGroups(group.subGroups, totalDepth, currentDepth + 1, groupName));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return leafGroups;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
exports.ShowcaseFrameGenerator = ShowcaseFrameGenerator;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DataGroup } from '@contrail/data-grouping';
|
|
2
|
+
import { DocumentElement } from '@contrail/documents';
|
|
3
|
+
export declare class DocumentDynamicTextElementUtil {
|
|
4
|
+
static typeMap: any;
|
|
5
|
+
static propertyMapByType: any;
|
|
6
|
+
static isDynamicText(element: any): any;
|
|
7
|
+
static handleDynamicText(element: DocumentElement, dataGroup: DataGroup, frameTitle?: any): void;
|
|
8
|
+
static setTypeMap(typeMap: any): void;
|
|
9
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DocumentDynamicTextElementUtil = void 0;
|
|
4
|
+
const documents_1 = require("@contrail/documents");
|
|
5
|
+
const types_1 = require("@contrail/types");
|
|
6
|
+
const document_text_element_util_1 = require("./document-text-element-util");
|
|
7
|
+
class DocumentDynamicTextElementUtil {
|
|
8
|
+
static isDynamicText(element) {
|
|
9
|
+
return element.type === 'text' && element.propertyBindings && element.propertyBindingsMetaData;
|
|
10
|
+
}
|
|
11
|
+
static handleDynamicText(element, dataGroup, frameTitle = null) {
|
|
12
|
+
var _a, _b, _c;
|
|
13
|
+
const propertyBindingsText = element.propertyBindings.text;
|
|
14
|
+
let propertyLevel = (_a = element.propertyBindingsMetaData) === null || _a === void 0 ? void 0 : _a.propertyLevel;
|
|
15
|
+
let property = null;
|
|
16
|
+
let componentModels = dataGroup.data;
|
|
17
|
+
const frame = {
|
|
18
|
+
name: frameTitle || dataGroup.name,
|
|
19
|
+
};
|
|
20
|
+
if (propertyBindingsText) {
|
|
21
|
+
const [entityType, propertySlug] = propertyBindingsText === null || propertyBindingsText === void 0 ? void 0 : propertyBindingsText.split('.');
|
|
22
|
+
property = (_b = this.propertyMapByType[entityType]) === null || _b === void 0 ? void 0 : _b.properties[propertySlug];
|
|
23
|
+
if (!propertyLevel &&
|
|
24
|
+
(property === null || property === void 0 ? void 0 : property.propertyLevel) &&
|
|
25
|
+
[types_1.PropertyLevel.OPTION, types_1.PropertyLevel.FAMILY].includes(property.propertyLevel)) {
|
|
26
|
+
propertyLevel = property.propertyLevel;
|
|
27
|
+
}
|
|
28
|
+
if (propertyLevel && propertyLevel === types_1.PropertyLevel.FAMILY) {
|
|
29
|
+
componentModels = JSON.parse(JSON.stringify(dataGroup.data));
|
|
30
|
+
componentModels.forEach((componentModel) => {
|
|
31
|
+
var _a;
|
|
32
|
+
const entity = componentModel[entityType];
|
|
33
|
+
const isOption = (_a = entity === null || entity === void 0 ? void 0 : entity.roles) === null || _a === void 0 ? void 0 : _a.includes('option');
|
|
34
|
+
if (isOption && entityType === 'item' && entity.itemFamily) {
|
|
35
|
+
componentModel[entityType] = entity.itemFamily;
|
|
36
|
+
}
|
|
37
|
+
if (isOption && entityType === 'project-item' && entity.familyProjectItem) {
|
|
38
|
+
componentModel[entityType] = entity.familyProjectItem;
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
let text = documents_1.DynamicTextUtil.getDynamicTextValue(element, property, propertyLevel, frame, componentModels);
|
|
44
|
+
if (((_c = element.text) === null || _c === void 0 ? void 0 : _c.toString().indexOf('</')) > -1) {
|
|
45
|
+
const styleDefinition = document_text_element_util_1.DocumentTextElementUtil.extractStyleFromInline(element.text);
|
|
46
|
+
text = document_text_element_util_1.DocumentTextElementUtil.applyInLineStyling(text, styleDefinition);
|
|
47
|
+
}
|
|
48
|
+
element.text = text;
|
|
49
|
+
}
|
|
50
|
+
static setTypeMap(typeMap) {
|
|
51
|
+
DocumentDynamicTextElementUtil.typeMap = typeMap;
|
|
52
|
+
Object.keys(DocumentDynamicTextElementUtil.typeMap).forEach((type) => {
|
|
53
|
+
DocumentDynamicTextElementUtil.propertyMapByType[type] = { properties: {} };
|
|
54
|
+
typeMap[type].typeProperties.forEach((p) => {
|
|
55
|
+
DocumentDynamicTextElementUtil.propertyMapByType[type].properties[p.slug] = p;
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
exports.DocumentDynamicTextElementUtil = DocumentDynamicTextElementUtil;
|
|
61
|
+
DocumentDynamicTextElementUtil.propertyMapByType = {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { DocumentPropertyDefinition } from '../interfaces';
|
|
2
|
+
import { DocumentElement, PositionDefinition, SizeDefinition } from '@contrail/documents';
|
|
3
|
+
import { PropertyValueFormatter } from '@contrail/types';
|
|
4
|
+
export declare class DocumentPropertyUtil {
|
|
5
|
+
static generatePropertyElements(data: any, properties: Array<DocumentPropertyDefinition>, options: DocumentElement, startingPosition: PositionDefinition, imageDimension: SizeDefinition, isComponent?: boolean): Array<DocumentElement>;
|
|
6
|
+
static generatePropertyTextElement(model: any, property: DocumentPropertyDefinition, options: DocumentElement, formatter: PropertyValueFormatter, position: PositionDefinition, isComponent?: boolean): DocumentElement;
|
|
7
|
+
static generatePropertyAnnotationElement(data: any, property: DocumentPropertyDefinition, size: SizeDefinition, position: PositionDefinition): DocumentElement;
|
|
8
|
+
static generatePropertyImageElement(data: any, property: DocumentPropertyDefinition, imageDimension: SizeDefinition, position: PositionDefinition): DocumentElement;
|
|
9
|
+
}
|