@contrail/document-generation 1.0.31 → 1.0.32

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/README.md CHANGED
@@ -1,2 +1,2 @@
1
- Library for use with @contrail/documents that allows for the quick/automation generation of
1
+ Library for use with @contrail/documents that allows for the quick/automation generation of
2
2
  documents based on templates and layout options.
@@ -1,11 +1,11 @@
1
- import { DocumentElement } from "@contrail/documents";
2
- import { ComponentPropertyTemplate, ComponentTemplate } from "../interfaces";
3
- export declare class ComponentGenerator {
4
- static generateComponent(data: any, options: DocumentElement, template: ComponentTemplate): any;
5
- static generatedModelBindings(data: any): {
6
- item: string;
7
- projectItem: string;
8
- viewable: string;
9
- };
10
- static generateComponentFromPropertyTemplate(data: any, options: DocumentElement, template: ComponentPropertyTemplate): DocumentElement;
11
- }
1
+ import { DocumentElement } from "@contrail/documents";
2
+ import { ComponentPropertyTemplate, ComponentTemplate } from "../interfaces";
3
+ export declare class ComponentGenerator {
4
+ static generateComponent(data: any, options: DocumentElement, template: ComponentTemplate): any;
5
+ static generatedModelBindings(data: any): {
6
+ item: string;
7
+ projectItem: string;
8
+ viewable: string;
9
+ };
10
+ static generateComponentFromPropertyTemplate(data: any, options: DocumentElement, template: ComponentPropertyTemplate): DocumentElement;
11
+ }
@@ -1,67 +1,67 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ComponentGenerator = void 0;
4
- const documents_1 = require("@contrail/documents");
5
- const nanoid_1 = require("nanoid");
6
- const util_1 = require("@contrail/util");
7
- const document_property_util_1 = require("../util/document-property-util");
8
- class ComponentGenerator {
9
- static generateComponent(data, options, template) {
10
- let component;
11
- if (template.propertyTemplate) {
12
- component = this.generateComponentFromPropertyTemplate(data, options, template.propertyTemplate);
13
- }
14
- else {
15
- throw Error("No component property template defined");
16
- }
17
- return component;
18
- }
19
- static generatedModelBindings(data) {
20
- return {
21
- item: `item:${data.item.id}`,
22
- projectItem: `project-item:${data.projectItem.id}`,
23
- viewable: `item:${data.item.id}`,
24
- };
25
- }
26
- static generateComponentFromPropertyTemplate(data, options, template) {
27
- var _a;
28
- let componentElement = documents_1.DocumentElementFactory.initNewElement('component');
29
- if (options) {
30
- componentElement = Object.assign(componentElement, options);
31
- }
32
- let yPosition = 0;
33
- const imageDimension = template.imageDimension || {};
34
- const imageHeight = imageDimension.height || imageDimension.width || 125;
35
- const imageWidth = imageDimension.width || 125;
36
- const imageUrl = util_1.ObjectUtil.getByPath(data, `viewable.mediumViewableDownloadUrl`);
37
- const elements = [{
38
- type: "image",
39
- size: { width: imageWidth, height: imageHeight },
40
- propertyBindings: { url: 'viewable.mediumViewableDownloadUrl' },
41
- url: imageUrl,
42
- }];
43
- yPosition += imageHeight;
44
- const textOptions = {
45
- style: {
46
- text: {
47
- align: template.textHorizontalAlignment
48
- }
49
- },
50
- size: {
51
- width: imageWidth
52
- }
53
- };
54
- elements.push(...document_property_util_1.DocumentPropertyUtil.generatePropertyTextElements(data, template.properties, textOptions, { y: yPosition }, true));
55
- const modelBindings = this.generatedModelBindings(data);
56
- componentElement.elements = elements;
57
- componentElement.modelBindings = modelBindings;
58
- if (((_a = componentElement === null || componentElement === void 0 ? void 0 : componentElement.elements) === null || _a === void 0 ? void 0 : _a.length) > 0) {
59
- componentElement.elements = componentElement.elements.map((e) => {
60
- e.id = (0, nanoid_1.nanoid)(16);
61
- return e;
62
- });
63
- }
64
- return componentElement;
65
- }
66
- }
67
- exports.ComponentGenerator = ComponentGenerator;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentGenerator = void 0;
4
+ const documents_1 = require("@contrail/documents");
5
+ const nanoid_1 = require("nanoid");
6
+ const util_1 = require("@contrail/util");
7
+ const document_property_util_1 = require("../util/document-property-util");
8
+ class ComponentGenerator {
9
+ static generateComponent(data, options, template) {
10
+ let component;
11
+ if (template.propertyTemplate) {
12
+ component = this.generateComponentFromPropertyTemplate(data, options, template.propertyTemplate);
13
+ }
14
+ else {
15
+ throw Error("No component property template defined");
16
+ }
17
+ return component;
18
+ }
19
+ static generatedModelBindings(data) {
20
+ return {
21
+ item: `item:${data.item.id}`,
22
+ projectItem: `project-item:${data.projectItem.id}`,
23
+ viewable: `item:${data.item.id}`,
24
+ };
25
+ }
26
+ static generateComponentFromPropertyTemplate(data, options, template) {
27
+ var _a;
28
+ let componentElement = documents_1.DocumentElementFactory.initNewElement('component');
29
+ if (options) {
30
+ componentElement = Object.assign(componentElement, options);
31
+ }
32
+ let yPosition = 0;
33
+ const imageDimension = template.imageDimension || {};
34
+ const imageHeight = imageDimension.height || imageDimension.width || 125;
35
+ const imageWidth = imageDimension.width || 125;
36
+ const imageUrl = util_1.ObjectUtil.getByPath(data, `viewable.mediumViewableDownloadUrl`);
37
+ const elements = [{
38
+ type: "image",
39
+ size: { width: imageWidth, height: imageHeight },
40
+ propertyBindings: { url: 'viewable.mediumViewableDownloadUrl' },
41
+ url: imageUrl,
42
+ }];
43
+ yPosition += imageHeight;
44
+ const textOptions = {
45
+ style: {
46
+ text: {
47
+ align: template.textHorizontalAlignment
48
+ }
49
+ },
50
+ size: {
51
+ width: imageWidth
52
+ }
53
+ };
54
+ elements.push(...document_property_util_1.DocumentPropertyUtil.generatePropertyTextElements(data, template.properties, textOptions, { y: yPosition }, true));
55
+ const modelBindings = this.generatedModelBindings(data);
56
+ componentElement.elements = elements;
57
+ componentElement.modelBindings = modelBindings;
58
+ if (((_a = componentElement === null || componentElement === void 0 ? void 0 : componentElement.elements) === null || _a === void 0 ? void 0 : _a.length) > 0) {
59
+ componentElement.elements = componentElement.elements.map((e) => {
60
+ e.id = (0, nanoid_1.nanoid)(16);
61
+ return e;
62
+ });
63
+ }
64
+ return componentElement;
65
+ }
66
+ }
67
+ exports.ComponentGenerator = ComponentGenerator;
@@ -1,7 +1,7 @@
1
- import { DocumentElement, PositionDefinition, SizeDefinition } from "@contrail/documents";
2
- import { ComponentGridTemplate } from "../interfaces";
3
- export declare class ComponentGridGenerator {
4
- static generateComponentGrid(data: any, startingPosition: PositionDefinition, template: ComponentGridTemplate, idealSize: SizeDefinition): Array<DocumentElement>;
5
- private static getComponentSize;
6
- private static adjustComponentTemplate;
7
- }
1
+ import { DocumentElement, PositionDefinition, SizeDefinition } from "@contrail/documents";
2
+ import { ComponentGridTemplate } from "../interfaces";
3
+ export declare class ComponentGridGenerator {
4
+ static generateComponentGrid(data: any, startingPosition: PositionDefinition, template: ComponentGridTemplate, idealSize: SizeDefinition): Array<DocumentElement>;
5
+ private static getComponentSize;
6
+ private static adjustComponentTemplate;
7
+ }
@@ -1,81 +1,81 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ComponentGridGenerator = void 0;
4
- const util_1 = require("@contrail/util");
5
- const component_generator_1 = require("./component-generator");
6
- const component_util_1 = require("./component-util");
7
- class ComponentGridGenerator {
8
- static generateComponentGrid(data, startingPosition = { x: 0, y: 0 }, template, idealSize) {
9
- if (!data) {
10
- console.warn("WARN: data null in generateComponentGrid");
11
- return [];
12
- }
13
- if (!template) {
14
- console.warn("WARN: template null in generateComponentGrid");
15
- return [];
16
- }
17
- if (!template.componentTemplate) {
18
- console.warn("WARN: component template is null generateComponentGrid");
19
- return [];
20
- }
21
- const elements = [];
22
- let dataIndex = 0;
23
- console.log("generateComponentGrid: idealSize: ", idealSize);
24
- let gridTemplate = template;
25
- const optimizeTemplate = true;
26
- if (optimizeTemplate) {
27
- gridTemplate = this.adjustComponentTemplate(data, idealSize, template);
28
- }
29
- const componentTemplate = gridTemplate.componentTemplate;
30
- const componentPosition = util_1.ObjectUtil.cloneDeep(startingPosition);
31
- const componentSize = this.getComponentSize(data, gridTemplate);
32
- const componentPadding = gridTemplate.componentPadding || 20;
33
- componentPosition.x += componentPadding;
34
- componentPosition.y += componentPadding;
35
- for (let row = 0; row < gridTemplate.gridDimensions.rows; row++) {
36
- for (let col = 0; col < gridTemplate.gridDimensions.cols; col++) {
37
- if (dataIndex >= data.length) {
38
- continue;
39
- }
40
- let dataObj = data[dataIndex];
41
- dataObj.viewable = dataObj.item;
42
- const position = util_1.ObjectUtil.cloneDeep(componentPosition);
43
- let component = component_generator_1.ComponentGenerator.generateComponent(dataObj, { position }, componentTemplate);
44
- elements.push(component);
45
- dataIndex++;
46
- componentPosition.x += componentSize.width + (componentPadding * 2);
47
- }
48
- componentPosition.y += componentSize.height + (componentPadding * 2);
49
- componentPosition.x = startingPosition.x + componentPadding;
50
- }
51
- return elements;
52
- }
53
- static getComponentSize(data, template) {
54
- if (!(data === null || data === void 0 ? void 0 : data.length)) {
55
- return null;
56
- }
57
- const firstData = data[0];
58
- const element = component_generator_1.ComponentGenerator.generateComponent(firstData, {}, template.componentTemplate);
59
- return component_util_1.ComponentUtil.getComponentSize(element);
60
- }
61
- static adjustComponentTemplate(data, idealSize, template) {
62
- const componentSize = this.getComponentSize(data, template);
63
- const adjustedTemplate = util_1.ObjectUtil.cloneDeep(template);
64
- const horizontalPadding = ((template.gridDimensions.cols * 2) * template.componentPadding || 20);
65
- const verticalPadding = ((template.gridDimensions.rows * 2) * template.componentPadding || 20);
66
- const requiredSize = {
67
- width: componentSize.width * template.gridDimensions.cols + horizontalPadding,
68
- height: componentSize.height * template.gridDimensions.rows + verticalPadding,
69
- };
70
- const requiredHeightAdjustment = (idealSize.height - requiredSize.height) / template.gridDimensions.rows;
71
- const requiredWidthAdjustment = (idealSize.width - requiredSize.width) / template.gridDimensions.cols;
72
- if (requiredHeightAdjustment < 0 && requiredHeightAdjustment < requiredWidthAdjustment) {
73
- adjustedTemplate.componentTemplate.propertyTemplate.imageDimension.width += requiredHeightAdjustment;
74
- }
75
- if (requiredWidthAdjustment < 0 && requiredWidthAdjustment < requiredHeightAdjustment) {
76
- adjustedTemplate.componentTemplate.propertyTemplate.imageDimension.width += requiredWidthAdjustment;
77
- }
78
- return adjustedTemplate;
79
- }
80
- }
81
- exports.ComponentGridGenerator = ComponentGridGenerator;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentGridGenerator = void 0;
4
+ const util_1 = require("@contrail/util");
5
+ const component_generator_1 = require("./component-generator");
6
+ const component_util_1 = require("./component-util");
7
+ class ComponentGridGenerator {
8
+ static generateComponentGrid(data, startingPosition = { x: 0, y: 0 }, template, idealSize) {
9
+ if (!data) {
10
+ console.warn("WARN: data null in generateComponentGrid");
11
+ return [];
12
+ }
13
+ if (!template) {
14
+ console.warn("WARN: template null in generateComponentGrid");
15
+ return [];
16
+ }
17
+ if (!template.componentTemplate) {
18
+ console.warn("WARN: component template is null generateComponentGrid");
19
+ return [];
20
+ }
21
+ const elements = [];
22
+ let dataIndex = 0;
23
+ console.log("generateComponentGrid: idealSize: ", idealSize);
24
+ let gridTemplate = template;
25
+ const optimizeTemplate = true;
26
+ if (optimizeTemplate) {
27
+ gridTemplate = this.adjustComponentTemplate(data, idealSize, template);
28
+ }
29
+ const componentTemplate = gridTemplate.componentTemplate;
30
+ const componentPosition = util_1.ObjectUtil.cloneDeep(startingPosition);
31
+ const componentSize = this.getComponentSize(data, gridTemplate);
32
+ const componentPadding = gridTemplate.componentPadding || 20;
33
+ componentPosition.x += componentPadding;
34
+ componentPosition.y += componentPadding;
35
+ for (let row = 0; row < gridTemplate.gridDimensions.rows; row++) {
36
+ for (let col = 0; col < gridTemplate.gridDimensions.cols; col++) {
37
+ if (dataIndex >= data.length) {
38
+ continue;
39
+ }
40
+ let dataObj = data[dataIndex];
41
+ dataObj.viewable = dataObj.item;
42
+ const position = util_1.ObjectUtil.cloneDeep(componentPosition);
43
+ let component = component_generator_1.ComponentGenerator.generateComponent(dataObj, { position }, componentTemplate);
44
+ elements.push(component);
45
+ dataIndex++;
46
+ componentPosition.x += componentSize.width + (componentPadding * 2);
47
+ }
48
+ componentPosition.y += componentSize.height + (componentPadding * 2);
49
+ componentPosition.x = startingPosition.x + componentPadding;
50
+ }
51
+ return elements;
52
+ }
53
+ static getComponentSize(data, template) {
54
+ if (!(data === null || data === void 0 ? void 0 : data.length)) {
55
+ return null;
56
+ }
57
+ const firstData = data[0];
58
+ const element = component_generator_1.ComponentGenerator.generateComponent(firstData, {}, template.componentTemplate);
59
+ return component_util_1.ComponentUtil.getComponentSize(element);
60
+ }
61
+ static adjustComponentTemplate(data, idealSize, template) {
62
+ const componentSize = this.getComponentSize(data, template);
63
+ const adjustedTemplate = util_1.ObjectUtil.cloneDeep(template);
64
+ const horizontalPadding = ((template.gridDimensions.cols * 2) * template.componentPadding || 20);
65
+ const verticalPadding = ((template.gridDimensions.rows * 2) * template.componentPadding || 20);
66
+ const requiredSize = {
67
+ width: componentSize.width * template.gridDimensions.cols + horizontalPadding,
68
+ height: componentSize.height * template.gridDimensions.rows + verticalPadding,
69
+ };
70
+ const requiredHeightAdjustment = (idealSize.height - requiredSize.height) / template.gridDimensions.rows;
71
+ const requiredWidthAdjustment = (idealSize.width - requiredSize.width) / template.gridDimensions.cols;
72
+ if (requiredHeightAdjustment < 0 && requiredHeightAdjustment < requiredWidthAdjustment) {
73
+ adjustedTemplate.componentTemplate.propertyTemplate.imageDimension.width += requiredHeightAdjustment;
74
+ }
75
+ if (requiredWidthAdjustment < 0 && requiredWidthAdjustment < requiredHeightAdjustment) {
76
+ adjustedTemplate.componentTemplate.propertyTemplate.imageDimension.width += requiredWidthAdjustment;
77
+ }
78
+ return adjustedTemplate;
79
+ }
80
+ }
81
+ exports.ComponentGridGenerator = ComponentGridGenerator;
@@ -1,4 +1,4 @@
1
- import { DocumentElement, SizeDefinition } from "@contrail/documents";
2
- export declare class ComponentUtil {
3
- static getComponentSize(element: DocumentElement): SizeDefinition;
4
- }
1
+ import { DocumentElement, SizeDefinition } from "@contrail/documents";
2
+ export declare class ComponentUtil {
3
+ static getComponentSize(element: DocumentElement): SizeDefinition;
4
+ }
@@ -1,26 +1,26 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ComponentUtil = void 0;
4
- class ComponentUtil {
5
- static getComponentSize(element) {
6
- var _a, _b, _c, _d, _e;
7
- const sizeDefinition = {
8
- width: 0,
9
- height: 0,
10
- };
11
- const imageElement = ((_a = element.elements) === null || _a === void 0 ? void 0 : _a.find(el => el.type === 'image')) || {};
12
- sizeDefinition.width = (_b = imageElement.size) === null || _b === void 0 ? void 0 : _b.width;
13
- const LINE_PADDING = 8;
14
- const textElements = (_c = element.elements) === null || _c === void 0 ? void 0 : _c.filter(el => el.type === 'text');
15
- let textHeight = 0;
16
- textElements.forEach(el => {
17
- var _a, _b;
18
- let fontSize = ((_b = (_a = el.style) === null || _a === void 0 ? void 0 : _a.font) === null || _b === void 0 ? void 0 : _b.size) || 12;
19
- textHeight += fontSize + LINE_PADDING;
20
- });
21
- const imageHeight = (((_d = imageElement.size) === null || _d === void 0 ? void 0 : _d.height) || ((_e = imageElement.size) === null || _e === void 0 ? void 0 : _e.width) || 150);
22
- sizeDefinition.height = imageHeight + textHeight;
23
- return sizeDefinition;
24
- }
25
- }
26
- exports.ComponentUtil = ComponentUtil;
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ComponentUtil = void 0;
4
+ class ComponentUtil {
5
+ static getComponentSize(element) {
6
+ var _a, _b, _c, _d, _e;
7
+ const sizeDefinition = {
8
+ width: 0,
9
+ height: 0,
10
+ };
11
+ const imageElement = ((_a = element.elements) === null || _a === void 0 ? void 0 : _a.find(el => el.type === 'image')) || {};
12
+ sizeDefinition.width = (_b = imageElement.size) === null || _b === void 0 ? void 0 : _b.width;
13
+ const LINE_PADDING = 8;
14
+ const textElements = (_c = element.elements) === null || _c === void 0 ? void 0 : _c.filter(el => el.type === 'text');
15
+ let textHeight = 0;
16
+ textElements.forEach(el => {
17
+ var _a, _b;
18
+ let fontSize = ((_b = (_a = el.style) === null || _a === void 0 ? void 0 : _a.font) === null || _b === void 0 ? void 0 : _b.size) || 12;
19
+ textHeight += fontSize + LINE_PADDING;
20
+ });
21
+ const imageHeight = (((_d = imageElement.size) === null || _d === void 0 ? void 0 : _d.height) || ((_e = imageElement.size) === null || _e === void 0 ? void 0 : _e.width) || 150);
22
+ sizeDefinition.height = imageHeight + textHeight;
23
+ return sizeDefinition;
24
+ }
25
+ }
26
+ exports.ComponentUtil = ComponentUtil;
@@ -1,11 +1,11 @@
1
- import { DocumentElement, PositionDefinition } from "@contrail/documents";
2
- import { DocumentGenerationOptions, DocumentTemplate } from "./interfaces";
3
- import { DataGroup } from "@contrail/data-grouping";
4
- export declare class DocumentGenerator {
5
- constructor();
6
- static generateDocumentElements(options: DocumentGenerationOptions): Array<DocumentElement>;
7
- static generateGroup(group: DataGroup, template: any, startingPosition: any, totalDepth: any, currentDepth: any): any[];
8
- static getGroupSpan(group: DataGroup, totalDepth: any, currentDepth: any): number;
9
- static generateFrameGroup(dataGroup: DataGroup, template: DocumentTemplate, position: PositionDefinition): Array<DocumentElement>;
10
- static generateGroupHeading(dataGroup: DataGroup, template: DocumentTemplate, position: PositionDefinition, span: any): any[];
11
- }
1
+ import { DocumentElement, PositionDefinition } from "@contrail/documents";
2
+ import { DocumentGenerationOptions, DocumentTemplate } from "./interfaces";
3
+ import { DataGroup } from "@contrail/data-grouping";
4
+ export declare class DocumentGenerator {
5
+ constructor();
6
+ static generateDocumentElements(options: DocumentGenerationOptions): Array<DocumentElement>;
7
+ static generateGroup(group: DataGroup, template: any, startingPosition: any, totalDepth: any, currentDepth: any): any[];
8
+ static getGroupSpan(group: DataGroup, totalDepth: any, currentDepth: any): number;
9
+ static generateFrameGroup(dataGroup: DataGroup, template: DocumentTemplate, position: PositionDefinition): Array<DocumentElement>;
10
+ static generateGroupHeading(dataGroup: DataGroup, template: DocumentTemplate, position: PositionDefinition, span: any): any[];
11
+ }