@contrail/document-generation
Advanced tools
Comparing version 1.0.10 to 1.0.11
import { DocumentElement } from "@contrail/documents"; | ||
import { ComponentPropertyDefinition, ComponentPropertyTemplate, ComponentTemplate } from "../interfaces"; | ||
import { PropertyValueFormatter } from "@contrail/types"; | ||
import { ComponentPropertyTemplate, ComponentTemplate } from "../interfaces"; | ||
export declare class ComponentGenerator { | ||
@@ -12,4 +11,2 @@ static generateComponent(data: any, options: DocumentElement, template: ComponentTemplate): any; | ||
static generateComponentFromPropertyTemplate(data: any, options: DocumentElement, template: ComponentPropertyTemplate): DocumentElement; | ||
static generatePropertyTextElements(data: any, properties: Array<ComponentPropertyDefinition>, options: DocumentElement, yPosition: number): Array<DocumentElement>; | ||
static generatePropertyTextElement(data: any, property: ComponentPropertyDefinition, options: DocumentElement, formatter: PropertyValueFormatter, yPosition: number): DocumentElement; | ||
} |
@@ -6,4 +6,4 @@ "use strict"; | ||
const nanoid_1 = require("nanoid"); | ||
const types_1 = require("@contrail/types"); | ||
const util_1 = require("@contrail/util"); | ||
const document_property_util_1 = require("../util/document-property-util"); | ||
class ComponentGenerator { | ||
@@ -55,3 +55,3 @@ static generateComponent(data, options, template) { | ||
}; | ||
elements.push(...this.generatePropertyTextElements(data, template.properties, textOptions, yPosition)); | ||
elements.push(...document_property_util_1.DocumentPropertyUtil.generatePropertyTextElements(data, template.properties, textOptions, { y: yPosition }, true)); | ||
const modelBindings = this.generatedModelBindings(data); | ||
@@ -68,37 +68,3 @@ componentElement.elements = elements; | ||
} | ||
static generatePropertyTextElements(data, properties, options, yPosition) { | ||
const elements = []; | ||
const formatter = new types_1.PropertyValueFormatter(); | ||
for (let property of properties) { | ||
let element = this.generatePropertyTextElement(data, property, options, formatter, yPosition); | ||
elements.push(element); | ||
} | ||
return elements; | ||
} | ||
static generatePropertyTextElement(data, property, options, formatter, yPosition) { | ||
var _a, _b, _c; | ||
const key = `${util_1.StringUtil.convertToCamelCase(property.typeRootSlug)}.${property.propertyDefinition.slug}`; | ||
let style = property.style || { | ||
font: { | ||
size: 8, | ||
}, | ||
color: 'rgba(0,0,0,.5)', | ||
}; | ||
if ((_a = options === null || options === void 0 ? void 0 : options.style) === null || _a === void 0 ? void 0 : _a.text) { | ||
style.text = options.style.text; | ||
} | ||
let element = Object.assign({ | ||
label: property.includeLabel ? (_b = property.propertyDefinition) === null || _b === void 0 ? void 0 : _b.label : null, | ||
type: "text", | ||
position: { x: 0, y: yPosition }, | ||
size: { height: 25, width: ((_c = options === null || options === void 0 ? void 0 : options.size) === null || _c === void 0 ? void 0 : _c.width) || 125 }, | ||
style, | ||
propertyBindings: { text: key } | ||
}); | ||
const value = util_1.ObjectUtil.getByPath(data, key); | ||
const display = formatter.formatValueForProperty(value, property.propertyDefinition); | ||
element.text = display; | ||
return element; | ||
} | ||
} | ||
exports.ComponentGenerator = ComponentGenerator; |
@@ -72,3 +72,2 @@ "use strict"; | ||
const requiredWidthAdjustment = (idealSize.width - requiredSize.width) / template.gridDimensions.cols; | ||
console.log("requiredHeightAdjustment: ", requiredHeightAdjustment, " requiredWidthAdjustment: ", requiredWidthAdjustment); | ||
if (requiredHeightAdjustment < 0 && requiredHeightAdjustment < requiredWidthAdjustment) { | ||
@@ -75,0 +74,0 @@ adjustedTemplate.componentTemplate.propertyTemplate.imageDimension.width += requiredHeightAdjustment; |
@@ -7,3 +7,4 @@ import { DocumentElement, PositionDefinition, SizeDefinition } from "@contrail/documents"; | ||
static generateFrameHeaderForDataGroup(dataGroup: DataGroup, position: PositionDefinition, template: DocumentTemplate, headerSize: SizeDefinition): DocumentElement[]; | ||
static generateFrameInfoPanelForDataGroup(dataGroup: DataGroup, position: PositionDefinition, template: DocumentTemplate, panelSize: SizeDefinition): DocumentElement[]; | ||
static generateFrame(options: DocumentElement): DocumentElement; | ||
} |
@@ -8,4 +8,6 @@ "use strict"; | ||
const document_util_1 = require("./util/document-util"); | ||
const info_panel_generator_1 = require("./info-panel/info-panel-generator"); | ||
class FrameGenerator { | ||
static generateFrameForDataGroup(dataGroup, framePosition, template) { | ||
var _a, _b; | ||
const elements = []; | ||
@@ -22,6 +24,31 @@ const frame = this.generateFrame({ | ||
headerPosition.x = headerPosition.x + FRAME_PADDING; | ||
const frameHeaderDimensions = { height: 50, width: template.frameSize.width - 50 }; | ||
const HEADER_MARGIN = 20; | ||
const gridPosition = util_1.ObjectUtil.cloneDeep(headerPosition); | ||
gridPosition.y = gridPosition.y + frameHeaderDimensions.height + HEADER_MARGIN; | ||
const panelPosition = util_1.ObjectUtil.cloneDeep(framePosition); | ||
panelPosition.y = panelPosition.y + FRAME_PADDING; | ||
panelPosition.x = panelPosition.x + FRAME_PADDING; | ||
let frameHeaderDimensions = { height: 0, width: 0 }; | ||
let framePanelDimensions = { height: 0, width: 0 }; | ||
let hasPanel = false; | ||
let hasHeader = false; | ||
elements.push(util_1.ObjectUtil.cloneDeep(frame)); | ||
if (template.frameHeaderTemplate) { | ||
hasHeader = true; | ||
frameHeaderDimensions = { height: 50, width: template.frameSize.width - 50 }; | ||
elements.push(...this.generateFrameHeaderForDataGroup(dataGroup, headerPosition, template, frameHeaderDimensions)); | ||
} | ||
if (template.frameInfoPanelTemplate) { | ||
hasPanel = true; | ||
framePanelDimensions = { width: ((_b = (_a = template.frameInfoPanelTemplate.panelDocumentTemplate) === null || _a === void 0 ? void 0 : _a.size) === null || _b === void 0 ? void 0 : _b.width) || 300 }; | ||
framePanelDimensions.height = template.frameSize.height - (2 * FRAME_PADDING); | ||
elements.push(...this.generateFrameInfoPanelForDataGroup(dataGroup, panelPosition, template, framePanelDimensions)); | ||
} | ||
const GRID_MARGIN = 20; | ||
let gridPosition = util_1.ObjectUtil.cloneDeep(framePosition); | ||
if (hasHeader) { | ||
gridPosition = util_1.ObjectUtil.cloneDeep(headerPosition); | ||
gridPosition.y = gridPosition.y + frameHeaderDimensions.height + GRID_MARGIN; | ||
} | ||
if (hasPanel) { | ||
gridPosition = util_1.ObjectUtil.cloneDeep(panelPosition); | ||
gridPosition.x = gridPosition.x + framePanelDimensions.width + GRID_MARGIN; | ||
} | ||
const relativeGridPosition = document_util_1.DocumentUtil.getRelativePosition(framePosition, gridPosition); | ||
@@ -33,4 +60,2 @@ const frameSize = template.frameSize; | ||
}; | ||
elements.push(util_1.ObjectUtil.cloneDeep(frame)); | ||
elements.push(...this.generateFrameHeaderForDataGroup(dataGroup, headerPosition, template, frameHeaderDimensions)); | ||
elements.push(...component_grid_generator_1.ComponentGridGenerator.generateComponentGrid(dataGroup.data, gridPosition, template.componentGridTemplate, idealGridSize)); | ||
@@ -47,2 +72,5 @@ return elements; | ||
} | ||
static generateFrameInfoPanelForDataGroup(dataGroup, position, template, panelSize) { | ||
return info_panel_generator_1.InfoPanelGenerator.generatePanelFromTemplate(dataGroup.propertyValues, template.frameInfoPanelTemplate, position, panelSize); | ||
} | ||
static generateFrame(options) { | ||
@@ -49,0 +77,0 @@ const frame = documents_1.DocumentElementFactory.createFrameElement(options); |
@@ -21,5 +21,14 @@ import { DataGroupStructure } from "@contrail/data-grouping"; | ||
frameGroupHeaderTemplate: DocumentElement; | ||
frameHeaderTemplate: DocumentElement; | ||
frameHeaderTemplate?: DocumentElement; | ||
frameInfoPanelTemplate?: FrameInfoPanelTemplate; | ||
componentGridTemplate: ComponentGridTemplate; | ||
} | ||
export interface FrameInfoPanelTemplate { | ||
panelDocumentTemplate: DocumentElement; | ||
propertyTemplate: PanelPropertyTemplate; | ||
} | ||
export interface PanelPropertyTemplate { | ||
textHorizontalAlignment?: 'center' | 'right' | 'left'; | ||
properties: Array<DocumentPropertyDefinition>; | ||
} | ||
export interface ComponentGridTemplate { | ||
@@ -40,5 +49,5 @@ componentTemplate: ComponentTemplate; | ||
textHorizontalAlignment?: 'center' | 'right' | 'left'; | ||
properties: Array<ComponentPropertyDefinition>; | ||
properties: Array<DocumentPropertyDefinition>; | ||
} | ||
export interface ComponentPropertyDefinition { | ||
export interface DocumentPropertyDefinition { | ||
style?: StyleDefinition; | ||
@@ -45,0 +54,0 @@ propertyDefinition: TypeProperty; |
@@ -20,3 +20,2 @@ "use strict"; | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const generator = new document_generator_1.DocumentGenerator(); | ||
const orgSlug = 'converse-prod'; | ||
@@ -67,17 +66,61 @@ yield loginSDK(orgSlug); | ||
slug: "baseStyleNumber", | ||
}] | ||
}; | ||
const PANEL_PROPERTY_TEMPLATE = { | ||
properties: [{ | ||
propertyDefinition: itemType.typeProperties.find(p => p.slug === 'name'), | ||
typeRootSlug: 'item', | ||
slug: "name", | ||
includeLabel: false, | ||
style: { | ||
font: { | ||
size: 25, | ||
weight: 'bold' | ||
}, | ||
color: 'white', | ||
} | ||
}, { | ||
propertyDefinition: itemType.typeProperties.find(p => p.slug === 'closureType'), | ||
propertyDefinition: itemType.typeProperties.find(p => p.slug === 'segment'), | ||
typeRootSlug: 'item', | ||
slug: "closureType", | ||
slug: "segment", | ||
includeLabel: true, | ||
style: { | ||
font: { | ||
size: 14, | ||
}, | ||
color: 'white', | ||
} | ||
}, { | ||
propertyDefinition: itemType.typeProperties.find(p => p.slug === 'colorFamily'), | ||
propertyDefinition: itemType.typeProperties.find(p => p.slug === 'familyName'), | ||
typeRootSlug: 'item', | ||
slug: "colorFamily", | ||
slug: "familyName", | ||
includeLabel: true, | ||
style: { | ||
font: { | ||
size: 14, | ||
}, | ||
color: 'white', | ||
} | ||
}, { | ||
propertyDefinition: projectItemType.typeProperties.find(p => p.slug === 'colorwayStatus'), | ||
slug: "colorwayStatus", | ||
typeRootSlug: 'project-item', | ||
propertyDefinition: itemType.typeProperties.find(p => p.slug === 'ageGroup'), | ||
typeRootSlug: 'item', | ||
slug: "ageGroup", | ||
includeLabel: true, | ||
style: { | ||
font: { | ||
size: 14, | ||
}, | ||
color: 'white', | ||
} | ||
}, { | ||
propertyDefinition: itemType.typeProperties.find(p => p.slug === 'planningLevel1'), | ||
typeRootSlug: 'item', | ||
slug: "planningLevel1", | ||
includeLabel: true, | ||
style: { | ||
font: { | ||
size: 14, | ||
}, | ||
color: 'white', | ||
} | ||
}] | ||
@@ -89,9 +132,9 @@ }; | ||
framePadding: 30, | ||
frameHeaderTemplate: { | ||
frameGroupHeaderTemplate: { | ||
style: { | ||
color: '#000000', | ||
color: '#ffffff', | ||
font: { | ||
size: 20 | ||
}, | ||
backgroundColor: '#FFFFFF', | ||
backgroundColor: 'rgba(0, 0, 0, 0.8)', | ||
}, | ||
@@ -102,16 +145,23 @@ size: { | ||
}, | ||
frameGroupHeaderTemplate: { | ||
style: { | ||
color: '#ffffff', | ||
font: { | ||
size: 20 | ||
frameInfoPanelTemplate: { | ||
panelDocumentTemplate: { | ||
style: { | ||
color: '#ffffff', | ||
font: { | ||
size: 20 | ||
}, | ||
backgroundColor: 'rgba(0, 0, 0, 0.8)', | ||
border: { | ||
radius: 4, | ||
} | ||
}, | ||
backgroundColor: 'black', | ||
size: { | ||
width: 250, | ||
height: 400, | ||
} | ||
}, | ||
size: { | ||
height: 60, | ||
} | ||
propertyTemplate: PANEL_PROPERTY_TEMPLATE | ||
}, | ||
componentGridTemplate: { | ||
gridDimensions: { cols: 8, rows: 2 }, | ||
gridDimensions: { cols: 4, rows: 2 }, | ||
componentPadding: 5, | ||
@@ -125,7 +175,2 @@ componentTemplate: { | ||
{ | ||
property: itemType.typeProperties.find(p => p.slug === 'designPack'), | ||
scope: 'item', | ||
sort: sdk_1.SortOrderOptions.ASC, | ||
values: null, | ||
}, { | ||
property: itemType.typeProperties.find(p => p.slug === 'category'), | ||
@@ -136,3 +181,3 @@ scope: 'item', | ||
}, { | ||
property: itemType.typeProperties.find(p => p.slug === 'class'), | ||
property: itemType.typeProperties.find(p => p.slug === 'name'), | ||
scope: 'item', | ||
@@ -167,7 +212,8 @@ sort: sdk_1.SortOrderOptions.ASC, | ||
return __awaiter(this, void 0, void 0, function* () { | ||
yield (0, sdk_1.login)({ | ||
const config = { | ||
email: 'brian@vibeiq.com', | ||
password: process.env.CONTRAIL_PW, | ||
orgSlug: orgSlug, | ||
}); | ||
}; | ||
yield (0, sdk_1.login)(config); | ||
}); | ||
@@ -174,0 +220,0 @@ } |
{ | ||
"name": "@contrail/document-generation", | ||
"version": "1.0.10", | ||
"version": "1.0.11", | ||
"description": "Utilities for automatic generation of documents.", | ||
@@ -45,3 +45,3 @@ "main": "lib/index.js", | ||
"dependencies": { | ||
"@contrail/data-grouping": "^1.0.15", | ||
"@contrail/data-grouping": "^1.0.18", | ||
"@contrail/documents": "^1.0.44", | ||
@@ -48,0 +48,0 @@ "@contrail/types": "^3.0.27", |
Sorry, the diff of this file is too big to display
27
1136
685882
+ Added@contrail/data-grouping@1.0.39(transitive)
+ Added@contrail/types@3.0.83(transitive)
- Removed@contrail/data-grouping@1.0.34(transitive)
- Removed@contrail/types@3.0.82(transitive)