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

atinc / ngx-tethys / #96

12 Aug 2025 06:20AM UTC coverage: 90.341% (+0.02%) from 90.324%
#96

push

web-flow
refactor(date-picker): migrate to signal for date-picker #TINFR-1463 (#3513)

* refactor(date-picker): migrate to signal for calendar header

* refactor(date-picker): migrate to signal for calendar footer

* refactor(date-picker): migrate to signal for calendar table

* refactor(date-picker): migrate to signal for date table cell

* refactor(date-picker): migrate to signal for date carousel

* refactor(date-picker): migrate to signal for inner-popup and date-popup

* refactor(date-picker): migrate to signal for pickers

5531 of 6813 branches covered (81.18%)

Branch coverage included in aggregate %.

342 of 367 new or added lines in 20 files covered. (93.19%)

66 existing lines in 11 files now uncovered.

13969 of 14772 relevant lines covered (94.56%)

904.1 hits per line

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

88.1
/src/date-picker/lib/calendar/calendar-header.component.ts
1
import { Directive, OnInit, Signal, effect, inject, input, model, output } from '@angular/core';
2
import { ThyPanelMode } from '../../standard-types';
3
import { coerceBooleanProperty, TinyDate } from 'ngx-tethys/util';
4
import { DateHelperService } from '../../date-helper.service';
5
import { injectLocale, ThyDatePickerLocale } from 'ngx-tethys/i18n';
6

7
export interface PanelSelector {
8
    className: string;
9
    title?: string;
10
    label: string;
1✔
11
    onClick?(): void;
12
}
220✔
13

220✔
14
/**
220✔
15
 * @private
220✔
16
 */
220✔
17
@Directive()
220✔
18
export abstract class CalendarHeader implements OnInit {
220✔
19
    protected dateHelper = inject(DateHelperService);
220✔
20

220✔
21
    protected locale: Signal<ThyDatePickerLocale> = injectLocale('datePicker');
220✔
22

220✔
23
    readonly showSuperPreBtn = input(true, { transform: coerceBooleanProperty });
442✔
24

25
    readonly showSuperNextBtn = input(true, { transform: coerceBooleanProperty });
26

27
    readonly showPreBtn = input(true, { transform: coerceBooleanProperty });
220!
NEW
28

×
29
    readonly showNextBtn = input(true, { transform: coerceBooleanProperty });
30

31
    readonly value = model<TinyDate>();
32

6✔
33
    readonly valueChange = output<TinyDate>();
34

35
    readonly panelModeChange = output<ThyPanelMode>();
7✔
36

37
    abstract getSelectors(): PanelSelector[];
38

3✔
39
    protected prefixCls = 'thy-calendar';
40

41
    protected selectors: PanelSelector[];
6✔
42

43
    constructor() {
44
        effect(() => {
12✔
45
            this.render();
46
        });
47
    }
12✔
48

12!
49
    ngOnInit(): void {
50
        if (!this.value()) {
51
            this.value.set(new TinyDate());
442!
52
        }
442✔
53
    }
54

55
    superPrevious(): void {
56
        this.gotoYear(-1);
9✔
57
    }
58

59
    superNext(): void {
13✔
60
        this.gotoYear(1);
61
    }
62

40!
63
    previous(): void {
40✔
64
        this.gotoMonth(-1);
40✔
65
    }
66

67
    next(): void {
68
        this.gotoMonth(1);
717✔
69
    }
717✔
70

71
    changePanel(mode: ThyPanelMode, value?: TinyDate): void {
4✔
72
        this.panelModeChange.emit(mode);
1✔
73
    }
74

75
    selectorClick(event: Event, selector: PanelSelector) {
76
        event.stopPropagation();
77
        return selector ? selector.onClick() : null;
78
    }
79

80
    private render(): void {
81
        if (this.value()) {
82
            this.selectors = this.getSelectors();
1✔
83
        }
84
    }
85

86
    private gotoMonth(amount: number): void {
87
        this.changeValue(this.value().addMonths(amount));
88
    }
89

90
    private gotoYear(amount: number): void {
91
        this.changeValue(this.value().addYears(amount));
92
    }
93

94
    public changeValue(value: TinyDate): void {
95
        if (this.value() !== value) {
96
            this.value.set(value);
97
            this.valueChange.emit(value);
98
        }
99
    }
100

101
    formatDateTime(format: string): string {
102
        const date = this.value().nativeDate;
103
        return this.dateHelper.format(date, format);
104
    }
105
}
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