• 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

4.84
/src/slide/slide.service.ts
1
import { ComponentTypeOrTemplateRef, ThyAbstractOverlayRef, ThyAbstractOverlayService } from 'ngx-tethys/core';
2
import { coerceArray } from 'ngx-tethys/util';
3
import { of } from 'rxjs';
4

5
import { Directionality } from '@angular/cdk/bidi';
6
import { coerceElement } from '@angular/cdk/coercion';
7
import { Overlay, OverlayConfig, OverlayRef } from '@angular/cdk/overlay';
8
import { ComponentPortal } from '@angular/cdk/portal';
9
import { Injectable, Injector, OnDestroy, StaticProvider, inject } from '@angular/core';
10

11
import { ThySlideContainer } from './slide-container.component';
12
import { ThyInternalSlideRef, ThySlideRef } from './slide-ref.service';
13
import { slideAbstractOverlayOptions, slideDefaultConfigValue, THY_SLIDE_DEFAULT_CONFIG, ThySlideConfig } from './slide.config';
14

15
/**
16
 * @public
17
 * @order 10
1✔
18
 */
UNCOV
19
@Injectable()
×
20
export class ThySlideService extends ThyAbstractOverlayService<ThySlideConfig, ThySlideContainer> implements OnDestroy {
×
21
    private originElementAddActiveClass(config: ThySlideConfig) {
22
        if (config.origin) {
23
            coerceElement<HTMLElement>(config.origin).classList.add(...coerceArray(config.originActiveClass));
UNCOV
24
        }
×
25
    }
×
26

27
    private originElementRemoveActiveClass(config: ThySlideConfig) {
28
        if (config.origin) {
UNCOV
29
            coerceElement<HTMLElement>(config.origin).classList.remove(...coerceArray(config.originActiveClass));
×
UNCOV
30
        }
×
31
    }
32

33
    protected buildOverlayConfig(config: ThySlideConfig): OverlayConfig {
UNCOV
34
        const defaultClasses: string[] = ['thy-slide-overlay-pane', `thy-slide-${config.from}`];
×
35
        const overlayConfig = {
36
            ...this.buildBaseOverlayConfig(config, defaultClasses),
UNCOV
37
            width: config.width
×
UNCOV
38
        };
×
39
        return overlayConfig;
×
40
    }
41

UNCOV
42
    protected attachOverlayContainer(overlay: OverlayRef, config: ThySlideConfig): ThySlideContainer {
×
UNCOV
43
        const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
×
UNCOV
44
        const injector = Injector.create({
×
45
            parent: userInjector || this.injector,
46
            providers: [{ provide: ThySlideConfig, useValue: config }]
UNCOV
47
        });
×
48
        const containerPortal = new ComponentPortal(ThySlideContainer, config.viewContainerRef, injector);
49
        const containerRef = overlay.attach<ThySlideContainer>(containerPortal);
UNCOV
50
        return containerRef.instance;
×
UNCOV
51
    }
×
52

53
    protected createAbstractOverlayRef<T>(
54
        overlayRef: OverlayRef,
UNCOV
55
        containerInstance: ThySlideContainer,
×
56
        config: ThySlideConfig
×
57
    ): ThyAbstractOverlayRef<T, ThySlideContainer, any> {
58
        return new ThyInternalSlideRef(overlayRef, containerInstance, config);
59
    }
60

61
    protected createInjector<T>(
62
        config: ThySlideConfig,
63
        overlayRef: ThyAbstractOverlayRef<T, ThySlideContainer, any>,
UNCOV
64
        containerInstance: ThySlideContainer
×
65
    ): Injector {
66
        const userInjector = config && config.viewContainerRef && config.viewContainerRef.injector;
UNCOV
67

×
UNCOV
68
        const injectionTokens: StaticProvider[] = [
×
UNCOV
69
            { provide: ThySlideContainer, useValue: containerInstance },
×
UNCOV
70
            { provide: ThySlideRef, useValue: overlayRef }
×
71
        ];
UNCOV
72

×
73
        if (config.direction && (!userInjector || !userInjector.get<Directionality | null>(Directionality, null))) {
74
            injectionTokens.push({
UNCOV
75
                provide: Directionality,
×
UNCOV
76
                useValue: {
×
UNCOV
77
                    value: config.direction,
×
UNCOV
78
                    change: of()
×
UNCOV
79
                }
×
80
            });
81
        }
82

83
        return Injector.create({ parent: userInjector || this.injector, providers: injectionTokens });
84
    }
UNCOV
85

×
86
    private overlayIsOpened(config: ThySlideConfig) {
×
87
        const openedOverlay = this.getAbstractOverlayById(config.id);
UNCOV
88
        const slideConfig = Object.assign({}, this.defaultConfig, config);
×
UNCOV
89
        if (!slideConfig.disableCloseLatest) {
×
UNCOV
90
            this.close(openedOverlay);
×
UNCOV
91
        }
×
92
        return openedOverlay;
UNCOV
93
    }
×
94

95
    constructor() {
UNCOV
96
        const defaultConfig = inject(THY_SLIDE_DEFAULT_CONFIG, { optional: true })!;
×
97
        const slideDefaultConfig = Object.assign({}, slideDefaultConfigValue, defaultConfig);
98
        const overlay = inject(Overlay);
1✔
99
        const injector = inject(Injector);
100

1✔
101
        super(slideAbstractOverlayOptions, overlay, injector, slideDefaultConfig);
102
    }
103

104
    /**
105
     * 打开滑动弹出框
106
     */
107
    open<T, TData = unknown, TResult = unknown>(
108
        componentOrTemplateRef: ComponentTypeOrTemplateRef<T>,
109
        config: ThySlideConfig<TData>
110
    ): ThySlideRef<T, TResult> {
111
        if (this.overlayIsOpened(config)) {
112
            return;
113
        }
114
        const slideRef = this.openOverlay<T, TResult>(componentOrTemplateRef, config);
115
        this.originElementAddActiveClass(slideRef.containerInstance.config);
116
        slideRef.afterClosed().subscribe(() => {
117
            this.originElementRemoveActiveClass(slideRef.containerInstance.config);
118
        });
119
        return slideRef;
120
    }
121

122
    ngOnDestroy() {
123
        this.dispose();
124
    }
125
}
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