Skip to content

Commit de4b13a

Browse files
authored
docs(material/datepicker): Update datepicker docs & examples (#29236)
1 parent 70780a6 commit de4b13a

File tree

35 files changed

+210
-233
lines changed

35 files changed

+210
-233
lines changed

src/components-examples/material/datepicker/date-range-picker-comparison/date-range-picker-comparison-example.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
import {Component} from '@angular/core';
2-
import {FormGroup, FormControl, FormsModule, ReactiveFormsModule} from '@angular/forms';
1+
import {ChangeDetectionStrategy, Component} from '@angular/core';
2+
import {FormControl, FormGroup, FormsModule, ReactiveFormsModule} from '@angular/forms';
33
import {provideNativeDateAdapter} from '@angular/material/core';
44
import {MatDatepickerModule} from '@angular/material/datepicker';
55
import {MatFormFieldModule} from '@angular/material/form-field';
@@ -16,13 +16,14 @@ const year = today.getFullYear();
1616
standalone: true,
1717
providers: [provideNativeDateAdapter()],
1818
imports: [MatFormFieldModule, MatDatepickerModule, FormsModule, ReactiveFormsModule],
19+
changeDetection: ChangeDetectionStrategy.OnPush,
1920
})
2021
export class DateRangePickerComparisonExample {
21-
campaignOne = new FormGroup({
22+
readonly campaignOne = new FormGroup({
2223
start: new FormControl(new Date(year, month, 13)),
2324
end: new FormControl(new Date(year, month, 16)),
2425
});
25-
campaignTwo = new FormGroup({
26+
readonly campaignTwo = new FormGroup({
2627
start: new FormControl(new Date(year, month, 15)),
2728
end: new FormControl(new Date(year, month, 19)),
2829
});

src/components-examples/material/datepicker/date-range-picker-forms/date-range-picker-forms-example.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import {Component} from '@angular/core';
2-
import {FormGroup, FormControl, FormsModule, ReactiveFormsModule} from '@angular/forms';
31
import {JsonPipe} from '@angular/common';
2+
import {ChangeDetectionStrategy, Component} from '@angular/core';
3+
import {FormControl, FormGroup, FormsModule, ReactiveFormsModule} from '@angular/forms';
4+
import {provideNativeDateAdapter} from '@angular/material/core';
45
import {MatDatepickerModule} from '@angular/material/datepicker';
56
import {MatFormFieldModule} from '@angular/material/form-field';
6-
import {provideNativeDateAdapter} from '@angular/material/core';
77

88
/** @title Date range picker forms integration */
99
@Component({
@@ -12,9 +12,10 @@ import {provideNativeDateAdapter} from '@angular/material/core';
1212
standalone: true,
1313
providers: [provideNativeDateAdapter()],
1414
imports: [MatFormFieldModule, MatDatepickerModule, FormsModule, ReactiveFormsModule, JsonPipe],
15+
changeDetection: ChangeDetectionStrategy.OnPush,
1516
})
1617
export class DateRangePickerFormsExample {
17-
range = new FormGroup({
18+
readonly range = new FormGroup({
1819
start: new FormControl<Date | null>(null),
1920
end: new FormControl<Date | null>(null),
2021
});

src/components-examples/material/datepicker/date-range-picker-overview/date-range-picker-overview-example.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Component} from '@angular/core';
1+
import {ChangeDetectionStrategy, Component} from '@angular/core';
22
import {provideNativeDateAdapter} from '@angular/material/core';
33
import {MatDatepickerModule} from '@angular/material/datepicker';
44
import {MatFormFieldModule} from '@angular/material/form-field';
@@ -10,5 +10,6 @@ import {MatFormFieldModule} from '@angular/material/form-field';
1010
standalone: true,
1111
imports: [MatFormFieldModule, MatDatepickerModule],
1212
providers: [provideNativeDateAdapter()],
13+
changeDetection: ChangeDetectionStrategy.OnPush,
1314
})
1415
export class DateRangePickerOverviewExample {}

src/components-examples/material/datepicker/date-range-picker-selection-strategy/date-range-picker-selection-strategy-example.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import {Component, Injectable} from '@angular/core';
1+
import {ChangeDetectionStrategy, Component, Injectable} from '@angular/core';
22
import {DateAdapter, provideNativeDateAdapter} from '@angular/material/core';
33
import {
4-
MatDateRangeSelectionStrategy,
54
DateRange,
65
MAT_DATE_RANGE_SELECTION_STRATEGY,
6+
MatDateRangeSelectionStrategy,
77
MatDatepickerModule,
88
} from '@angular/material/datepicker';
99
import {MatFormFieldModule} from '@angular/material/form-field';
@@ -44,5 +44,6 @@ export class FiveDayRangeSelectionStrategy<D> implements MatDateRangeSelectionSt
4444
],
4545
standalone: true,
4646
imports: [MatFormFieldModule, MatDatepickerModule],
47+
changeDetection: ChangeDetectionStrategy.OnPush,
4748
})
4849
export class DateRangePickerSelectionStrategyExample {}
Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,32 @@
11
<mat-form-field class="example-form-field">
22
<mat-label>Choose a date</mat-label>
3-
<input matInput [matDatepicker]="datepicker">
3+
<input matInput [matDatepicker]="datepicker" />
44
<mat-hint>MM/DD/YYYY</mat-hint>
55
<mat-datepicker-toggle matIconSuffix [for]="datepicker"></mat-datepicker-toggle>
6-
<!-- #docregion datepicker-actions -->
6+
<!-- #docregion datepicker-actions -->
77
<mat-datepicker #datepicker>
88
<mat-datepicker-actions>
99
<button mat-button matDatepickerCancel>Cancel</button>
10-
<button mat-raised-button color="primary" matDatepickerApply>Apply</button>
10+
<button mat-raised-button matDatepickerApply>Apply</button>
1111
</mat-datepicker-actions>
1212
</mat-datepicker>
13-
<!-- #enddocregion datepicker-actions -->
13+
<!-- #enddocregion datepicker-actions -->
1414
</mat-form-field>
1515

1616
<mat-form-field class="example-form-field">
1717
<mat-label>Enter a date range</mat-label>
1818
<mat-date-range-input [rangePicker]="rangePicker">
19-
<input matStartDate placeholder="Start date">
20-
<input matEndDate placeholder="End date">
19+
<input matStartDate placeholder="Start date" />
20+
<input matEndDate placeholder="End date" />
2121
</mat-date-range-input>
2222
<mat-hint>MM/DD/YYYY – MM/DD/YYYY</mat-hint>
2323
<mat-datepicker-toggle matIconSuffix [for]="rangePicker"></mat-datepicker-toggle>
24-
<!-- #docregion date-range-picker-actions -->
24+
<!-- #docregion date-range-picker-actions -->
2525
<mat-date-range-picker #rangePicker>
2626
<mat-date-range-picker-actions>
2727
<button mat-button matDateRangePickerCancel>Cancel</button>
28-
<button mat-raised-button color="primary" matDateRangePickerApply>Apply</button>
28+
<button mat-raised-button matDateRangePickerApply>Apply</button>
2929
</mat-date-range-picker-actions>
3030
</mat-date-range-picker>
31-
<!-- #enddocregion date-range-picker-actions -->
31+
<!-- #enddocregion date-range-picker-actions -->
3232
</mat-form-field>

src/components-examples/material/datepicker/datepicker-actions/datepicker-actions-example.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import {Component} from '@angular/core';
1+
import {ChangeDetectionStrategy, Component} from '@angular/core';
22
import {MatButtonModule} from '@angular/material/button';
33
import {MatDatepickerModule} from '@angular/material/datepicker';
44
import {MatInputModule} from '@angular/material/input';
@@ -13,5 +13,6 @@ import {provideNativeDateAdapter} from '@angular/material/core';
1313
standalone: true,
1414
providers: [provideNativeDateAdapter()],
1515
imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule, MatButtonModule],
16+
changeDetection: ChangeDetectionStrategy.OnPush,
1617
})
1718
export class DatepickerActionsExample {}
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import {Component} from '@angular/core';
1+
import {ChangeDetectionStrategy, Component} from '@angular/core';
22
import {MatButtonModule} from '@angular/material/button';
3+
import {provideNativeDateAdapter} from '@angular/material/core';
34
import {MatDatepickerModule} from '@angular/material/datepicker';
4-
import {MatInputModule} from '@angular/material/input';
55
import {MatFormFieldModule} from '@angular/material/form-field';
6-
import {provideNativeDateAdapter} from '@angular/material/core';
6+
import {MatInputModule} from '@angular/material/input';
77

88
/** @title Datepicker open method */
99
@Component({
@@ -13,5 +13,6 @@ import {provideNativeDateAdapter} from '@angular/material/core';
1313
standalone: true,
1414
providers: [provideNativeDateAdapter()],
1515
imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule, MatButtonModule],
16+
changeDetection: ChangeDetectionStrategy.OnPush,
1617
})
1718
export class DatepickerApiExample {}

src/components-examples/material/datepicker/datepicker-color/datepicker-color-example.css

Lines changed: 0 additions & 3 deletions
This file was deleted.

src/components-examples/material/datepicker/datepicker-color/datepicker-color-example.html

Lines changed: 0 additions & 15 deletions
This file was deleted.

src/components-examples/material/datepicker/datepicker-color/datepicker-color-example.ts

Lines changed: 0 additions & 16 deletions
This file was deleted.

src/components-examples/material/datepicker/datepicker-custom-header/datepicker-custom-header-example.ts

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,29 @@
1-
import {
2-
ChangeDetectionStrategy,
3-
ChangeDetectorRef,
4-
Component,
5-
Inject,
6-
OnDestroy,
7-
} from '@angular/core';
8-
import {MatCalendar, MatDatepickerModule} from '@angular/material/datepicker';
1+
import {ChangeDetectionStrategy, Component, Inject, OnDestroy, signal} from '@angular/core';
2+
import {MatButtonModule} from '@angular/material/button';
93
import {
104
DateAdapter,
115
MAT_DATE_FORMATS,
126
MatDateFormats,
137
provideNativeDateAdapter,
148
} from '@angular/material/core';
15-
import {Subject} from 'rxjs';
16-
import {takeUntil} from 'rxjs/operators';
9+
import {MatCalendar, MatDatepickerModule} from '@angular/material/datepicker';
10+
import {MatFormFieldModule} from '@angular/material/form-field';
1711
import {MatIconModule} from '@angular/material/icon';
18-
import {MatButtonModule} from '@angular/material/button';
1912
import {MatInputModule} from '@angular/material/input';
20-
import {MatFormFieldModule} from '@angular/material/form-field';
13+
import {Subject} from 'rxjs';
14+
import {startWith, takeUntil} from 'rxjs/operators';
2115

2216
/** @title Datepicker with custom calendar header */
2317
@Component({
2418
selector: 'datepicker-custom-header-example',
2519
templateUrl: 'datepicker-custom-header-example.html',
26-
changeDetection: ChangeDetectionStrategy.OnPush,
2720
standalone: true,
2821
providers: [provideNativeDateAdapter()],
2922
imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule],
23+
changeDetection: ChangeDetectionStrategy.OnPush,
3024
})
3125
export class DatepickerCustomHeaderExample {
32-
exampleHeader = ExampleHeader;
26+
readonly exampleHeader = ExampleHeader;
3327
}
3428

3529
/** Custom header component for datepicker. */
@@ -57,7 +51,7 @@ export class DatepickerCustomHeaderExample {
5751
<button mat-icon-button (click)="previousClicked('month')">
5852
<mat-icon>keyboard_arrow_left</mat-icon>
5953
</button>
60-
<span class="example-header-label">{{periodLabel}}</span>
54+
<span class="example-header-label">{{periodLabel()}}</span>
6155
<button mat-icon-button (click)="nextClicked('month')">
6256
<mat-icon>keyboard_arrow_right</mat-icon>
6357
</button>
@@ -66,33 +60,34 @@ export class DatepickerCustomHeaderExample {
6660
</button>
6761
</div>
6862
`,
69-
changeDetection: ChangeDetectionStrategy.OnPush,
7063
standalone: true,
7164
imports: [MatButtonModule, MatIconModule],
65+
changeDetection: ChangeDetectionStrategy.OnPush,
7266
})
7367
export class ExampleHeader<D> implements OnDestroy {
7468
private _destroyed = new Subject<void>();
7569

70+
readonly periodLabel = signal('');
71+
7672
constructor(
7773
private _calendar: MatCalendar<D>,
7874
private _dateAdapter: DateAdapter<D>,
7975
@Inject(MAT_DATE_FORMATS) private _dateFormats: MatDateFormats,
80-
cdr: ChangeDetectorRef,
8176
) {
82-
_calendar.stateChanges.pipe(takeUntil(this._destroyed)).subscribe(() => cdr.markForCheck());
77+
_calendar.stateChanges.pipe(startWith(null), takeUntil(this._destroyed)).subscribe(() => {
78+
this.periodLabel.set(
79+
this._dateAdapter
80+
.format(this._calendar.activeDate, this._dateFormats.display.monthYearLabel)
81+
.toLocaleUpperCase(),
82+
);
83+
});
8384
}
8485

8586
ngOnDestroy() {
8687
this._destroyed.next();
8788
this._destroyed.complete();
8889
}
8990

90-
get periodLabel() {
91-
return this._dateAdapter
92-
.format(this._calendar.activeDate, this._dateFormats.display.monthYearLabel)
93-
.toLocaleUpperCase();
94-
}
95-
9691
previousClicked(mode: 'month' | 'year') {
9792
this._calendar.activeDate =
9893
mode === 'month'
Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import {Component} from '@angular/core';
2-
import {MatIconModule} from '@angular/material/icon';
1+
import {ChangeDetectionStrategy, Component} from '@angular/core';
2+
import {provideNativeDateAdapter} from '@angular/material/core';
33
import {MatDatepickerModule} from '@angular/material/datepicker';
4-
import {MatInputModule} from '@angular/material/input';
54
import {MatFormFieldModule} from '@angular/material/form-field';
6-
import {provideNativeDateAdapter} from '@angular/material/core';
5+
import {MatIconModule} from '@angular/material/icon';
6+
import {MatInputModule} from '@angular/material/input';
77

88
/** @title Datepicker with custom icon */
99
@Component({
@@ -12,5 +12,6 @@ import {provideNativeDateAdapter} from '@angular/material/core';
1212
standalone: true,
1313
providers: [provideNativeDateAdapter()],
1414
imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule, MatIconModule],
15+
changeDetection: ChangeDetectionStrategy.OnPush,
1516
})
1617
export class DatepickerCustomIconExample {}

src/components-examples/material/datepicker/datepicker-date-class/datepicker-date-class-example.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import {Component, ViewEncapsulation} from '@angular/core';
1+
import {ChangeDetectionStrategy, Component, ViewEncapsulation} from '@angular/core';
2+
import {provideNativeDateAdapter} from '@angular/material/core';
23
import {MatCalendarCellClassFunction, MatDatepickerModule} from '@angular/material/datepicker';
3-
import {MatInputModule} from '@angular/material/input';
44
import {MatFormFieldModule} from '@angular/material/form-field';
5-
import {provideNativeDateAdapter} from '@angular/material/core';
5+
import {MatInputModule} from '@angular/material/input';
66

77
/** @title Datepicker with custom date classes */
88
@Component({
@@ -13,6 +13,7 @@ import {provideNativeDateAdapter} from '@angular/material/core';
1313
standalone: true,
1414
providers: [provideNativeDateAdapter()],
1515
imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule],
16+
changeDetection: ChangeDetectionStrategy.OnPush,
1617
})
1718
export class DatepickerDateClassExample {
1819
dateClass: MatCalendarCellClassFunction<Date> = (cellDate, view) => {
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import {Component} from '@angular/core';
1+
import {ChangeDetectionStrategy, Component} from '@angular/core';
2+
import {provideNativeDateAdapter} from '@angular/material/core';
23
import {MatDatepickerModule} from '@angular/material/datepicker';
3-
import {MatInputModule} from '@angular/material/input';
44
import {MatFormFieldModule} from '@angular/material/form-field';
5-
import {provideNativeDateAdapter} from '@angular/material/core';
5+
import {MatInputModule} from '@angular/material/input';
66

77
/** @title Disabled datepicker */
88
@Component({
@@ -11,5 +11,6 @@ import {provideNativeDateAdapter} from '@angular/material/core';
1111
standalone: true,
1212
providers: [provideNativeDateAdapter()],
1313
imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule],
14+
changeDetection: ChangeDetectionStrategy.OnPush,
1415
})
1516
export class DatepickerDisabledExample {}
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
<mat-form-field>
22
<mat-label>Input & change events</mat-label>
3-
<input matInput [matDatepicker]="picker"
4-
(dateInput)="addEvent('input', $event)" (dateChange)="addEvent('change', $event)">
3+
<input
4+
matInput
5+
[matDatepicker]="picker"
6+
(dateInput)="addEvent('input', $event)"
7+
(dateChange)="addEvent('change', $event)"
8+
/>
59
<mat-hint>MM/DD/YYYY</mat-hint>
610
<mat-datepicker-toggle matIconSuffix [for]="picker"></mat-datepicker-toggle>
711
<mat-datepicker #picker></mat-datepicker>
812
</mat-form-field>
913

1014
<div class="example-events">
11-
@for (e of events; track e) {
15+
@for (e of events(); track e) {
1216
<div>{{e}}</div>
1317
}
1418
</div>
Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
import {Component} from '@angular/core';
1+
import {ChangeDetectionStrategy, Component, signal} from '@angular/core';
2+
import {provideNativeDateAdapter} from '@angular/material/core';
23
import {MatDatepickerInputEvent, MatDatepickerModule} from '@angular/material/datepicker';
3-
import {MatInputModule} from '@angular/material/input';
44
import {MatFormFieldModule} from '@angular/material/form-field';
5-
import {provideNativeDateAdapter} from '@angular/material/core';
5+
import {MatInputModule} from '@angular/material/input';
66

77
/** @title Datepicker input and change events */
88
@Component({
@@ -12,11 +12,12 @@ import {provideNativeDateAdapter} from '@angular/material/core';
1212
standalone: true,
1313
providers: [provideNativeDateAdapter()],
1414
imports: [MatFormFieldModule, MatInputModule, MatDatepickerModule],
15+
changeDetection: ChangeDetectionStrategy.OnPush,
1516
})
1617
export class DatepickerEventsExample {
17-
events: string[] = [];
18+
events = signal<string[]>([]);
1819

1920
addEvent(type: string, event: MatDatepickerInputEvent<Date>) {
20-
this.events.push(`${type}: ${event.value}`);
21+
this.events.update(events => [...events, `${type}: ${event.value}`]);
2122
}
2223
}

0 commit comments

Comments
 (0)