mirror of
https://github.com/Alfresco/alfresco-ng2-components.git
synced 2025-05-26 17:24:56 +00:00
Fix buggy context-menu behaviour after cdk update (#2672)
This commit is contained in:
parent
d138d6af16
commit
a62d550325
@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
import { OverlayContainer } from '@angular/cdk/overlay';
|
import { OverlayContainer } from '@angular/cdk/overlay';
|
||||||
import { ViewportRuler } from '@angular/cdk/scrolling';
|
import { ViewportRuler } from '@angular/cdk/scrolling';
|
||||||
import { ComponentFixture, TestBed } from '@angular/core/testing';
|
import { fakeAsync, ComponentFixture, TestBed, tick } from '@angular/core/testing';
|
||||||
import { ContextMenuHolderComponent } from './context-menu-holder.component';
|
import { ContextMenuHolderComponent } from './context-menu-holder.component';
|
||||||
import { ContextMenuModule } from './context-menu.module';
|
import { ContextMenuModule } from './context-menu.module';
|
||||||
import { ContextMenuService } from './context-menu.service';
|
import { ContextMenuService } from './context-menu.service';
|
||||||
@ -148,61 +148,65 @@ describe('ContextMenuHolderComponent', () => {
|
|||||||
component.mdMenuElement.clientWidth = 200;
|
component.mdMenuElement.clientWidth = 200;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should set position to mouse position', () => {
|
it('should set position to mouse position', fakeAsync(() => {
|
||||||
const contextMenuEvent = {
|
const contextMenuEvent = {
|
||||||
clientX: 100,
|
clientX: 100,
|
||||||
clientY: 210
|
clientY: 210
|
||||||
};
|
};
|
||||||
|
|
||||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||||
|
tick();
|
||||||
|
|
||||||
expect(component.mdMenuElement.parentElement.style).toEqual({
|
expect(component.mdMenuElement.parentElement.style).toEqual({
|
||||||
left: '100px',
|
left: '100px',
|
||||||
top: '210px'
|
top: '210px'
|
||||||
});
|
});
|
||||||
});
|
}));
|
||||||
|
|
||||||
it('should ajust position relative to right margin of the screen', () => {
|
it('should ajust position relative to right margin of the screen', fakeAsync(() => {
|
||||||
const contextMenuEvent = {
|
const contextMenuEvent = {
|
||||||
clientX: 1000,
|
clientX: 1000,
|
||||||
clientY: 210
|
clientY: 210
|
||||||
};
|
};
|
||||||
|
|
||||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||||
|
tick();
|
||||||
|
|
||||||
expect(component.mdMenuElement.parentElement.style).toEqual({
|
expect(component.mdMenuElement.parentElement.style).toEqual({
|
||||||
left: '800px',
|
left: '800px',
|
||||||
top: '210px'
|
top: '210px'
|
||||||
});
|
});
|
||||||
});
|
}));
|
||||||
|
|
||||||
it('should ajust position relative to bottom margin of the screen', () => {
|
it('should ajust position relative to bottom margin of the screen', fakeAsync(() => {
|
||||||
const contextMenuEvent = {
|
const contextMenuEvent = {
|
||||||
clientX: 100,
|
clientX: 100,
|
||||||
clientY: 600
|
clientY: 600
|
||||||
};
|
};
|
||||||
|
|
||||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||||
|
tick();
|
||||||
|
|
||||||
expect(component.mdMenuElement.parentElement.style).toEqual({
|
expect(component.mdMenuElement.parentElement.style).toEqual({
|
||||||
left: '100px',
|
left: '100px',
|
||||||
top: '440px'
|
top: '440px'
|
||||||
});
|
});
|
||||||
});
|
}));
|
||||||
|
|
||||||
it('should ajust position relative to bottom - right margin of the screen', () => {
|
it('should ajust position relative to bottom - right margin of the screen', fakeAsync(() => {
|
||||||
const contextMenuEvent = {
|
const contextMenuEvent = {
|
||||||
clientX: 900,
|
clientX: 900,
|
||||||
clientY: 610
|
clientY: 610
|
||||||
};
|
};
|
||||||
|
|
||||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||||
|
tick();
|
||||||
|
|
||||||
expect(component.mdMenuElement.parentElement.style).toEqual({
|
expect(component.mdMenuElement.parentElement.style).toEqual({
|
||||||
left: '700px',
|
left: '700px',
|
||||||
top: '450px'
|
top: '450px'
|
||||||
});
|
});
|
||||||
});
|
}));
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('Menu direction', () => {
|
describe('Menu direction', () => {
|
||||||
@ -212,52 +216,56 @@ describe('ContextMenuHolderComponent', () => {
|
|||||||
component.mdMenuElement.clientWidth = 200;
|
component.mdMenuElement.clientWidth = 200;
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should set default menu direction', () => {
|
it('should set default menu direction', fakeAsync(() => {
|
||||||
const contextMenuEvent = {
|
const contextMenuEvent = {
|
||||||
clientX: 100,
|
clientX: 100,
|
||||||
clientY: 210
|
clientY: 210
|
||||||
};
|
};
|
||||||
|
|
||||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||||
|
tick();
|
||||||
|
|
||||||
expect(component.menuTrigger.menu.xPosition).toBe('after');
|
expect(component.menuTrigger.menu.xPosition).toBe('after');
|
||||||
expect(component.menuTrigger.menu.yPosition).toBe('below');
|
expect(component.menuTrigger.menu.yPosition).toBe('below');
|
||||||
});
|
}));
|
||||||
|
|
||||||
it('should ajust direction relative to right margin of the screen', () => {
|
it('should ajust direction relative to right margin of the screen', fakeAsync(() => {
|
||||||
const contextMenuEvent = {
|
const contextMenuEvent = {
|
||||||
clientX: 1000,
|
clientX: 1000,
|
||||||
clientY: 210
|
clientY: 210
|
||||||
};
|
};
|
||||||
|
|
||||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||||
|
tick();
|
||||||
|
|
||||||
expect(component.menuTrigger.menu.xPosition).toBe('before');
|
expect(component.menuTrigger.menu.xPosition).toBe('before');
|
||||||
expect(component.menuTrigger.menu.yPosition).toBe('below');
|
expect(component.menuTrigger.menu.yPosition).toBe('below');
|
||||||
});
|
}));
|
||||||
|
|
||||||
it('should ajust direction relative to bottom margin of the screen', () => {
|
it('should ajust direction relative to bottom margin of the screen', fakeAsync(() => {
|
||||||
const contextMenuEvent = {
|
const contextMenuEvent = {
|
||||||
clientX: 100,
|
clientX: 100,
|
||||||
clientY: 600
|
clientY: 600
|
||||||
};
|
};
|
||||||
|
|
||||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||||
|
tick();
|
||||||
|
|
||||||
expect(component.menuTrigger.menu.xPosition).toBe('after');
|
expect(component.menuTrigger.menu.xPosition).toBe('after');
|
||||||
expect(component.menuTrigger.menu.yPosition).toBe('above');
|
expect(component.menuTrigger.menu.yPosition).toBe('above');
|
||||||
});
|
}));
|
||||||
|
|
||||||
it('should ajust position relative to bottom - right margin of the screen', () => {
|
it('should ajust position relative to bottom - right margin of the screen', fakeAsync(() => {
|
||||||
const contextMenuEvent = {
|
const contextMenuEvent = {
|
||||||
clientX: 900,
|
clientX: 900,
|
||||||
clientY: 610
|
clientY: 610
|
||||||
};
|
};
|
||||||
|
|
||||||
component.showMenu(<any> contextMenuEvent, [{}]);
|
component.showMenu(<any> contextMenuEvent, [{}]);
|
||||||
|
tick();
|
||||||
|
|
||||||
expect(component.menuTrigger.menu.xPosition).toBe('before');
|
expect(component.menuTrigger.menu.xPosition).toBe('before');
|
||||||
expect(component.menuTrigger.menu.yPosition).toBe('above');
|
expect(component.menuTrigger.menu.yPosition).toBe('above');
|
||||||
});
|
}));
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -66,7 +66,7 @@ export class ContextMenuHolderComponent implements OnInit, OnDestroy {
|
|||||||
@HostListener('window:resize', ['$event'])
|
@HostListener('window:resize', ['$event'])
|
||||||
onResize(event) {
|
onResize(event) {
|
||||||
if (this.mdMenuElement) {
|
if (this.mdMenuElement) {
|
||||||
this.setPosition();
|
this.setPositionAfterCDKrecalculation();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,10 +130,16 @@ export class ContextMenuHolderComponent implements OnInit, OnDestroy {
|
|||||||
this.menuTrigger.openMenu();
|
this.menuTrigger.openMenu();
|
||||||
|
|
||||||
if (this.mdMenuElement) {
|
if (this.mdMenuElement) {
|
||||||
this.setPosition();
|
this.setPositionAfterCDKrecalculation();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
setPositionAfterCDKrecalculation() {
|
||||||
|
setTimeout(() => {
|
||||||
|
this.setPosition();
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
|
||||||
get mdMenuElement() {
|
get mdMenuElement() {
|
||||||
return this.menuElement;
|
return this.menuElement;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user