UNPKG

@aurigma/design-atoms

Version:

Design Atoms is a part of Customer's Canvas SDK which allows for manipulating individual design elements through your code.

197 lines 8.45 kB
import { ShapeItem, RectangleItem, EllipseItem, ImageItem, BaseTextItem, PlaceholderItem, ContentItem, GroupItem, BarcodeItem, LayoutItem } from "@aurigma/design-atoms-model/Product/Items"; import { ItemUtils } from "../Utils/ItemUtils"; import * as Utils from "@aurigma/design-atoms-model/Utils/Utils"; export class VariableItemHelper { constructor(_productHandler, _canvas, _eventManager) { this._productHandler = _productHandler; this._canvas = _canvas; this._eventManager = _eventManager; this.maskSymbol = "%"; this._eventManager.addItemAdded(e => this.initVariableItem(e.item)); } initVariableItems(product) { product.getAllItems({ ignoreMockups: false, flatGroupItems: true, excludeGroupItems: true }).forEach((i) => this.initVariableItem(i)); } setVariableValues(items, value) { if (items.length === 0) return; //this._history.pause(); items.forEach((i) => { this.setVariableValue(i, value); }); //this._history.resume(); } setVariableValue(item, value, supressUpdate) { //this._history.pause(); if (ItemUtils.isVariableItem(item)) this._setVariableValue(item, value); if (item instanceof PlaceholderItem && !item.isEmptyContent && ItemUtils.isVariableItem(item.content)) this._setVariableValue(item.content, value); if (!supressUpdate) ItemUtils.updateItems([item], this._productHandler, this._canvas); //this._history.resume(); } getVariableItemDisplayName(name) { if (name == null) return; const mask = this.maskSymbol; const maskRegex = new RegExp(`^${mask}|${mask}$`, "gm"); return name.replace(maskRegex, ""); } _isCanBeVariable(item) { return item.canSetIsVariable(); ; } getRealItemName(item) { if (!this._isCanBeVariable(item)) return item.name; return item.isVariable ? item.name.replace(new RegExp(`^${this.maskSymbol}|${this.maskSymbol}$`, "gm"), "") : item.name; } createNewItemName(item, newRealName) { if (this._isCanBeVariable(item)) return item.isVariable ? `${this.maskSymbol}${newRealName}${this.maskSymbol}` : newRealName; else return newRealName; } _setVariableValue(item, value) { if (item.isVariable === value) return; if (value) { item.name = `${this.maskSymbol}${item.name}${this.maskSymbol}`; } else { var maskRegex = new RegExp(`^${this.maskSymbol}|${this.maskSymbol}$`, "gm"); item.name = item.name.replace(maskRegex, ""); } item.isVariable = value; } initVariableItem(item) { var contentItem = item instanceof PlaceholderItem && !item.isEmptyContent ? item.content : item; if (contentItem instanceof ContentItem) { var mask = this.maskSymbol; var name = contentItem.name; if (name.indexOf(mask) === 0 && name.lastIndexOf(mask) === name.length - 1) contentItem.isVariable = true; } } static getVariablesFromItems(items) { const result = []; items.forEach(item => { let variables; if (item instanceof BaseTextItem) variables = VariableItemHelper.getVariablesFromTextItem(item); else if (item instanceof PlaceholderItem) variables = VariableItemHelper.getVariablesFromPlaceholderItem(item); else if (item instanceof BarcodeItem) variables = VariableItemHelper.getVariablesFromBarcodeItem(item); else if (item instanceof ImageItem) variables = VariableItemHelper.getVariablesFromImageItem(item); else if (item instanceof EllipseItem) variables = VariableItemHelper.getVariablesFromEllipseItem(item); else if (item instanceof RectangleItem) variables = VariableItemHelper.getVariablesFromRectangleItem(item); else if (item instanceof ShapeItem) variables = VariableItemHelper.getVariablesFromShapeItem(item); else if (item instanceof LayoutItem) variables = VariableItemHelper.getVariablesFromLayoutItem(item); else if (item instanceof GroupItem) variables = VariableItemHelper.getVariablesFromGroupItem(item); if (Utils.isEmpty(variables != null ? variables.filter(item => item != null) : null)) return; variables.forEach(variable => { if (result.find(v => v.name == variable.name && v.type == variable.type) == null) result.push(variable); }); }); return result; } static getVariablesFromLayoutItem(item) { var sortedItems = item.getSortedItems(); if (sortedItems != null) return this.getVariablesFromItems(sortedItems.reverse()); return this.getVariablesFromGroupItem(item); } static getVariablesFromGroupItem(item) { return this.getVariablesFromItems(item.getNestedItems(true)); } static getVariablesFromShapeItem(item) { return null; } static getVariablesFromEllipseItem(item) { return null; } static getVariablesFromRectangleItem(item) { return null; } static getVariablesFromImageItem(item) { if (item.isVariable) { return [{ name: item.name, type: "Image", value: null }]; } return null; } static getVariablesFromPlaceholderItem(item) { if (!item.isVariable) return null; if (item instanceof PlaceholderItem && item.isBarcodePlaceholder) { const content = item.content; return [Object.assign(Object.assign({}, this.getVariablesFromBarcodeItem(content, true)[0]), { name: item.name, type: "BarcodePlaceholder" })]; } return [{ name: item.name, type: "ImagePlaceholder", value: null }]; } static getVariablesFromBarcodeItem(item, ignoreIsVariableMarker = false) { if (!ignoreIsVariableMarker && !item.isVariable) return null; return [{ name: item.name, type: "Barcode", barcodeFormat: item.barcodeFormat, barcodeSubType: item.barcodeSubType, value: item.barcodeContent }]; } static getVariablesFromTextItem(item) { const result = []; if (VariableItemHelper.isInStringPlacehodler(item)) { item.placeholders.forEach(placeholder => { result.push({ name: placeholder.name, type: "InString", value: (placeholder.value != null && placeholder.value !== "") ? placeholder.value : placeholder.name }); }); return result; } const interpolationPlaceholders = VariableItemHelper.getInterpolationVariables(item); if (!Utils.isEmpty(interpolationPlaceholders)) return interpolationPlaceholders; if (item.isVariable) return [{ name: item.name, type: "Text", value: item.text }]; return null; } static getInterpolationVariables(textItem) { const placeholders = []; if (VariableItemHelper.isInStringPlacehodler(textItem)) return placeholders; const text = Utils.isValidXml(textItem.text) ? Utils.unescapeXml(textItem.text) : textItem.text; const regExp = /\{\{(.+?)\}\}/g; let match = regExp.exec(text); while (match != null) { const variable = { name: match[1], type: "InString", value: match[1], values: [], mask: null }; placeholders.push(variable); match = regExp.exec(text); } return placeholders; } static isInStringPlacehodler(item) { return item instanceof BaseTextItem && item.placeholders.length > 0; } } //# sourceMappingURL=VariableItemHelper.js.map