@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
JavaScript
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