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

atinc / ngx-tethys / 5fa9630c-19a1-4ee7-af3d-6a0c3535952a

08 Oct 2024 08:24AM UTC coverage: 90.438% (+0.007%) from 90.431%
5fa9630c-19a1-4ee7-af3d-6a0c3535952a

push

circleci

minlovehua
refactor: refactor all control-flow directives to new control-flow #TINFR-381

5511 of 6738 branches covered (81.79%)

Branch coverage included in aggregate %.

98 of 104 new or added lines in 58 files covered. (94.23%)

113 existing lines in 17 files now uncovered.

13253 of 14010 relevant lines covered (94.6%)

991.73 hits per line

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

86.79
/src/date-picker/lib/popups/inner-popup.component.ts
1
import {
2
    ChangeDetectionStrategy,
3
    Component,
4
    EventEmitter,
5
    HostBinding,
6
    Input,
7
    OnChanges,
8
    Output,
9
    SimpleChanges,
10
    TemplateRef
11
} from '@angular/core';
12

13
import { FunctionProp, TinyDate, coerceBooleanProperty } from 'ngx-tethys/util';
14
import { DateHelperService } from '../../date-helper.service';
15
import { RangePartType } from '../../inner-types';
16
import { isAfterMoreThanLessOneYear, isAfterMoreThanOneDecade, isAfterMoreThanOneMonth, isAfterMoreThanOneYear } from '../../picker.util';
17
import { DisabledDateFn, ThyPanelMode } from '../../standard-types';
18
import { DateHeader } from '../date/date-header.component';
19
import { DateTable } from '../date/date-table.component';
20

1✔
21
import { ThyInputDirective } from 'ngx-tethys/input';
22
import { DecadeHeader } from '../decade/decade-header.component';
202✔
23
import { DecadeTable } from '../decade/decade-table.component';
24
import { MonthHeader } from '../month/month-header.component';
25
import { MonthTable } from '../month/month-table.component';
470✔
26
import { YearHeader } from '../year/year-header.component';
27
import { YearTable } from '../year/year-table.component';
28
import { QuarterTable } from '../quarter/quarter-table.component';
200✔
29

200✔
30
/**
200✔
31
 * @private
200✔
32
 */
200✔
33
@Component({
200✔
34
    changeDetection: ChangeDetectionStrategy.OnPush,
200✔
35
    // eslint-disable-next-line @angular-eslint/component-selector
200✔
36
    selector: 'inner-popup',
37
    exportAs: 'innerPopup',
38
    templateUrl: 'inner-popup.component.html',
470✔
39
    standalone: true,
70✔
40
    imports: [
41
        ThyInputDirective,
470!
42
        DecadeHeader,
×
43
        DecadeTable,
44
        YearHeader,
45
        YearTable,
46
        MonthHeader,
8✔
47
        MonthTable,
48
        QuarterTable,
49
        DateHeader,
28!
50
        DateTable
28✔
51
    ]
52
})
53
export class InnerPopup implements OnChanges {
3✔
54
    @HostBinding('class.thy-calendar-picker-inner-popup') className = true;
3✔
55
    @HostBinding('class.thy-calendar-picker-inner-popup-with-range-input') _showDateRangeInput = false;
2✔
56

2✔
57
    @Input() showWeek: boolean;
58
    @Input() isRange: boolean;
59
    @Input() activeDate: TinyDate;
1✔
60
    @Input() rangeActiveDate: TinyDate[]; // Range ONLY
1✔
61
    @Input() enablePrev: boolean;
62
    @Input() enableNext: boolean;
63
    @Input() disabledDate: DisabledDateFn;
64
    @Input() dateRender: FunctionProp<TemplateRef<Date> | string>;
2✔
65
    @Input() selectedValue: TinyDate[]; // Range ONLY
2!
66
    @Input() hoverValue: TinyDate[]; // Range ONLY
2✔
67

2✔
68
    @Input() panelMode: ThyPanelMode;
69

UNCOV
70
    @Input({ transform: coerceBooleanProperty })
×
UNCOV
71
    set showDateRangeInput(value: boolean) {
×
72
        this._showDateRangeInput = value;
73
    }
74

75
    get showDateRangeInput() {
3✔
76
        return this._showDateRangeInput;
3✔
77
    }
2✔
78

2✔
79
    @Input() partType: RangePartType;
80

81
    @Input() endPanelMode: ThyPanelMode;
1✔
82

1✔
83
    @Output() readonly panelModeChange = new EventEmitter<ThyPanelMode>();
84

85
    @Input() value: TinyDate;
UNCOV
86

×
UNCOV
87
    @Output() readonly headerChange = new EventEmitter<TinyDate>();
×
88
    @Output() readonly selectDate = new EventEmitter<TinyDate>();
×
89
    @Output() readonly dayHover = new EventEmitter<TinyDate>();
×
90

91
    prefixCls = 'thy-calendar';
UNCOV
92

×
UNCOV
93
    constructor(private dateHelper: DateHelperService) {}
×
94

95
    ngOnChanges(changes: SimpleChanges): void {
96
        if (changes.activeDate && !changes.activeDate.currentValue) {
97
            this.activeDate = new TinyDate();
736✔
98
        }
452✔
99
        if (changes.panelMode && changes.panelMode.currentValue === 'time') {
198✔
100
            this.panelMode = 'date';
198✔
101
        }
102
    }
103

254✔
104
    getReadableValue(value: TinyDate) {
105
        return value ? this.dateHelper.format(value.nativeDate, 'yyyy-MM-dd') : '';
106
    }
107

284✔
108
    onSelectDate(date: TinyDate | Date): void {
109
        const value = date instanceof TinyDate ? date : new TinyDate(date);
110

111
        this.selectDate.emit(value);
940✔
112
    }
522✔
113

233✔
114
    onChooseMonth(value: TinyDate): void {
233✔
115
        this.activeDate = this.activeDate.setMonth(value.getMonth());
198✔
116
        if (this.endPanelMode === 'month') {
117
            this.value = value;
35✔
118
            this.selectDate.emit(value);
26✔
119
        } else {
120
            this.headerChange.emit(value);
9✔
121
            this.panelModeChange.emit(this.endPanelMode);
5✔
122
        }
123
    }
124

125
    onChooseQuarter(value: TinyDate): void {
289✔
126
        this.activeDate = this.activeDate.setQuarter(value.getQuarter());
127
        if (this.endPanelMode === 'quarter') {
128
            this.value = value;
129
            this.selectDate.emit(value);
418✔
130
        } else {
131
            this.headerChange.emit(value);
132
            this.panelModeChange.emit(this.endPanelMode);
1✔
133
        }
134
    }
135

1✔
136
    onChooseYear(value: TinyDate): void {
137
        this.activeDate = this.activeDate.setYear(value.getYear());
138
        if (this.endPanelMode === 'year') {
139
            this.value = value;
140
            this.selectDate.emit(value);
141
        } else {
142
            this.headerChange.emit(value);
143
            this.panelModeChange.emit(this.endPanelMode);
144
        }
145
    }
146

147
    onChooseDecade(value: TinyDate): void {
148
        this.activeDate = this.activeDate.setYear(value.getYear());
149
        if (this.endPanelMode === 'decade') {
150
            this.value = value;
151
            this.selectDate.emit(value);
152
        } else {
153
            this.headerChange.emit(value);
154
            this.panelModeChange.emit('year');
155
        }
156
    }
157

158
    enablePrevNext(direction: 'prev' | 'next', mode: ThyPanelMode): boolean {
159
        if (this.isRange) {
1✔
160
            if ((this.partType === 'left' && direction === 'next') || (this.partType === 'right' && direction === 'prev')) {
161
                const [headerLeftDate, headerRightDate] = this.rangeActiveDate;
162
                return isAfterMoreThanOneMonth(headerRightDate, headerLeftDate);
163
            } else {
164
                return true;
165
            }
166
        } else {
167
            return true;
168
        }
169
    }
170

171
    enableSuperPrevNext(direction: 'prev' | 'next', panelMode: ThyPanelMode) {
172
        if (this.isRange) {
173
            if ((this.partType === 'left' && direction === 'next') || (this.partType === 'right' && direction === 'prev')) {
174
                const [headerLeftDate, headerRightDate] = this.rangeActiveDate;
175
                if (panelMode === 'date') {
176
                    return isAfterMoreThanLessOneYear(headerRightDate, headerLeftDate);
177
                } else if (panelMode === 'month' || panelMode === 'quarter') {
178
                    return isAfterMoreThanOneYear(headerRightDate, headerLeftDate);
179
                } else if (panelMode === 'year') {
180
                    return isAfterMoreThanOneDecade(headerRightDate, headerLeftDate);
181
                }
182
            } else {
183
                return true;
184
            }
185
        } else {
186
            return true;
187
        }
188
    }
189
}
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