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.

193 lines 9.2 kB
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