Skip to content

Commit 3597cc3

Browse files
fix(ui5-calendar): show year range text in year view (#11473)
downport: #11468
1 parent 23db845 commit 3597cc3

File tree

4 files changed

+38
-7
lines changed

4 files changed

+38
-7
lines changed

packages/main/src/Calendar.ts

Lines changed: 17 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -265,6 +265,12 @@ class Calendar extends CalendarPart {
265265
@property()
266266
_headerYearButtonTextSecType?: string;
267267

268+
@property()
269+
_headerYearRangeButtonText?: string;
270+
271+
@property()
272+
_headerYearRangeButtonTextSecType?: string;
273+
268274
@property({ noAttribute: true })
269275
_pickersMode: `${CalendarPickersMode}` = "DAY_MONTH_YEAR";
270276

@@ -477,16 +483,16 @@ class Calendar extends CalendarPart {
477483
const yearFormat = DateFormat.getDateInstance({ format: "y", calendarType: this.primaryCalendarType });
478484
const localeData = getCachedLocaleDataInstance(getLocale());
479485
this._headerMonthButtonText = localeData.getMonthsStandAlone("wide", this.primaryCalendarType)[this._calendarDate.getMonth()];
486+
this._headerYearButtonText = String(yearFormat.format(this._localDate, true));
480487

481488
if (this._currentPicker === "year") {
482489
const rangeStart = new CalendarDateComponent(this._calendarDate, this._primaryCalendarType);
483490
const rangeEnd = new CalendarDateComponent(this._calendarDate, this._primaryCalendarType);
491+
484492
rangeStart.setYear(this._currentPickerDOM._firstYear!);
485493
rangeEnd.setYear(this._currentPickerDOM._lastYear!);
486494

487-
this._headerYearButtonText = `${yearFormat.format(rangeStart.toLocalJSDate(), true)} - ${yearFormat.format(rangeEnd.toLocalJSDate(), true)}`;
488-
} else {
489-
this._headerYearButtonText = String(yearFormat.format(this._localDate, true));
495+
this._headerYearRangeButtonText = `${yearFormat.format(rangeStart.toLocalJSDate())} - ${yearFormat.format(rangeEnd.toLocalJSDate())}`;
490496
}
491497

492498
this._secondaryCalendarType && this._setSecondaryCalendarTypeButtonText();
@@ -553,20 +559,21 @@ class Calendar extends CalendarPart {
553559

554560
_setSecondaryCalendarTypeButtonText() {
555561
const yearFormatSecType = DateFormat.getDateInstance({ format: "y", calendarType: this._secondaryCalendarType });
562+
this._headerYearButtonTextSecType = String(yearFormatSecType.format(this._localDate, true));
556563

557564
if (this._currentPicker === "year") {
558565
const rangeStart = new CalendarDateComponent(this._calendarDate, this._primaryCalendarType);
559566
const rangeEnd = new CalendarDateComponent(this._calendarDate, this._primaryCalendarType);
567+
560568
rangeStart.setYear(this._currentPickerDOM._firstYear!);
561569
rangeEnd.setYear(this._currentPickerDOM._lastYear!);
562570

563571
const rangeStartSecType = transformDateToSecondaryType(this.primaryCalendarType, this._secondaryCalendarType, rangeStart.valueOf() / 1000, true)
564572
.firstDate;
565573
const rangeEndSecType = transformDateToSecondaryType(this.primaryCalendarType, this._secondaryCalendarType, rangeEnd.valueOf() / 1000, true)
566574
.lastDate;
567-
this._headerYearButtonTextSecType = `${yearFormatSecType.format(rangeStartSecType.toLocalJSDate(), true)} - ${yearFormatSecType.format(rangeEndSecType.toLocalJSDate(), true)}`;
568-
} else {
569-
this._headerYearButtonTextSecType = String(yearFormatSecType.format(this._localDate, true));
575+
576+
this._headerYearRangeButtonTextSecType = `${yearFormatSecType.format(rangeStartSecType.toLocalJSDate())} - ${yearFormatSecType.format(rangeEndSecType.toLocalJSDate())}`;
570577
}
571578
}
572579

@@ -616,6 +623,10 @@ class Calendar extends CalendarPart {
616623
return this._currentPicker !== "year";
617624
}
618625

626+
get _isHeaderYearRangeButtonHidden() {
627+
return this._currentPicker !== "year";
628+
}
629+
619630
_fireEventAndUpdateSelectedDates(selectedDates: Array<number>) {
620631
const datesValues = selectedDates.map(timestamp => {
621632
const calendarDate = CalendarDateComponent.fromTimestamp(timestamp * 1000, this._primaryCalendarType);

packages/main/src/CalendarHeaderTemplate.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,18 @@ export default function CalendarTemplate(this: Calendar) {
5353
<span class="ui5-calheader-btn-sectext">{this._headerYearButtonTextSecType}</span>
5454
}
5555
</div>
56+
57+
<div
58+
data-ui5-cal-header-btn-year-range
59+
class="ui5-calheader-arrowbtn ui5-calheader-middlebtn ui5-calheader-yearrange-btn-disabled"
60+
hidden={this._isHeaderYearRangeButtonHidden}
61+
tabindex={-1}
62+
>
63+
<span>{this._headerYearRangeButtonText}</span>
64+
{this.hasSecondaryCalendarType &&
65+
<span class="ui5-calheader-btn-sectext">{this._headerYearRangeButtonTextSecType}</span>
66+
}
67+
</div>
5668
</div>
5769

5870
<div

packages/main/src/YearPickerTemplate.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export default function YearPickerTemplate(this: YearPicker) {
3030
</span>
3131
{
3232
year.yearInSecType &&
33-
<span class="ui5-yp-year-sec-type">
33+
<span class="ui5-yp-item-sec-type">
3434
{year.yearInSecType}
3535
</span>
3636
}

packages/main/src/themes/CalendarHeader.css

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -131,3 +131,11 @@
131131
.ui5-calheader-middlebtn:focus:active::after {
132132
border-color: var(--sapContent_ContrastFocusColor);
133133
}
134+
135+
.ui5-calheader-middlebtn.ui5-calheader-yearrange-btn-disabled {
136+
pointer-events: none;
137+
}
138+
139+
.ui5-calheader-middlebtn.ui5-calheader-yearrange-btn-disabled:active .ui5-calheader-btn-sectext {
140+
color: var(--sapNeutralElementColor);
141+
}

0 commit comments

Comments
 (0)