@aurigma/design-atoms
Version:
Design Atoms is a part of Customer's Canvas SDK which allows for manipulating individual design elements through your code.
193 lines • 9.2 kB
JavaScript
import { GroupItemHandler, ImageItemHandler, PlaceholderItemHandler } from "../ItemHandlers";
import { throttle } from "@aurigma/design-atoms-model";
export class ViolationContainersHandler {
constructor(canvasElementHandler, canvas, viewer) {
this._scheduledOptions = null;
this._updateButtonGroupsThrottled = throttle(() => this._updateButtonGroups(), 200);
this._canvasElementHandler = canvasElementHandler;
this._canvas = canvas;
this._viewer = viewer;
this._violationWarningButtonsEnabled = false;
this._qualityChangeContainersEnabled = true;
}
set violationWarningButtonsEnabled(v) {
if (this._violationWarningButtonsEnabled === v)
return;
this._violationWarningButtonsEnabled = v;
this._onViolationButtonsConfigChanged();
}
get violationWarningButtonsEnabled() {
return this._violationWarningButtonsEnabled;
}
set qualityChangeContainersEnabled(v) {
if (this._qualityChangeContainersEnabled === v)
return;
this._qualityChangeContainersEnabled = v;
this._onViolationButtonsConfigChanged();
}
get qualityChangeContainersEnabled() {
return this._qualityChangeContainersEnabled;
}
updateButtonGroups(options) {
this._setUpdateButtonGroupsOptions(options);
if (options.instant) {
this._updateButtonGroups();
}
else {
this._updateButtonGroupsThrottled();
}
}
addViolationContainer(itemHandler) {
this._addViolationContainer(itemHandler);
}
removeViolationContainer(handler) {
this._removeViolationContainer(handler);
}
addPlaceholderButtonGroup(placeholder) {
this._canvasElementHandler.addPlaceholderButtonGroup(placeholder, this._viewer);
}
removePlaceholderButtonGroup(placeholder) {
this._canvasElementHandler.removePlaceholderButtonGroup(placeholder);
}
violationWarningButtonHitTestObject(pt) {
if (this._viewer == null || !this.violationWarningButtonsEnabled || this._canvas.previewMode)
return null;
var itemHandlers = this._canvas.getAllItemHandlers({ onlyVisible: true })
.reduce((items, item) => item instanceof GroupItemHandler ? [...items, ...item.itemHandlers] : [...items, item], []);
for (var i = 0; i < itemHandlers.length; i++) {
var violationWarningButton = itemHandlers[i].getViolationWarningButton();
if (getComputedStyle(violationWarningButton).pointerEvents === "none")
continue;
if (violationWarningButton != null) {
var divContentRect = this._canvas.getButtonGroupRectInGripsDiv(violationWarningButton);
if (divContentRect.contains(pt))
return itemHandlers[i];
}
}
return null;
}
_onViolationButtonsConfigChanged() {
this._removeViolationContainers();
const enabled = this.qualityChangeContainersEnabled || this.violationWarningButtonsEnabled;
if (enabled) {
this._addViolationContainers();
}
}
_setUpdateButtonGroupsOptions(options) {
if (this._scheduledOptions == null)
this._scheduledOptions = {
onlyVisible: true,
placeholderButtons: false,
placeholderButtonsPosition: false,
placeholderHandler: {},
violationContainers: false,
violationContainersPosition: false,
violationContainerHandler: {}
};
const cur = this._scheduledOptions;
if (options.onlyVisible != null)
cur.onlyVisible = options.onlyVisible && cur.onlyVisible;
if (options.placeholderButtons != null)
cur.placeholderButtons = options.placeholderButtons || cur.placeholderButtons;
if (options.placeholderButtonsPosition != null)
cur.placeholderButtonsPosition = options.placeholderButtonsPosition || cur.placeholderButtonsPosition;
if (options.violationContainers != null)
cur.violationContainers = options.violationContainers || cur.violationContainers;
if (options.violationContainersPosition != null)
cur.violationContainersPosition = options.violationContainersPosition || cur.violationContainersPosition;
if (options.placeholderHandler)
cur.placeholderHandler[options.placeholderHandler.uniqueId] = {
handler: options.placeholderHandler,
updatePosition: options.placeholderHandlerPosition
};
if (options.violationContainerHandler) {
cur.violationContainerHandler[options.violationContainerHandler.uniqueId] = {
handler: options.violationContainerHandler,
updatePosition: options.violationContainerHandlerPosition
};
}
}
_updateButtonGroups() {
const options = this._scheduledOptions;
if (options == null)
return;
this._scheduledOptions = null;
var itemHandlers = this._canvas.getAllItemHandlers({
onlyVisible: options.onlyVisible,
flatGroupItems: true,
});
for (var i = 0; i < itemHandlers.length; i++) {
const handler = itemHandlers[i];
let updateViolation = options.violationContainers;
let updateViolationPosition = options.violationContainersPosition;
if (options.violationContainerHandler[handler.uniqueId]) {
updateViolation = true;
updateViolationPosition = updateViolationPosition || options.violationContainerHandler[handler.uniqueId].updatePosition;
}
if (updateViolation && this._violationWarningButtonsEnabled || this._qualityChangeContainersEnabled) {
this._updateViolationContainer(handler, updateViolationPosition);
}
if (handler instanceof PlaceholderItemHandler) {
let updatePlaceholderButtons = options.placeholderButtons;
let updatePlaceholderButtonsPosition = options.placeholderButtonsPosition;
if (options.placeholderHandler[handler.uniqueId]) {
updatePlaceholderButtons = true;
updatePlaceholderButtonsPosition = updatePlaceholderButtonsPosition || options.placeholderHandler[handler.uniqueId].updatePosition;
}
if (updatePlaceholderButtons) {
this._updatePlaceholderButtonGroup(handler);
}
else if (updatePlaceholderButtonsPosition) {
this._updatePlaceholderButtonGroupPosition(handler);
}
}
}
}
_updateViolationContainer(itemHandler, updatePosition /*: boolean*/ = false, source = null) {
this._canvasElementHandler.updateViolationContainer(itemHandler, updatePosition, this._viewer);
}
_updateViolationContainerPosition(itemHandler) {
this._canvasElementHandler.updateViolationContainerPosition(itemHandler, this._viewer);
}
_updatePlaceholderButtonGroup(placeholder) {
this._canvasElementHandler.updatePlaceholderButtonGroup(placeholder, this._viewer);
}
_updatePlaceholderButtonGroupPosition(placeholder) {
this._canvasElementHandler.updatePlaceholderButtonGroupPosition(placeholder, this._viewer);
}
_removeViolationContainers() {
if (this._viewer == null)
return;
var handlers = this._canvas.getAllItemHandlers();
for (let handler of handlers) {
this._removeViolationContainer(handler);
var violationWarningButton = handler.getViolationWarningButton();
if (violationWarningButton != null)
violationWarningButton.remove();
if (!(handler instanceof ImageItemHandler) && !(handler instanceof PlaceholderItemHandler))
continue;
let qualityChangeContainer;
if (handler instanceof ImageItemHandler)
qualityChangeContainer = handler.qualityChangeContainer;
else
qualityChangeContainer = handler.qualityChangeContainer;
if (qualityChangeContainer != null)
qualityChangeContainer.remove();
}
}
_addViolationContainers() {
if (this._viewer == null)
return;
var itemHandlers = this._canvas.getAllItemHandlers();
for (var i = 0; i < itemHandlers.length; i++) {
this._addViolationContainer(itemHandlers[i]);
}
}
_addViolationContainer(itemHandler) {
this._canvasElementHandler.addViolationContainer(itemHandler, this._viewer);
}
_removeViolationContainer(handler) {
this._canvasElementHandler.removeViolationContainer(handler);
}
}
//# sourceMappingURL=ViolationContainersHandler.js.map