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

atinc / ngx-tethys / 44f366b8-b2a7-4bb4-bf9b-8a15a455bb38

06 Jun 2025 02:47AM UTC coverage: 90.313%. Remained the same
44f366b8-b2a7-4bb4-bf9b-8a15a455bb38

push

circleci

minlovehua
refactor(grid): remove ngOnChanges

5552 of 6821 branches covered (81.4%)

Branch coverage included in aggregate %.

3 of 5 new or added lines in 1 file covered. (60.0%)

1 existing line in 1 file now uncovered.

13737 of 14537 relevant lines covered (94.5%)

903.0 hits per line

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

82.76
/src/grid/thy-row.directive.ts
1
import { Directive, effect, input } from '@angular/core';
2
import { ReplaySubject } from 'rxjs';
3
import { isString } from 'ngx-tethys/util';
4
import { useHostRenderer } from '@tethys/cdk/dom';
5

6
export type ThyRowJustify = 'start' | 'end' | 'center' | 'space-around' | 'space-between';
7
export type ThyRowAlign = 'top' | 'middle' | 'bottom';
8
export interface ThyGutterType {
9
    xs?: number;
10
    sm?: number;
11
    md?: number;
12
    lg?: number;
1✔
13
    xl?: number;
14
    xxl?: number;
4✔
15
}
4✔
16

4✔
17
/**
4✔
18
 * 栅格行指令
5✔
19
 * @name thyRow
20
 * @order 30
21
 */
22
@Directive({
5✔
23
    selector: '[thyRow]',
5✔
24
    host: {
5✔
25
        class: 'thy-row'
2✔
26
    }
27
})
5✔
28
export class ThyRowDirective {
1✔
29
    /**
1✔
30
     * 栅格的间距
31
     */
5!
NEW
32
    readonly thyGutter = input<ThyGutterType | number>();
×
UNCOV
33

×
34
    public actualGutter$ = new ReplaySubject<[number, number]>(1);
35

36
    private hostRenderer = useHostRenderer();
37

5✔
38
    constructor() {
5!
NEW
39
        effect(() => {
×
40
            this.setGutterStyle();
41
        });
5✔
42
    }
43

1✔
44
    private setGutterStyle() {
1✔
45
        const [horizontalGutter, verticalGutter] = this.getGutter();
46
        this.actualGutter$.next([horizontalGutter, verticalGutter]);
47
        const renderGutter = (name: string, gutter: number) => {
48
            this.hostRenderer.setStyle(name, `-${gutter / 2}px`);
1✔
49
        };
50
        if (horizontalGutter > 0) {
51
            renderGutter('margin-left', horizontalGutter);
52
            renderGutter('margin-right', horizontalGutter);
53
        }
54
        if (verticalGutter > 0) {
55
            renderGutter('margin-top', verticalGutter);
56
            renderGutter('margin-bottom', verticalGutter);
57
        }
58
    }
59

60
    private getGutter() {
61
        const thyGutter = this.thyGutter();
62
        if (isString(thyGutter)) {
63
            throw Error(`thyGutter value can not be string type`);
64
        }
65
        return [thyGutter as number, 0];
66
    }
67
}
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