contextMenu.component.js 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. /**
  2. * @fileoverview added by tsickle
  3. * @suppress {checkTypes,constantProperty,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
  4. */
  5. import * as tslib_1 from "tslib";
  6. import { ChangeDetectorRef, Component, ContentChildren, ElementRef, EventEmitter, Inject, Input, Optional, Output, QueryList, ViewChild, ViewEncapsulation, } from '@angular/core';
  7. import { Subscription } from 'rxjs';
  8. import { first } from 'rxjs/operators';
  9. import { ContextMenuItemDirective } from './contextMenu.item.directive';
  10. import { ContextMenuService } from './contextMenu.service';
  11. import { CONTEXT_MENU_OPTIONS } from './contextMenu.tokens';
  12. /**
  13. * @record
  14. */
  15. export function ILinkConfig() { }
  16. if (false) {
  17. /** @type {?} */
  18. ILinkConfig.prototype.click;
  19. /** @type {?|undefined} */
  20. ILinkConfig.prototype.enabled;
  21. /** @type {?} */
  22. ILinkConfig.prototype.html;
  23. }
  24. /**
  25. * @record
  26. */
  27. export function MouseLocation() { }
  28. if (false) {
  29. /** @type {?|undefined} */
  30. MouseLocation.prototype.left;
  31. /** @type {?|undefined} */
  32. MouseLocation.prototype.marginLeft;
  33. /** @type {?|undefined} */
  34. MouseLocation.prototype.marginTop;
  35. /** @type {?|undefined} */
  36. MouseLocation.prototype.top;
  37. }
  38. var ContextMenuComponent = /** @class */ (function () {
  39. function ContextMenuComponent(_contextMenuService, changeDetector, elementRef, options) {
  40. var _this = this;
  41. this._contextMenuService = _contextMenuService;
  42. this.changeDetector = changeDetector;
  43. this.elementRef = elementRef;
  44. this.options = options;
  45. this.menuClass = "";
  46. this.autoFocus = false;
  47. this.useBootstrap4 = false;
  48. this.disabled = false;
  49. this.close = new EventEmitter();
  50. this.open = new EventEmitter();
  51. this.visibleMenuItems = [];
  52. this.links = [];
  53. this.subscription = new Subscription();
  54. if (options) {
  55. this.autoFocus = options.autoFocus;
  56. this.useBootstrap4 = options.useBootstrap4;
  57. }
  58. this.subscription.add(_contextMenuService.show.subscribe((/**
  59. * @param {?} menuEvent
  60. * @return {?}
  61. */
  62. function (menuEvent) {
  63. _this.onMenuEvent(menuEvent);
  64. })));
  65. }
  66. /**
  67. * @return {?}
  68. */
  69. ContextMenuComponent.prototype.ngOnDestroy = /**
  70. * @return {?}
  71. */
  72. function () {
  73. this.subscription.unsubscribe();
  74. };
  75. /**
  76. * @param {?} menuEvent
  77. * @return {?}
  78. */
  79. ContextMenuComponent.prototype.onMenuEvent = /**
  80. * @param {?} menuEvent
  81. * @return {?}
  82. */
  83. function (menuEvent) {
  84. var _this = this;
  85. if (this.disabled) {
  86. return;
  87. }
  88. var contextMenu = menuEvent.contextMenu, event = menuEvent.event, item = menuEvent.item;
  89. if (contextMenu && contextMenu !== this) {
  90. return;
  91. }
  92. this.event = event;
  93. this.item = item;
  94. this.setVisibleMenuItems();
  95. this._contextMenuService.openContextMenu(tslib_1.__assign({}, menuEvent, { menuItems: this.visibleMenuItems, menuClass: this.menuClass }));
  96. this._contextMenuService.close.asObservable().pipe(first()).subscribe((/**
  97. * @param {?} closeEvent
  98. * @return {?}
  99. */
  100. function (closeEvent) { return _this.close.emit(closeEvent); }));
  101. this.open.next(menuEvent);
  102. };
  103. /**
  104. * @param {?} menuItem
  105. * @return {?}
  106. */
  107. ContextMenuComponent.prototype.isMenuItemVisible = /**
  108. * @param {?} menuItem
  109. * @return {?}
  110. */
  111. function (menuItem) {
  112. return this.evaluateIfFunction(menuItem.visible);
  113. };
  114. /**
  115. * @return {?}
  116. */
  117. ContextMenuComponent.prototype.setVisibleMenuItems = /**
  118. * @return {?}
  119. */
  120. function () {
  121. var _this = this;
  122. this.visibleMenuItems = this.menuItems.filter((/**
  123. * @param {?} menuItem
  124. * @return {?}
  125. */
  126. function (menuItem) { return _this.isMenuItemVisible(menuItem); }));
  127. };
  128. /**
  129. * @param {?} value
  130. * @return {?}
  131. */
  132. ContextMenuComponent.prototype.evaluateIfFunction = /**
  133. * @param {?} value
  134. * @return {?}
  135. */
  136. function (value) {
  137. if (value instanceof Function) {
  138. return value(this.item);
  139. }
  140. return value;
  141. };
  142. ContextMenuComponent.decorators = [
  143. { type: Component, args: [{
  144. encapsulation: ViewEncapsulation.None,
  145. selector: 'context-menu',
  146. template: " ",
  147. styles: ["\n .cdk-overlay-container {\n position: fixed;\n z-index: 1000;\n pointer-events: none;\n top: 0;\n left: 0;\n width: 100%;\n height: 100%;\n }\n .ngx-contextmenu.cdk-overlay-pane {\n position: absolute;\n pointer-events: auto;\n box-sizing: border-box;\n }\n "]
  148. }] }
  149. ];
  150. /** @nocollapse */
  151. ContextMenuComponent.ctorParameters = function () { return [
  152. { type: ContextMenuService },
  153. { type: ChangeDetectorRef },
  154. { type: ElementRef },
  155. { type: undefined, decorators: [{ type: Optional }, { type: Inject, args: [CONTEXT_MENU_OPTIONS,] }] }
  156. ]; };
  157. ContextMenuComponent.propDecorators = {
  158. menuClass: [{ type: Input }],
  159. autoFocus: [{ type: Input }],
  160. useBootstrap4: [{ type: Input }],
  161. disabled: [{ type: Input }],
  162. close: [{ type: Output }],
  163. open: [{ type: Output }],
  164. menuItems: [{ type: ContentChildren, args: [ContextMenuItemDirective,] }],
  165. menuElement: [{ type: ViewChild, args: ['menu', { static: false },] }]
  166. };
  167. return ContextMenuComponent;
  168. }());
  169. export { ContextMenuComponent };
  170. if (false) {
  171. /** @type {?} */
  172. ContextMenuComponent.prototype.menuClass;
  173. /** @type {?} */
  174. ContextMenuComponent.prototype.autoFocus;
  175. /** @type {?} */
  176. ContextMenuComponent.prototype.useBootstrap4;
  177. /** @type {?} */
  178. ContextMenuComponent.prototype.disabled;
  179. /** @type {?} */
  180. ContextMenuComponent.prototype.close;
  181. /** @type {?} */
  182. ContextMenuComponent.prototype.open;
  183. /** @type {?} */
  184. ContextMenuComponent.prototype.menuItems;
  185. /** @type {?} */
  186. ContextMenuComponent.prototype.menuElement;
  187. /** @type {?} */
  188. ContextMenuComponent.prototype.visibleMenuItems;
  189. /** @type {?} */
  190. ContextMenuComponent.prototype.links;
  191. /** @type {?} */
  192. ContextMenuComponent.prototype.item;
  193. /** @type {?} */
  194. ContextMenuComponent.prototype.event;
  195. /**
  196. * @type {?}
  197. * @private
  198. */
  199. ContextMenuComponent.prototype.subscription;
  200. /**
  201. * @type {?}
  202. * @private
  203. */
  204. ContextMenuComponent.prototype._contextMenuService;
  205. /**
  206. * @type {?}
  207. * @private
  208. */
  209. ContextMenuComponent.prototype.changeDetector;
  210. /**
  211. * @type {?}
  212. * @private
  213. */
  214. ContextMenuComponent.prototype.elementRef;
  215. /**
  216. * @type {?}
  217. * @private
  218. */
  219. ContextMenuComponent.prototype.options;
  220. }
  221. //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dE1lbnUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6Im5nOi8vbmd4LWNvbnRleHRtZW51LyIsInNvdXJjZXMiOlsibGliL2NvbnRleHRNZW51LmNvbXBvbmVudC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLE9BQU8sRUFDSCxpQkFBaUIsRUFDakIsU0FBUyxFQUNULGVBQWUsRUFDZixVQUFVLEVBQ1YsWUFBWSxFQUVaLE1BQU0sRUFDTixLQUFLLEVBRUwsUUFBUSxFQUNSLE1BQU0sRUFDTixTQUFTLEVBQ1QsU0FBUyxFQUNULGlCQUFpQixHQUNwQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUV4RSxPQUFPLEVBQUUsa0JBQWtCLEVBQWlELE1BQU0sdUJBQXVCLENBQUM7QUFDMUcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7QUFFNUQsaUNBSUM7OztJQUhDLDRCQUFnRDs7SUFDaEQsOEJBQWlDOztJQUNqQywyQkFBNEI7Ozs7O0FBRTlCLG1DQUtDOzs7SUFKQyw2QkFBYzs7SUFDZCxtQ0FBb0I7O0lBQ3BCLGtDQUFtQjs7SUFDbkIsNEJBQWE7O0FBR2Y7SUFxQ0UsOEJBQ1UsbUJBQXVDLEVBQ3ZDLGNBQWlDLEVBQ2pDLFVBQXNCLEVBRVEsT0FBNEI7UUFMcEUsaUJBY0M7UUFiUyx3QkFBbUIsR0FBbkIsbUJBQW1CLENBQW9CO1FBQ3ZDLG1CQUFjLEdBQWQsY0FBYyxDQUFtQjtRQUNqQyxlQUFVLEdBQVYsVUFBVSxDQUFZO1FBRVEsWUFBTyxHQUFQLE9BQU8sQ0FBcUI7UUFwQnBELGNBQVMsR0FBRyxFQUFFLENBQUM7UUFDZixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGtC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QVU7Z0RBeUVULFFBQVEsWUFDUixNQUFNLFNBQUMsb0JBQW9COzs7NEJBcEI3QixLQUFLOzRCQUNMLEtBQUs7Z0NBQ0wsS0FBSzsyQkFDTCxLQUFLO3dCQUNMLE1BQU07dUJBQ04sTUFBTTs0QkFDTixlQUFlLFNBQUMsd0JBQXdCOzhCQUN4QyxTQUFTLFNBQUMsTUFBTSxFQUFFLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRTs7SUEwRHRDLDJCQUFDO0NBQUEsQUF2RkQsSUF1RkM7U0FsRVksb0JBQW9COzs7SUFDL0IseUNBQStCOztJQUMvQix5Q0FBa0M7O0lBQ2xDLDZDQUFzQzs7SUFDdEMsd0NBQWlDOztJQUNqQyxxQ0FBaUY7O0lBQ2pGLG9DQUFpRjs7SUFDakYseUNBQWlHOztJQUNqRywyQ0FBcUU7O0lBQ3JFLGdEQUF5RDs7SUFFekQscUNBQWlDOztJQUNqQyxvQ0FBaUI7O0lBQ2pCLHFDQUF5Qzs7Ozs7SUFDekMsNENBQXdEOzs7OztJQUd0RCxtREFBK0M7Ozs7O0lBQy9DLDhDQUF5Qzs7Ozs7SUFDekMsMENBQThCOzs7OztJQUM5Qix1Q0FDa0UiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICAgIENoYW5nZURldGVjdG9yUmVmLFxuICAgIENvbXBvbmVudCxcbiAgICBDb250ZW50Q2hpbGRyZW4sXG4gICAgRWxlbWVudFJlZixcbiAgICBFdmVudEVtaXR0ZXIsXG4gICAgSG9zdExpc3RlbmVyLFxuICAgIEluamVjdCxcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT3B0aW9uYWwsXG4gICAgT3V0cHV0LFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBWaWV3Q2hpbGQsXG4gICAgVmlld0VuY2Fwc3VsYXRpb24sXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaXJzdCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgQ29udGV4dE1lbnVJdGVtRGlyZWN0aXZlIH0gZnJvbSAnLi9jb250ZXh0TWVudS5pdGVtLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyBJQ29udGV4dE1lbnVPcHRpb25zIH0gZnJvbSAnLi9jb250ZXh0TWVudS5vcHRpb25zJztcbmltcG9ydCB7IENvbnRleHRNZW51U2VydmljZSwgSUNvbnRleHRNZW51Q2xpY2tFdmVudCwgQ2xvc2VDb250ZXh0TWVudUV2ZW50IH0gZnJvbSAnLi9jb250ZXh0TWVudS5zZXJ2aWNlJztcbmltcG9ydCB7IENPTlRFWFRfTUVOVV9PUFRJT05TIH0gZnJvbSAnLi9jb250ZXh0TWVudS50b2tlbnMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIElMaW5rQ29uZmlnIHtcbiAgY2xpY2s6IChpdGVtOiBhbnksICRldmVudD86IE1vdXNlRXZlbnQpID0+IHZvaWQ7XG4gIGVuYWJsZWQ/OiAoaXRlbTogYW55KSA9PiBib29sZWFuO1xuICBodG1sOiAoaXRlbTogYW55KSA9PiBzdHJpbmc7XG59XG5leHBvcnQgaW50ZXJmYWNlIE1vdXNlTG9jYXRpb24ge1xuICBsZWZ0Pzogc3RyaW5nO1xuICBtYXJnaW5MZWZ0Pzogc3RyaW5nO1xuICBtYXJnaW5Ub3A/OiBzdHJpbmc7XG4gIHRvcD86IHN0cmluZztcbn1cblxuQENvbXBvbmVudCh7XG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXG4gIHNlbGVjdG9yOiAnY29udGV4dC1tZW51JyxcbiAgc3R5bGVzOiBbYFxuICAgIC5jZGstb3ZlcmxheS1jb250YWluZXIge1xuICAgICAgcG9zaXRpb246IGZpeGVkO1xuICAgICAgei1pbmRleDogMTAwMDtcbiAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lO1xuICAgICAgdG9wOiAwO1xuICAgICAgbGVmdDogMDtcbiAgICAgIHdpZHRoOiAxMDAlO1xuICAgICAgaGVpZ2h0OiAxMDAlO1xuICAgIH1cbiAgICAubmd4LWNvbnRleHRtZW51LmNkay1vdmVybGF5LXBhbmUge1xuICAgICAgcG9zaXRpb246IGFic29sdXRlO1xuICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87XG4gICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94O1xuICAgIH1cbiAgYF0sXG4gIHRlbXBsYXRlOiBgIGAsXG59KVxuZXhwb3J0IGNsYXNzIENvbnRleHRNZW51Q29tcG9uZW50IGltcGxlbWVudHMgT25EZXN0cm95IHtcbiAgQElucHV0KCkgcHVibGljIG1lbnVDbGFzcyA9IFwiXCI7XG4gIEBJbnB1dCgpIHB1YmxpYyBhdXRvRm9jdXMgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIHVzZUJvb3RzdHJhcDQgPSBmYWxzZTtcbiAgQElucHV0KCkgcHVibGljIGRpc2FibGVkID0gZmFsc2U7XG4gIEBPdXRwdXQoKSBwdWJsaWMgY2xvc2U6IEV2ZW50RW1pdHRlcjxDbG9zZUNvbnRleHRNZW51RXZlbnQ+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICBAT3V0cHV0KCkgcHVibGljIG9wZW46IEV2ZW50RW1pdHRlcjxJQ29udGV4dE1lbnVDbGlja0V2ZW50PiA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcbiAgQENvbnRlbnRDaGlsZHJlbihDb250ZXh0TWVudUl0ZW1EaXJlY3RpdmUpIHB1YmxpYyBtZW51SXRlbXM6IFF1ZXJ5TGlzdDxDb250ZXh0TWVudUl0ZW1EaXJlY3RpdmU+O1xuICBAVmlld0NoaWxkKCdtZW51JywgeyBzdGF0aWM6IGZhbHNlIH0pIHB1YmxpYyBtZW51RWxlbWVudDogRWxlbWVudFJlZjtcbiAgcHVibGljIHZpc2libGVNZW51SXRlbXM6IENvbnRleHRNZW51SXRlbURpcmVjdGl2ZVtdID0gW107XG5cbiAgcHVibGljIGxpbmtzOiBJTGlua0NvbmZpZ1tdID0gW107XG4gIHB1YmxpYyBpdGVtOiBhbnk7XG4gIHB1YmxpYyBldmVudDogTW91c2VFdmVudCB8IEtleWJvYXJkRXZlbnQ7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBfY29udGV4dE1lbnVTZXJ2aWNlOiBDb250ZXh0TWVudVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChDT05URVhUX01FTlVfT1BUSU9OUykgcHJpdmF0ZSBvcHRpb25zOiBJQ29udGV4dE1lbnVPcHRpb25zLFxuICApIHtcbiAgICBpZiAob3B0aW9ucykge1xuICAgICAgdGhpcy5hdXRvRm9jdXMgPSBvcHRpb25zLmF1dG9Gb2N1cztcbiAgICAgIHRoaXMudXNlQm9vdHN0cmFwNCA9IG9wdGlvbnMudXNlQm9vdHN0cmFwNDtcbiAgICB9XG4gICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKF9jb250ZXh0TWVudVNlcnZpY2Uuc2hvdy5zdWJzY3JpYmUobWVudUV2ZW50ID0+IHtcbiAgICAgIHRoaXMub25NZW51RXZlbnQobWVudUV2ZW50KTtcbiAgICB9KSk7XG4gIH1cblxuICBwdWJsaWMgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHB1YmxpYyBvbk1lbnVFdmVudChtZW51RXZlbnQ6IElDb250ZXh0TWVudUNsaWNrRXZlbnQpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBjb25zdCB7IGNvbnRleHRNZW51LCBldmVudCwgaXRlbSB9ID0gbWVudUV2ZW50O1xuICAgIGlmIChjb250ZXh0TWVudSAmJiBjb250ZXh0TWVudSAhPT0gdGhpcykge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB0aGlzLmV2ZW50ID0gZXZlbnQ7XG4gICAgdGhpcy5pdGVtID0gaXRlbTtcbiAgICB0aGlzLnNldFZpc2libGVNZW51SXRlbXMoKTtcbiAgICB0aGlzLl9jb250ZXh0TWVudVNlcnZpY2Uub3BlbkNvbnRleHRNZW51KHsgLi4ubWVudUV2ZW50LCBtZW51SXRlbXM6IHRoaXMudmlzaWJsZU1lbnVJdGVtcywgbWVudUNsYXNzOiB0aGlzLm1lbnVDbGFzcyB9KTtcbiAgICB0aGlzLl9jb250ZXh0TWVudVNlcnZpY2UuY2xvc2UuYXNPYnNlcnZhYmxlKCkucGlwZShmaXJzdCgpKS5zdWJzY3JpYmUoY2xvc2VFdmVudCA9PiB0aGlzLmNsb3NlLmVtaXQoY2xvc2VFdmVudCkpO1xuICAgIHRoaXMub3Blbi5uZXh0KG1lbnVFdmVudCk7XG4gIH1cblxuICBwdWJsaWMgaXNNZW51SXRlbVZpc2libGUobWVudUl0ZW06IENvbnRleHRNZW51SXRlbURpcmVjdGl2ZSk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV2YWx1YXRlSWZGdW5jdGlvbihtZW51SXRlbS52aXNpYmxlKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRWaXNpYmxlTWVudUl0ZW1zKCk6IHZvaWQge1xuICAgIHRoaXMudmlzaWJsZU1lbnVJdGVtcyA9IHRoaXMubWVudUl0ZW1zLmZpbHRlcihtZW51SXRlbSA9PiB0aGlzLmlzTWVudUl0ZW1WaXNpYmxlKG1lbnVJdGVtKSk7XG4gIH1cblxuICBwdWJsaWMgZXZhbHVhdGVJZkZ1bmN0aW9uKHZhbHVlOiBhbnkpOiBhbnkge1xuICAgIGlmICh2YWx1ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKSB7XG4gICAgICByZXR1cm4gdmFsdWUodGhpcy5pdGVtKTtcbiAgICB9XG4gICAgcmV0dXJuIHZhbHVlO1xuICB9XG59XG4iXX0=