Skip to content

Commit 0695993

Browse files
authored
Merge pull request #15044 from IgniteUI/didimmova/fix-14933
fix(datepicker): fix header title templating
2 parents c8366c2 + bc3a746 commit 0695993

File tree

2 files changed

+62
-2
lines changed

2 files changed

+62
-2
lines changed

projects/igniteui-angular/src/lib/date-picker/date-picker.component.spec.ts

Lines changed: 57 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import {
66
IgxHintDirective, IgxInputGroupComponent, IgxInputState, IgxLabelDirective, IgxPrefixDirective, IgxSuffixDirective
77
} from '../input-group/public_api';
88
import { configureTestSuite } from '../test-utils/configure-suite';
9-
import { IFormattingViews, IgxCalendarComponent, WEEKDAYS } from '../calendar/public_api';
9+
import { IFormattingViews, IgxCalendarComponent, IgxCalendarHeaderTemplateDirective, IgxCalendarHeaderTitleTemplateDirective, WEEKDAYS } from '../calendar/public_api';
1010
import { IgxCalendarContainerComponent } from '../date-common/calendar-container/calendar-container.component';
1111
import { IgxDatePickerComponent } from './date-picker.component';
1212
import {
@@ -46,6 +46,7 @@ describe('IgxDatePicker', () => {
4646
IgxDatePickerTestComponent,
4747
IgxDatePickerNgModelComponent,
4848
IgxDatePickerWithProjectionsComponent,
49+
IgxDatePickerWithTemplatesComponent,
4950
IgxDatePickerInFormComponent,
5051
IgxDatePickerReactiveFormComponent
5152
]
@@ -492,6 +493,47 @@ describe('IgxDatePicker', () => {
492493
});
493494
});
494495

496+
describe('Templated Header', () => {
497+
let fixture: ComponentFixture<IgxDatePickerWithTemplatesComponent>;
498+
499+
beforeEach(fakeAsync(() => {
500+
TestBed.configureTestingModule({
501+
imports: [IgxDatePickerWithTemplatesComponent]
502+
}).compileComponents();
503+
504+
fixture = TestBed.createComponent(IgxDatePickerWithTemplatesComponent);
505+
fixture.detectChanges();
506+
}));
507+
508+
it('Should use the custom template for header title', fakeAsync(() => {
509+
const testDate = new Date(2024, 10, 11);
510+
fixture.componentInstance.datePicker.value = testDate;
511+
fixture.componentInstance.datePicker.open();
512+
tick();
513+
fixture.detectChanges();
514+
515+
const headerTitleElement = fixture.debugElement.query(By.css('.igx-calendar__header-year'));
516+
expect(headerTitleElement).toBeTruthy('Header title element should be present');
517+
if (headerTitleElement) {
518+
expect(headerTitleElement.nativeElement.textContent.trim()).toBe('2024');
519+
}
520+
}));
521+
522+
it('Should use the custom template for header', fakeAsync(() => {
523+
const testDate = new Date(2024, 10, 11);
524+
fixture.componentInstance.datePicker.value = testDate;
525+
fixture.componentInstance.datePicker.open();
526+
tick();
527+
fixture.detectChanges();
528+
529+
const headerElement = fixture.debugElement.query(By.css('.igx-calendar__header-date'));
530+
expect(headerElement).toBeTruthy('Header element should be present');
531+
if (headerElement) {
532+
expect(headerElement.nativeElement.textContent.trim()).toBe('Nov');
533+
}
534+
}));
535+
});
536+
495537
describe('UI Interaction', () => {
496538
let fixture: ComponentFixture<any>;
497539
let datePicker: IgxDatePickerComponent;
@@ -1531,6 +1573,20 @@ export class IgxDatePickerWithProjectionsComponent {
15311573
public showCustomClear = false;
15321574
}
15331575

1576+
@Component({
1577+
template: `
1578+
<igx-date-picker [mode]="mode">
1579+
<ng-template igxCalendarHeaderTitle let-formatCalendar>{{ formatCalendar.year.value }}</ng-template>
1580+
<ng-template igxCalendarHeader let-formatCalendar>{{ formatCalendar.month.value }}</ng-template>
1581+
</igx-date-picker>`,
1582+
standalone: true,
1583+
imports: [IgxDatePickerComponent, IgxCalendarHeaderTemplateDirective, IgxCalendarHeaderTitleTemplateDirective]
1584+
})
1585+
export class IgxDatePickerWithTemplatesComponent {
1586+
@ViewChild(IgxDatePickerComponent) public datePicker: IgxDatePickerComponent;
1587+
public mode: PickerInteractionMode = PickerInteractionMode.Dialog;
1588+
}
1589+
15341590
@Component({
15351591
template: `
15361592
<form #form="ngForm">

projects/igniteui-angular/src/lib/date-picker/date-picker.component.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ import {
3636
Validator
3737
} from '@angular/forms';
3838
import {
39-
IgxCalendarComponent, IgxCalendarHeaderTemplateDirective, IgxCalendarSubheaderTemplateDirective,
39+
IgxCalendarComponent, IgxCalendarHeaderTemplateDirective, IgxCalendarHeaderTitleTemplateDirective, IgxCalendarSubheaderTemplateDirective,
4040
IFormattingViews, IFormattingOptions
4141
} from '../calendar/public_api';
4242
import { isDateInRanges } from '../calendar/common/helpers';
@@ -411,6 +411,9 @@ export class IgxDatePickerComponent extends PickerBaseDirective implements Contr
411411
@ContentChild(IgxLabelDirective)
412412
public label: IgxLabelDirective;
413413

414+
@ContentChild(IgxCalendarHeaderTitleTemplateDirective)
415+
private headerTitleTemplate: IgxCalendarHeaderTitleTemplateDirective;
416+
414417
@ContentChild(IgxCalendarHeaderTemplateDirective)
415418
private headerTemplate: IgxCalendarHeaderTemplateDirective;
416419

@@ -972,6 +975,7 @@ export class IgxDatePickerComponent extends PickerBaseDirective implements Contr
972975
this._calendar.locale = this.locale;
973976
this._calendar.weekStart = this.weekStart;
974977
this._calendar.specialDates = this.specialDates;
978+
this._calendar.headerTitleTemplate = this.headerTitleTemplate;
975979
this._calendar.headerTemplate = this.headerTemplate;
976980
this._calendar.subheaderTemplate = this.subheaderTemplate;
977981
this._calendar.headerOrientation = this.headerOrientation;

0 commit comments

Comments
 (0)