Skip to content

Commit 2cb80fc

Browse files
authored
feat(module:date-picker): add nzShowWeekNumber property (#7621)
1 parent aecb788 commit 2cb80fc

File tree

11 files changed

+85
-11
lines changed

11 files changed

+85
-11
lines changed

components/date-picker/date-picker.component.spec.ts

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -573,6 +573,18 @@ describe('NzDatePickerComponent', () => {
573573
expect(element.classList.contains('ant-picker-dropdown-placement-bottomRight')).toBe(false);
574574
expect(element.classList.contains('ant-picker-dropdown-placement-topRight')).toBe(true);
575575
}));
576+
577+
it('should support nzShowWeekNumber', fakeAsync(() => {
578+
fixtureInstance.nzShowWeekNumber = true;
579+
fixture.detectChanges();
580+
openPickerByClickTrigger();
581+
expect(queryFromOverlay('.ant-picker-week-panel-row .ant-picker-cell-week')).toBeDefined();
582+
fixtureInstance.nzShowWeekNumber = false;
583+
fixture.detectChanges();
584+
tick(500);
585+
openPickerByClickTrigger();
586+
expect(queryFromOverlay('.ant-picker-week-panel-row .ant-picker-cell-week')).toBeNull();
587+
}));
576588
});
577589

578590
describe('panel switch and move forward/afterward', () => {
@@ -1138,7 +1150,7 @@ describe('NzDatePickerComponent', () => {
11381150
return queryFromOverlay(`.${PREFIX_CLASS}-header-super-next-btn`);
11391151
}
11401152

1141-
describe('ngModel value accesors', () => {
1153+
describe('ngModel value accessors', () => {
11421154
beforeEach(() => (fixtureInstance.useSuite = 3));
11431155

11441156
it('should specified date provide by "modelValue" be chosen', fakeAsync(() => {
@@ -1356,14 +1368,15 @@ describe('in form', () => {
13561368
[nzInline]="nzInline"
13571369
[nzBackdrop]="nzBackdrop"
13581370
[nzPlacement]="nzPlacement"
1371+
[nzShowWeekNumber]="nzShowWeekNumber"
13591372
></nz-date-picker>
13601373
<ng-template #tplDateRender let-current>
13611374
<div [class.test-first-day]="current.getDate() === 1">{{ current.getDate() }}</div>
13621375
</ng-template>
13631376
<ng-template #tplExtraFooter>TEST_EXTRA_FOOTER</ng-template>
13641377
13651378
<!-- Suite 2 -->
1366-
<!-- use another picker to avoid nzOpen's side-effects beacuse nzOpen act as "true" if used -->
1379+
<!-- use another picker to avoid nzOpen's side-effects because nzOpen acts as "true" if used -->
13671380
<nz-date-picker *ngSwitchCase="2" [nzOpen]="nzOpen" (nzOnOpenChange)="nzOnOpenChange($event)"></nz-date-picker>
13681381
13691382
<!-- Suite 3 -->
@@ -1416,6 +1429,7 @@ class NzTestDatePickerComponent {
14161429
nzInline = false;
14171430
nzBackdrop = false;
14181431
nzPlacement = 'bottomLeft';
1432+
nzShowWeekNumber = false;
14191433

14201434
// nzRanges;
14211435
nzOnPanelChange(_: string): void {}

components/date-picker/date-picker.component.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -185,7 +185,7 @@ export type NzPlacement = 'bottomLeft' | 'bottomRight' | 'topLeft' | 'topRight';
185185
[isRange]="isRange"
186186
[inline]="nzInline"
187187
[defaultPickerValue]="nzDefaultPickerValue"
188-
[showWeek]="nzMode === 'week'"
188+
[showWeek]="nzShowWeekNumber || nzMode === 'week'"
189189
[panelMode]="panelMode"
190190
(panelModeChange)="onPanelModeChange($event)"
191191
(calendarChange)="onCalendarChange($event)"
@@ -306,6 +306,7 @@ export class NzDatePickerComponent implements OnInit, OnChanges, OnDestroy, Afte
306306
@Input() @WithConfig() nzBackdrop = false;
307307
@Input() nzId: string | null = null;
308308
@Input() nzPlacement: NzPlacement = 'bottomLeft';
309+
@Input() @InputBoolean() nzShowWeekNumber: boolean = false;
309310

310311
// TODO(@wenqi73) The PanelMode need named for each pickers and export
311312
@Output() readonly nzOnPanelChange = new EventEmitter<NzDateMode | NzDateMode[] | string | string[]>();

components/date-picker/date-range-popup.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ import { getTimeConfig, isAllowedDate, PREFIX_CLASS } from './util';
5757
<ng-container *ngIf="isRange; else singlePanel">
5858
<div class="{{ prefixCls }}-range-wrapper {{ prefixCls }}-date-range-wrapper">
5959
<div class="{{ prefixCls }}-range-arrow" [style.left.px]="datePickerService?.arrowLeft"></div>
60-
<div class="{{ prefixCls }}-panel-container">
60+
<div class="{{ prefixCls }}-panel-container {{ showWeek ? prefixCls + '-week-number' : '' }}">
6161
<div class="{{ prefixCls }}-panels">
6262
<ng-container *ngIf="hasTimePicker; else noTimePicker">
6363
<ng-container
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
---
2+
order: 16
3+
title:
4+
zh-CN: 显示周数
5+
en-US: Week Number
6+
---
7+
8+
## zh-CN
9+
10+
使用 `nzShowWeekNumber` 显示周数
11+
12+
## en-US
13+
14+
Display week numbers with `nzShowWeekNumber`.
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { Component } from '@angular/core';
2+
3+
@Component({
4+
selector: 'nz-demo-date-picker-week-number',
5+
template: `
6+
<nz-radio-group [(ngModel)]="showWeekNumber">
7+
<label nz-radio-button [nzValue]="true">true</label>
8+
<label nz-radio-button [nzValue]="false">false</label>
9+
</nz-radio-group>
10+
<br />
11+
<br />
12+
<nz-date-picker [nzShowWeekNumber]="showWeekNumber"></nz-date-picker>
13+
<br />
14+
<nz-range-picker [nzShowWeekNumber]="showWeekNumber"></nz-range-picker>
15+
`,
16+
styles: [
17+
`
18+
nz-date-picker,
19+
nz-range-picker {
20+
margin: 0 8px 12px 0;
21+
}
22+
`
23+
]
24+
})
25+
export class NzDemoDatePickerWeekNumberComponent {
26+
showWeekNumber: boolean = false;
27+
}

components/date-picker/doc/index.en-US.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ The following APIs are shared by nz-date-picker, nz-range-picker.
7878
| `[nzShowTime]` | to provide an additional time selection | `object \| boolean` | [TimePicker Options](/components/time-picker/en#api) |
7979
| `[nzShowToday]` | whether to show 'Today' button | `boolean` | `true` |
8080
| `[nzShowNow]` | whether to show 'Now' button on panel when `nzShowTime` is set | `boolean` | `true` |
81+
| `[nzShowWeekNumber]` | whether to show the week number on each row (Only supported by date picker. Week picker always shows week numbers) | `boolean` | `false` |
8182
| `(nzOnOk)` | callback when click ok button | `EventEmitter<Date>` | - |
8283

8384
### nz-range-picker
@@ -95,6 +96,7 @@ The following APIs are shared by nz-date-picker, nz-range-picker.
9596
| -------- | ----------- | ---- | ------- |
9697
| `[nzShowTime]` | to provide an additional time selection | `object \| boolean` | [TimePicker Options](/components/time-picker/en#api) |
9798
| `[nzDisabledTime]` | to specify the time that cannot be selected | `(current: Date, partial: 'start' \| 'end') => { nzDisabledHours, nzDisabledMinutes, nzDisabledSeconds }` | - |
99+
| `[nzShowWeekNumber]` | whether to show the week number on each row (Only supported by date picker. Week picker always shows week numbers) | `boolean` | `false` |
98100
| `(nzOnOk)` | click ok callback | `EventEmitter<Date[]>` | - |
99101

100102
> Currently, supported `nz-time-picker` parameters in `nzShowTime` are: `nzFormat`, `nzHourStep`, `nzMinuteStep`, `nzSecondStep`, `nzDisabledHours`, `nzDisabledMinutes`, `nzDisabledSeconds`, `nzHideDisabledOptions`, `nzDefaultOpenValue`, `nzAddOn`

components/date-picker/doc/index.zh-CN.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ registerLocaleData(zh);
7979
| `[nzShowTime]` | 增加时间选择功能 | `object \| boolean` | [TimePicker Options](/components/time-picker/zh#api) |
8080
| `[nzShowToday]` | 是否展示“今天”按钮 | `boolean` | `true` |
8181
| `[nzShowNow]` | 当设定了`nzShowTime`的时候,面板是否显示“此刻”按钮 | `boolean` | `true` |
82+
| `[nzShowWeekNumber]` | 是否在每一行显示周数(仅日期选择器支持。周选择器始终显示周数) | `boolean` | `false` |
8283
| `(nzOnOk)` | 点击确定按钮的回调 | `EventEmitter<Date>` | - |
8384

8485

@@ -96,6 +97,7 @@ registerLocaleData(zh);
9697
| --- | --- | --- | --- |
9798
| `[nzShowTime]` | 增加时间选择功能 | `object \| boolean` | [TimePicker Options](/components/time-picker/zh#api) |
9899
| `[nzDisabledTime]` | 不可选择的时间 | `(current: Date, partial: 'start' \| 'end') => { nzDisabledHours, nzDisabledMinutes, nzDisabledSeconds }` | - |
100+
| `[nzShowWeekNumber]` | 是否在每一行显示周数(仅日期选择器支持。周选择器始终显示周数) | `boolean` | `false` |
99101
| `(nzOnOk)` | 点击确定按钮的回调 | `EventEmitter<Date[]>` | - |
100102

101103
> `nzShowTime` 中当前支持的 `nz-time-picker` 参数有:`nzFormat`, `nzHourStep`, `nzMinuteStep`, `nzSecondStep`, `nzDisabledHours`, `nzDisabledMinutes`, `nzDisabledSeconds`, `nzHideDisabledOptions`, `nzDefaultOpenValue`, `nzAddOn`

components/date-picker/inner-popup.component.ts

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,10 +106,12 @@ import { PREFIX_CLASS } from './util';
106106
<date-header
107107
[(value)]="activeDate"
108108
[locale]="locale"
109-
[showSuperPreBtn]="showWeek ? enablePrevNext('prev', 'week') : enablePrevNext('prev', 'date')"
110-
[showSuperNextBtn]="showWeek ? enablePrevNext('next', 'week') : enablePrevNext('next', 'date')"
111-
[showPreBtn]="showWeek ? enablePrevNext('prev', 'week') : enablePrevNext('prev', 'date')"
112-
[showNextBtn]="showWeek ? enablePrevNext('next', 'week') : enablePrevNext('next', 'date')"
109+
[showSuperPreBtn]="panelMode === 'week' ? enablePrevNext('prev', 'week') : enablePrevNext('prev', 'date')"
110+
[showSuperNextBtn]="
111+
panelMode === 'week' ? enablePrevNext('next', 'week') : enablePrevNext('next', 'date')
112+
"
113+
[showPreBtn]="panelMode === 'week' ? enablePrevNext('prev', 'week') : enablePrevNext('prev', 'date')"
114+
[showNextBtn]="panelMode === 'week' ? enablePrevNext('next', 'week') : enablePrevNext('next', 'date')"
113115
(panelModeChange)="panelModeChange.emit($event)"
114116
(valueChange)="headerChange.emit($event)"
115117
></date-header>
@@ -123,6 +125,7 @@ import { PREFIX_CLASS } from './util';
123125
[cellRender]="dateRender"
124126
[selectedValue]="selectedValue"
125127
[hoverValue]="hoverValue"
128+
[canSelectWeek]="panelMode === 'week'"
126129
(valueChange)="onSelectDate($event)"
127130
(cellHover)="cellHover.emit($event)"
128131
></date-table>

components/date-picker/lib/abstract-table.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ export abstract class AbstractTable implements OnInit, OnChanges {
3030
@Input() disabledDate?: (d: Date) => boolean;
3131
@Input() cellRender?: string | TemplateRef<Date> | FunctionProp<TemplateRef<Date> | string>;
3232
@Input() fullCellRender?: string | TemplateRef<Date> | FunctionProp<TemplateRef<Date> | string>;
33+
@Input() canSelectWeek: boolean = false;
3334

3435
@Output() readonly valueChange = new EventEmitter<CandyDate>();
3536
@Output() readonly cellHover = new EventEmitter<CandyDate>(); // Emitted when hover on a day by mouse enter
@@ -90,6 +91,7 @@ export abstract class AbstractTable implements OnInit, OnChanges {
9091
changes.disabledDate ||
9192
changes.locale ||
9293
changes.showWeek ||
94+
changes.selectWeek ||
9395
this.isDateRealChange(changes.activeDate) ||
9496
this.isDateRealChange(changes.value) ||
9597
this.isDateRealChange(changes.selectedValue) ||

components/date-picker/lib/date-table.component.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -103,16 +103,16 @@ export class DateTableComponent extends AbstractTable implements OnChanges, OnIn
103103
row.dateCells.push(cell);
104104
}
105105
row.classMap = {
106-
[`ant-picker-week-panel-row`]: this.showWeek,
107-
[`ant-picker-week-panel-row-selected`]: this.showWeek && row.isActive
106+
[`ant-picker-week-panel-row`]: this.canSelectWeek,
107+
[`ant-picker-week-panel-row-selected`]: this.canSelectWeek && row.isActive
108108
};
109109
weekRows.push(row);
110110
}
111111
return weekRows;
112112
}
113113

114114
addCellProperty(cell: DateCell, date: CandyDate): void {
115-
if (this.hasRangeValue() && !this.showWeek) {
115+
if (this.hasRangeValue() && !this.canSelectWeek) {
116116
const [startHover, endHover] = this.hoverValue;
117117
const [startSelected, endSelected] = this.selectedValue;
118118
// Selected

0 commit comments

Comments
 (0)