diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas.component.html b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas.component.html index 3f7e706756e82ed011f80675ae91fbdd32d5a073..ce8bfa5d59067617f4ec8375be214efd20b2c346 100644 --- a/projects/editor/src/app/components/unit-view/page-view/canvas/canvas.component.html +++ b/projects/editor/src/app/components/unit-view/page-view/canvas/canvas.component.html @@ -24,6 +24,7 @@ class="section drop-list" id="section-{{i}}" [section]="section" [isSelected]="selectionService.selectedPageSectionIndex === i" + (elementSelected)="selectionService.selectedPageSectionIndex = i" cdkDropList cdkDropListSortingDisabled [cdkDropListData]="{ sectionIndex: i }" (cdkDropListDropped)="elementDropped($event)" diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/overlays/canvas-element-overlay.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/overlays/canvas-element-overlay.ts index 93c25b529f50dcb147aaf4958f6a8880997069b6..d36fd41a17a5780c90386e5d1443f0dce190f106 100644 --- a/projects/editor/src/app/components/unit-view/page-view/canvas/overlays/canvas-element-overlay.ts +++ b/projects/editor/src/app/components/unit-view/page-view/canvas/overlays/canvas-element-overlay.ts @@ -1,7 +1,7 @@ import { Directive, Input, ComponentFactoryResolver, ComponentRef, - ViewChild, ViewContainerRef, OnInit, OnDestroy, ChangeDetectorRef + ViewChild, ViewContainerRef, OnInit, OnDestroy, ChangeDetectorRef, Output, EventEmitter } from '@angular/core'; import { Subject } from 'rxjs'; import { takeUntil } from 'rxjs/operators'; @@ -19,6 +19,7 @@ import { UIElement } from '../../../../../../../../common/interfaces/elements'; export abstract class CanvasElementOverlay implements OnInit, OnDestroy { @Input() element!: UIElement; @Input() viewMode: boolean = false; + @Output() elementSelected = new EventEmitter<unknown>(); @ViewChild('elementContainer', { read: ViewContainerRef, static: true }) private elementContainer!: ViewContainerRef; isSelected = false; protected childComponent!: ComponentRef<ElementComponent | CompoundElementComponent>; diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/overlays/static-canvas-overlay.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/overlays/static-canvas-overlay.component.ts index a59f3fe1b72bf183995e23fcd3748743085182df..5c48bfbfab3cd215b5fc65df6b52e53d5b098c2f 100644 --- a/projects/editor/src/app/components/unit-view/page-view/canvas/overlays/static-canvas-overlay.component.ts +++ b/projects/editor/src/app/components/unit-view/page-view/canvas/overlays/static-canvas-overlay.component.ts @@ -11,7 +11,7 @@ import { UIElement } from '../../../../../../../../common/interfaces/elements'; <!-- TabIndex is needed to make the div selectable and catch keyboard events (delete). --> <div class="draggable-element" [class.temporaryHighlight]="temporaryHighlight" - (click)="!isSelected && selectElement($event.shiftKey); $event.stopPropagation()" + (click)="elementClicked($event)" (dblclick)="openEditDialog()" (keyup.delete)="deleteSelectedElements()" tabindex="-1" cdkDrag [cdkDragData]="{dragType: 'move', element: element}" @@ -86,4 +86,12 @@ export class StaticCanvasOverlayComponent extends CanvasElementOverlay { }) .unsubscribe(); } + + elementClicked(event: any): void { + if (!this.isSelected) { + this.selectElement(event.shiftKey); + } + event.stopPropagation(); + this.elementSelected.emit(); + } } diff --git a/projects/editor/src/app/components/unit-view/page-view/canvas/section-static.component.ts b/projects/editor/src/app/components/unit-view/page-view/canvas/section-static.component.ts index 7b5544b0db3ce1a9ed34d28e1f9fa15f63962729..7e589a7d18e966bcf420cb98c9ccdbe038c3f01c 100644 --- a/projects/editor/src/app/components/unit-view/page-view/canvas/section-static.component.ts +++ b/projects/editor/src/app/components/unit-view/page-view/canvas/section-static.component.ts @@ -1,5 +1,5 @@ import { - Component, ElementRef, Input, QueryList, ViewChild, ViewChildren + Component, ElementRef, EventEmitter, Input, Output, QueryList, ViewChild, ViewChildren } from '@angular/core'; import { UnitService } from '../../../../services/unit.service'; import { CanvasElementOverlay } from './overlays/canvas-element-overlay'; @@ -17,7 +17,8 @@ import { UIElementType } from '../../../../../../../common/interfaces/elements'; (dragover)="$event.preventDefault()" (drop)="newElementDropped($event)"> <aspect-static-canvas-overlay #elementComponent *ngFor="let element of section.elements" - [element]="$any(element)"> + [element]="$any(element)" + (elementSelected)="elementSelected.emit($event)"> </aspect-static-canvas-overlay> </div> `, @@ -28,6 +29,7 @@ import { UIElementType } from '../../../../../../../common/interfaces/elements'; export class SectionStaticComponent { @Input() section!: Section; @Input() isSelected!: boolean; + @Output() elementSelected = new EventEmitter<unknown>(); @ViewChild('sectionElement') sectionElement!: ElementRef; @ViewChildren('elementComponent') childElementComponents!: QueryList<CanvasElementOverlay>;