• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

atinc / ngx-tethys / 68ef226c-f83e-44c1-b8ed-e420a83c5d84

28 May 2025 10:31AM UTC coverage: 10.352% (-80.0%) from 90.316%
68ef226c-f83e-44c1-b8ed-e420a83c5d84

Pull #3460

circleci

pubuzhixing8
chore: xxx
Pull Request #3460: refactor(icon): migrate signal input #TINFR-1476

132 of 6823 branches covered (1.93%)

Branch coverage included in aggregate %.

10 of 14 new or added lines in 1 file covered. (71.43%)

11648 existing lines in 344 files now uncovered.

2078 of 14525 relevant lines covered (14.31%)

6.69 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

8.11
/src/resizable/resizable.service.ts
1
import { DOCUMENT } from '@angular/common';
2
import { Injectable, NgZone, OnDestroy, inject } from '@angular/core';
3
import { isTouchEvent } from 'ngx-tethys/util';
4
import { Subject } from 'rxjs';
5
import { ThyResizeHandleMouseDownEvent } from './interface';
6

7
/**
8
 * @internal
9
 */
1✔
10
@Injectable()
UNCOV
11
export class ThyResizableService implements OnDestroy {
×
UNCOV
12
    private ngZone = inject(NgZone);
×
13

14
    private document: Document;
15
    private listeners = new Map<string, (event: MouseEvent | TouchEvent) => void>();
16

17
    /**
18
     * The `OutsideAngular` prefix means that the subject will emit events outside of the Angular zone,
19
     * so that becomes a bit more descriptive for those who'll maintain the code in the future:
20
     * ```ts
21
     * thyResizableService.handleMouseDownOutsideAngular$.subscribe(event => {
22
     *   console.log(Zone.current); // <root>
UNCOV
23
     *   console.log(NgZone.isInAngularZone()); // false
×
UNCOV
24
     * });
×
UNCOV
25
     * ```
×
UNCOV
26
     */
×
UNCOV
27

×
UNCOV
28
    handleMouseDownOutsideAngular$ = new Subject<ThyResizeHandleMouseDownEvent>();
×
29
    documentMouseUpOutsideAngular$ = new Subject<MouseEvent | TouchEvent>();
30
    documentMouseMoveOutsideAngular$ = new Subject<MouseEvent | TouchEvent>();
UNCOV
31
    mouseEnteredOutsideAngular$ = new Subject<boolean>();
×
UNCOV
32

×
UNCOV
33
    constructor() {
×
UNCOV
34
        const document = inject(DOCUMENT);
×
UNCOV
35

×
UNCOV
36
        this.document = document;
×
37
    }
UNCOV
38

×
UNCOV
39
    startResizing(event: MouseEvent | TouchEvent): void {
×
UNCOV
40
        const _isTouchEvent = isTouchEvent(event);
×
41
        this.clearListeners();
UNCOV
42
        const moveEvent = _isTouchEvent ? 'touchmove' : 'mousemove';
×
UNCOV
43
        const upEvent = _isTouchEvent ? 'touchend' : 'mouseup';
×
UNCOV
44
        const moveEventHandler = (e: MouseEvent | TouchEvent) => {
×
UNCOV
45
            this.documentMouseMoveOutsideAngular$.next(e);
×
UNCOV
46
        };
×
47
        const upEventHandler = (e: MouseEvent | TouchEvent) => {
48
            this.documentMouseUpOutsideAngular$.next(e);
49
            this.clearListeners();
50
        };
UNCOV
51

×
UNCOV
52
        this.listeners.set(moveEvent, moveEventHandler);
×
53
        this.listeners.set(upEvent, upEventHandler);
UNCOV
54
        this.ngZone.runOutsideAngular(() => {
×
55
            this.listeners.forEach((handler, name) => {
56
                this.document.addEventListener(name, handler as EventListener);
UNCOV
57
            });
×
UNCOV
58
        });
×
UNCOV
59
    }
×
UNCOV
60

×
UNCOV
61
    private clearListeners(): void {
×
62
        this.listeners.forEach((handler, name) => {
63
            this.document.removeEventListener(name, handler as EventListener);
1✔
64
        });
65
        this.listeners.clear();
1✔
66
    }
67

68
    ngOnDestroy(): void {
69
        this.handleMouseDownOutsideAngular$.complete();
70
        this.documentMouseUpOutsideAngular$.complete();
71
        this.documentMouseMoveOutsideAngular$.complete();
72
        this.mouseEnteredOutsideAngular$.complete();
73
        this.clearListeners();
74
    }
75
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc