feat(image-modal): enhance gesture handling and improve pinch zoom functionality
This commit is contained in:
@@ -76,7 +76,7 @@ describe('ImageModalComponent', () => {
|
||||
expect(zoomOut.disabled).toBe(true);
|
||||
});
|
||||
|
||||
it('supports pinch zoom through touch pointer events', () => {
|
||||
it('supports pinch zoom through touch pointer events', async () => {
|
||||
const viewport = fixture.nativeElement.querySelector('.image-modal__viewport') as HTMLElement;
|
||||
const zoom = fixture.nativeElement.querySelector(
|
||||
'[aria-label="Restablecer zoom"]',
|
||||
@@ -85,17 +85,19 @@ describe('ImageModalComponent', () => {
|
||||
viewport.dispatchEvent(pointerEvent('pointerdown', 1, 100, 100));
|
||||
viewport.dispatchEvent(pointerEvent('pointerdown', 2, 200, 100));
|
||||
viewport.dispatchEvent(pointerEvent('pointermove', 2, 250, 100));
|
||||
await renderNextFrame();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(zoom.textContent).toContain('150%');
|
||||
});
|
||||
|
||||
it('dismisses with a downward swipe while the image is at its base zoom', () => {
|
||||
it('dismisses with a downward swipe while the image is at its base zoom', async () => {
|
||||
const viewport = fixture.nativeElement.querySelector('.image-modal__viewport') as HTMLElement;
|
||||
const modal = fixture.nativeElement.querySelector('.image-modal') as HTMLElement;
|
||||
|
||||
viewport.dispatchEvent(pointerEvent('pointerdown', 1, 150, 100));
|
||||
viewport.dispatchEvent(pointerEvent('pointermove', 1, 155, 230));
|
||||
await renderNextFrame();
|
||||
fixture.detectChanges();
|
||||
|
||||
expect(modal.style.transform).toBe('translate3d(0, 130px, 0)');
|
||||
@@ -106,12 +108,13 @@ describe('ImageModalComponent', () => {
|
||||
expect(modalRef.dismiss).toHaveBeenCalledWith('swipe');
|
||||
});
|
||||
|
||||
it('returns smoothly to its position when the swipe is too short', () => {
|
||||
it('returns smoothly to its position when the swipe is too short', async () => {
|
||||
const viewport = fixture.nativeElement.querySelector('.image-modal__viewport') as HTMLElement;
|
||||
const modal = fixture.nativeElement.querySelector('.image-modal') as HTMLElement;
|
||||
|
||||
viewport.dispatchEvent(pointerEvent('pointerdown', 1, 150, 100));
|
||||
viewport.dispatchEvent(pointerEvent('pointermove', 1, 150, 160));
|
||||
await renderNextFrame();
|
||||
fixture.detectChanges();
|
||||
expect(modal.style.transform).toBe('translate3d(0, 60px, 0)');
|
||||
|
||||
@@ -156,3 +159,7 @@ function pointerEvent(type: string, pointerId: number, clientX: number, clientY:
|
||||
});
|
||||
return event;
|
||||
}
|
||||
|
||||
async function renderNextFrame(): Promise<void> {
|
||||
await new Promise<void>((resolve) => requestAnimationFrame(() => resolve()));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user