|
|
|
@ -19,6 +19,7 @@ import { |
|
|
|
ChangeDetectionStrategy, |
|
|
|
Component, |
|
|
|
DoCheck, |
|
|
|
ElementRef, |
|
|
|
Input, |
|
|
|
IterableDiffers, |
|
|
|
KeyValueDiffers, |
|
|
|
@ -45,7 +46,7 @@ import { |
|
|
|
} from '../../models/dashboard-component.models'; |
|
|
|
import { ReplaySubject, Subject, Subscription } from 'rxjs'; |
|
|
|
import { WidgetLayout, WidgetLayouts } from '@shared/models/dashboard.models'; |
|
|
|
import { animatedScroll, deepClone, isDefined } from '@app/core/utils'; |
|
|
|
import { animatedScroll, deepClone, isDefined, isIOSDevice, onLongPress } from '@app/core/utils'; |
|
|
|
import { BreakpointObserver } from '@angular/cdk/layout'; |
|
|
|
import { MediaBreakpoints } from '@shared/models/constants'; |
|
|
|
import { IAliasController, IStateController } from '@app/core/api/widget-api.models'; |
|
|
|
@ -186,18 +187,19 @@ export class DashboardComponent extends PageComponent implements IDashboardCompo |
|
|
|
isMobileSize = false; |
|
|
|
|
|
|
|
@ViewChild('gridster', {static: true}) gridster: GridsterComponent; |
|
|
|
@ViewChild('gridsterParent', {static: true, read: ElementRef}) gridsterParent: ElementRef<HTMLElement>; |
|
|
|
|
|
|
|
@ViewChild('dashboardMenuTrigger', {static: true}) dashboardMenuTrigger: MatMenuTrigger; |
|
|
|
|
|
|
|
dashboardMenuPosition = { x: '0px', y: '0px' }; |
|
|
|
|
|
|
|
dashboardContextMenuEvent: MouseEvent; |
|
|
|
dashboardContextMenuEvent: MouseEvent | TouchEvent; |
|
|
|
|
|
|
|
@ViewChild('widgetMenuTrigger', {static: true}) widgetMenuTrigger: MatMenuTrigger; |
|
|
|
|
|
|
|
widgetMenuPosition = { x: '0px', y: '0px' }; |
|
|
|
|
|
|
|
widgetContextMenuEvent: MouseEvent; |
|
|
|
widgetContextMenuEvent: MouseEvent | TouchEvent; |
|
|
|
|
|
|
|
dashboardWidgets = new DashboardWidgets(this, |
|
|
|
this.differs.find([]).create<Widget>((_, item) => item), |
|
|
|
@ -281,6 +283,10 @@ export class DashboardComponent extends PageComponent implements IDashboardCompo |
|
|
|
); |
|
|
|
|
|
|
|
this.updateWidgets(); |
|
|
|
|
|
|
|
if (isIOSDevice()) { |
|
|
|
onLongPress(this.gridsterParent.nativeElement, (event) => this.openDashboardContextMenu(event)); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
ngOnDestroy(): void { |
|
|
|
@ -406,30 +412,30 @@ export class DashboardComponent extends PageComponent implements IDashboardCompo |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
openDashboardContextMenu($event: MouseEvent) { |
|
|
|
openDashboardContextMenu($event: MouseEvent | TouchEvent) { |
|
|
|
if (this.callbacks && this.callbacks.prepareDashboardContextMenu) { |
|
|
|
const items = this.callbacks.prepareDashboardContextMenu($event); |
|
|
|
if (items && items.length) { |
|
|
|
$event.preventDefault(); |
|
|
|
$event.stopPropagation(); |
|
|
|
this.dashboardContextMenuEvent = $event; |
|
|
|
this.dashboardMenuPosition.x = $event.clientX + 'px'; |
|
|
|
this.dashboardMenuPosition.y = $event.clientY + 'px'; |
|
|
|
this.dashboardMenuPosition.x = ('touches' in $event ? $event.changedTouches[0].clientX : $event.clientX) + 'px'; |
|
|
|
this.dashboardMenuPosition.y = ('touches' in $event ? $event.changedTouches[0].clientY : $event.clientY) + 'px'; |
|
|
|
this.dashboardMenuTrigger.menuData = { items }; |
|
|
|
this.dashboardMenuTrigger.openMenu(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
private openWidgetContextMenu($event: MouseEvent, widget: DashboardWidget) { |
|
|
|
private openWidgetContextMenu($event: MouseEvent | TouchEvent, widget: DashboardWidget) { |
|
|
|
if (this.callbacks && this.callbacks.prepareWidgetContextMenu) { |
|
|
|
const items = this.callbacks.prepareWidgetContextMenu($event, widget.widget, widget.isReference); |
|
|
|
if (items && items.length) { |
|
|
|
$event.preventDefault(); |
|
|
|
$event.stopPropagation(); |
|
|
|
this.widgetContextMenuEvent = $event; |
|
|
|
this.widgetMenuPosition.x = $event.clientX + 'px'; |
|
|
|
this.widgetMenuPosition.y = $event.clientY + 'px'; |
|
|
|
this.widgetMenuPosition.x = ('touches' in $event ? $event.changedTouches[0].clientX : $event.clientX) + 'px'; |
|
|
|
this.widgetMenuPosition.y = ('touches' in $event ? $event.changedTouches[0].clientY : $event.clientY) + 'px'; |
|
|
|
this.widgetMenuTrigger.menuData = { items, widget: widget.widget }; |
|
|
|
this.widgetMenuTrigger.openMenu(); |
|
|
|
} |
|
|
|
|