• 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

10.71
/src/drag-drop/drop-container.directive.ts
1
import {
2
    OnInit,
3
    Directive,
4
    Output,
5
    EventEmitter,
6
    ContentChildren,
7
    QueryList,
8
    AfterContentInit,
9
    NgZone,
10
    Input,
11
    OnDestroy,
12
    inject
13
} from '@angular/core';
1✔
14
import { ThyDragDirective } from './drag.directive';
UNCOV
15
import { merge, Observable, defer, Subject } from 'rxjs';
×
UNCOV
16
import { takeUntil, startWith, take, switchMap } from 'rxjs/operators';
×
UNCOV
17
import { ThyDragDropEvent, ThyDragStartEvent, ThyDragEndEvent, ThyDragOverEvent } from './drag-drop.class';
×
UNCOV
18
import { THY_DROP_CONTAINER_DIRECTIVE, IThyDropContainerDirective } from './drag-drop.token';
×
UNCOV
19
import { coerceBooleanProperty } from 'ngx-tethys/util';
×
UNCOV
20

×
21
/**
22
 * @name thy-drop-container,[thyDropContainer]
UNCOV
23
 * @order 30
×
24
 * @deprecated please use @angular/cdk/drag-drop
25
 */
26
@Directive({
UNCOV
27
    selector: 'thy-drop-container,[thyDropContainer]',
×
UNCOV
28
    providers: [
×
29
        {
30
            provide: THY_DROP_CONTAINER_DIRECTIVE,
31
            useExisting: ThyDropContainerDirective
UNCOV
32
        }
×
UNCOV
33
    ]
×
34
})
UNCOV
35
export class ThyDropContainerDirective<T = any> implements OnInit, AfterContentInit, IThyDropContainerDirective, OnDestroy {
×
UNCOV
36
    private ngZone = inject(NgZone);
×
37

UNCOV
38
    private ngUnsubscribe$ = new Subject<void>();
×
UNCOV
39

×
40
    /**
UNCOV
41
     * 元数据
×
UNCOV
42
     * @type any[]
×
43
     */
44
    @Input('thyDropContainer')
45
    set dragContainer(data: T[]) {
UNCOV
46
        this.data = data;
×
UNCOV
47
    }
×
UNCOV
48

×
49
    /**
50
     * 元数据
×
51
     * @type any[]
52
     */
53
    @Input('thyDropContainerData') data: T[];
UNCOV
54

×
UNCOV
55
    /**
×
56
     * 是否禁用拖拽
57
     * @default false
1✔
58
     */
59
    @Input({ alias: 'thyDropContainerDisabled', transform: coerceBooleanProperty }) disabled: boolean;
60

61
    /**
62
     * 拖拽之前的回调,函数返回 false 则阻止拖拽
63
     */
64
    @Input('thyBeforeDragStart') beforeStart: (e: ThyDragStartEvent<T>) => boolean;
65

66
    /**
67
     * 拖拽时回调,函数返回 false 则阻止移入
68
     */
69
    @Input('thyBeforeDragOver') beforeOver: (e: ThyDragOverEvent<T>) => boolean;
70

71
    /**
72
     * 拖放到元素时回调,函数返回 false 则阻止放置
73
     */
1✔
74
    @Input('thyBeforeDragDrop') beforeDrop: (e: ThyDragDropEvent<T>) => boolean;
75

76
    /**
77
     * 开始拖拽时调用
78
     */
79
    @Output('thyDragStarted') started = new EventEmitter<ThyDragStartEvent<ThyDragDirective>>();
80

81
    /**
82
     * dragend 触发时调用
83
     */
84
    @Output('thyDragEnded') ended = new EventEmitter<ThyDragEndEvent<ThyDragDirective>>();
85

86
    /**
87
     * dragover 触发时调用
88
     */
89
    @Output('thyDragOvered') overed = new EventEmitter<ThyDragOverEvent<ThyDragDirective>>();
90

91
    /**
92
     * drop 触发时调用
93
     */
94
    @Output('thyDragDropped') dropped = new EventEmitter<ThyDragDropEvent<ThyDragDirective>>();
95

96
    /**
97
     * @internal
98
     */
99
    @ContentChildren(ThyDragDirective, {
100
        descendants: false
101
    })
102
    draggables: QueryList<ThyDragDirective>;
103

104
    ngOnInit() {}
105

106
    ngAfterContentInit() {
107
        this.draggables.changes.pipe(startWith(null), takeUntil(this.ngUnsubscribe$)).subscribe(() => {
108
            this.draggableChanges();
109
        });
110
    }
111

112
    private draggableChanges() {
113
        this.resetDraggableChanges(item => item.dragRef.started).subscribe(event => {
114
            this.started.emit(event);
115
        });
116
        this.resetDraggableChanges(item => item.dragRef.ended).subscribe(event => {
117
            this.ended.emit(event);
118
        });
119
        this.resetDraggableChanges(item => item.dragRef.overed).subscribe(event => {
120
            this.overed.emit(event);
121
        });
122
        this.resetDraggableChanges(item => item.dragRef.dropped).subscribe(event => {
123
            this.dropped.emit(event);
124
        });
125
    }
126

127
    private resetDraggableChanges(fn: (item: ThyDragDirective) => Observable<any>) {
128
        return defer(() => {
129
            if (this.draggables) {
130
                return merge(...this.draggables.map(fn));
131
            }
132
            return this.ngZone.onStable.asObservable().pipe(
133
                take(1),
134
                switchMap(() => this.resetDraggableChanges.bind(this, fn))
135
            );
136
        }).pipe(takeUntil(merge(this.ngUnsubscribe$, this.draggables.changes))) as Observable<any>;
137
    }
138

139
    ngOnDestroy(): void {
140
        this.ngUnsubscribe$.next();
141
        this.ngUnsubscribe$.complete();
142
    }
143
}
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