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

atinc / ngx-tethys / d9ae709b-3c27-4b69-b125-b8b80b54f90b

pending completion
d9ae709b-3c27-4b69-b125-b8b80b54f90b

Pull #2757

circleci

mengshuicmq
fix: fix code review
Pull Request #2757: feat(color-picker): color-picker support disabled (#INFR-8645)

98 of 6315 branches covered (1.55%)

Branch coverage included in aggregate %.

1 of 1 new or added line in 1 file covered. (100.0%)

2392 of 13661 relevant lines covered (17.51%)

83.12 hits per line

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

20.69
/src/drag-drop/drop-container.directive.ts
1
import { OnInit, Directive, Output, EventEmitter, ContentChildren, QueryList, AfterContentInit, NgZone, Input } from '@angular/core';
2
import { ThyDragDirective } from './drag.directive';
3
import { merge, Observable, defer } from 'rxjs';
4
import { mixinUnsubscribe, MixinBase, Constructor, ThyUnsubscribe, InputBoolean } from 'ngx-tethys/core';
5
import { takeUntil, startWith, take, switchMap } from 'rxjs/operators';
6
import { ThyDragDropEvent, ThyDragStartEvent, ThyDragEndEvent, ThyDragOverEvent } from './drag-drop.class';
7
import { THY_DROP_CONTAINER_DIRECTIVE, IThyDropContainerDirective } from './drop-container.class';
8

9
const _MixinBase: Constructor<ThyUnsubscribe> & typeof MixinBase = mixinUnsubscribe(MixinBase);
1✔
10

11
/**
12
 * @name thy-drop-container,[thyDropContainer]
13
 * @order 30
14
 */
1✔
15
@Directive({
16
    selector: 'thy-drop-container,[thyDropContainer]',
×
17
    providers: [
18
        {
19
            provide: THY_DROP_CONTAINER_DIRECTIVE,
×
20
            useExisting: ThyDropContainerDirective
×
21
        }
×
22
    ],
×
23
    standalone: true
×
24
})
×
25
export class ThyDropContainerDirective<T = any> extends _MixinBase implements OnInit, AfterContentInit, IThyDropContainerDirective {
26
    /**
27
     * 元数据
28
     * @type any[]
×
29
     */
×
30
    @Input('thyDropContainer')
31
    set dragContainer(data: T[]) {
32
        this.data = data;
33
    }
×
34

×
35
    /**
36
     * 元数据
×
37
     * @type any[]
×
38
     */
39
    @Input('thyDropContainerData') data: T[];
×
40

×
41
    /**
42
     * 是否禁用拖拽
×
43
     * @default false
×
44
     */
45
    @Input('thyDropContainerDisabled') @InputBoolean() disabled: boolean;
46

47
    /**
×
48
     * 拖拽之前的回调,函数返回 false 则阻止拖拽
×
49
     */
×
50
    @Input('thyBeforeDragStart') beforeStart: (e: ThyDragStartEvent<T>) => boolean;
51

×
52
    /**
53
     * 拖拽时回调,函数返回 false 则阻止移入
54
     */
1✔
55
    @Input('thyBeforeDragOver') beforeOver: (e: ThyDragOverEvent<T>) => boolean;
56

57
    /**
1✔
58
     * 拖放到元素时回调,函数返回 false 则阻止放置
59
     */
60
    @Input('thyBeforeDragDrop') beforeDrop: (e: ThyDragDropEvent<T>) => boolean;
61

62
    /**
63
     * 开始拖拽时调用
64
     */
65
    @Output('thyDragStarted') started = new EventEmitter<ThyDragStartEvent<ThyDragDirective>>();
66

67
    /**
68
     * dragend 触发时调用
69
     */
70
    @Output('thyDragEnded') ended = new EventEmitter<ThyDragEndEvent<ThyDragDirective>>();
71

72
    /**
73
     * dragover 触发时调用
1✔
74
     */
75
    @Output('thyDragOvered') overed = new EventEmitter<ThyDragOverEvent<ThyDragDirective>>();
76

77
    /**
1✔
78
     * drop 触发时调用
79
     */
80
    @Output('thyDragDropped') dropped = new EventEmitter<ThyDragDropEvent<ThyDragDirective>>();
81

82
    /**
83
     * @internal
84
     */
85
    @ContentChildren(ThyDragDirective, {
86
        descendants: false
87
    })
88
    draggables: QueryList<ThyDragDirective>;
89

90
    constructor(private ngZone: NgZone) {
91
        super();
92
    }
93

94
    ngOnInit() {}
95

96
    ngAfterContentInit() {
97
        this.draggables.changes.pipe(startWith(null), takeUntil(this.ngUnsubscribe$)).subscribe(() => {
98
            this.draggableChanges();
99
        });
100
    }
101

102
    private draggableChanges() {
103
        this.resetDraggableChanges(item => item.dragRef.started).subscribe(event => {
104
            this.started.emit(event);
105
        });
106
        this.resetDraggableChanges(item => item.dragRef.ended).subscribe(event => {
107
            this.ended.emit(event);
108
        });
109
        this.resetDraggableChanges(item => item.dragRef.overed).subscribe(event => {
110
            this.overed.emit(event);
111
        });
112
        this.resetDraggableChanges(item => item.dragRef.dropped).subscribe(event => {
113
            this.dropped.emit(event);
114
        });
115
    }
116

117
    private resetDraggableChanges(fn: (item: ThyDragDirective) => Observable<any>) {
118
        return defer(() => {
119
            if (this.draggables) {
120
                return merge(...this.draggables.map(fn));
121
            }
122
            return this.ngZone.onStable.asObservable().pipe(
123
                take(1),
124
                switchMap(() => this.resetDraggableChanges.bind(this, fn))
125
            );
126
        }).pipe(takeUntil(merge(this.ngUnsubscribe$, this.draggables.changes))) as Observable<any>;
127
    }
128
}
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