| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| import {Component, OnChanges, SimpleChanges, Input, Output, EventEmitter, HostBinding} from '@angular/core'; |
| import {ListItem} from '@app/classes/list-item'; |
| |
| @Component({ |
| selector: 'context-menu', |
| templateUrl: './context-menu.component.html', |
| styleUrls: ['./context-menu.component.less'] |
| }) |
| export class ContextMenuComponent implements OnChanges { |
| |
| ngOnChanges (changes: SimpleChanges): void { |
| if (changes.isDisplayed && changes.isDisplayed.currentValue) { |
| document.body.addEventListener('click', this.dismissContextMenu); |
| } |
| } |
| |
| @Input() |
| @HostBinding('class.open') |
| isDisplayed: boolean = false; |
| |
| @Input() |
| contextMenuItems: ListItem[] = []; |
| |
| /** |
| * 'left' CSS property value |
| * @type {number} |
| */ |
| @Input() |
| leftPosition: number = 0; |
| |
| /** |
| * 'top' CSS property value |
| * @type {number} |
| */ |
| @Input() |
| topPosition: number = 0; |
| |
| @Output() |
| contextMenuDismiss: EventEmitter<void> = new EventEmitter(); |
| |
| @Output() |
| itemSelect: EventEmitter<ListItem> = new EventEmitter(); |
| |
| private dismissContextMenu = (): void => { |
| this.isDisplayed = false; |
| this.contextMenuDismiss.emit(); |
| document.body.removeEventListener('click', this.dismissContextMenu); |
| }; |
| |
| selectItem(event: ListItem): void { |
| this.itemSelect.emit(event); |
| } |
| |
| } |