Skip to content

Commit 56de9f1

Browse files
committed
Merge remote-tracking branch 'origin/master' into valadzhov/time-picker-label-6905
2 parents bbbd5f9 + 2475539 commit 56de9f1

File tree

188 files changed

+6376
-6557
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

188 files changed

+6376
-6557
lines changed

ROADMAP.md

+36-12
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,38 @@
22

33
# Current Milestone
44

5+
## Milestone 13 (Due by October, 2020)
6+
7+
1. Move PositionSettings to OverlaySettings [#7807](https://github.com/IgniteUI/igniteui-angular/issues/7807)
8+
2. Native add row [#5946](https://github.com/IgniteUI/igniteui-angular/issues/5946)
9+
3. Accept ISO 8601 Date-only string as input for IgxDateTimeEditorDirective [#6994](https://github.com/IgniteUI/igniteui-angular/issues/6994)
10+
4. Enhance hGrid multi-cell selection behavior [#5714](https://github.com/IgniteUI/igniteui-angular/issues/5714)
11+
5. Calendar ARIA [#6272](https://github.com/IgniteUI/igniteui-angular/issues/6272)
12+
6. Grid Accessibility Issues [#6341](https://github.com/IgniteUI/igniteui-angular/issues/6341)
13+
7. Implement cellEditExit and rowEditExit event [#7931](https://github.com/IgniteUI/igniteui-angular/issues/7931)
14+
8. Calendar keyboard navigation accessibility [#6275](https://github.com/IgniteUI/igniteui-angular/issues/6275)
15+
9. Column Moving using API [#6334](https://github.com/IgniteUI/igniteui-angular/issues/6334)
16+
10. Expose an event that indicates that the Grid is fully loaded [#7924](https://github.com/IgniteUI/igniteui-angular/issues/7924)
17+
11. View week numbers in datepicker and calendar [#6172](https://github.com/IgniteUI/igniteui-angular/issues/6172)
18+
12. Expose the functionality of private getRowData via a public method [#7930](https://github.com/IgniteUI/igniteui-angular/issues/7930)
19+
13. Expose templates for all ESF UI parts [#7221](https://github.com/IgniteUI/igniteui-angular/issues/7221)
20+
14. [igx-tab] [igx-nav-drawer] Add animations option [#7157](https://github.com/IgniteUI/igniteui-angular/issues/7157)
21+
15. Choose label -text for igxTimePicker [#6905](https://github.com/IgniteUI/igniteui-angular/issues/6905)
22+
16. Implement factory functions for creating OverlaySettings [#7941](https://github.com/IgniteUI/igniteui-angular/issues/7941)
23+
17. igx-grid: Set grouped column width in percentage [#4155](https://github.com/IgniteUI/igniteui-angular/issues/4155)
24+
18. IgxGrid: Excel Style Filter "Apply" on "Enter" [#5812](https://github.com/IgniteUI/igniteui-angular/issues/5812)
25+
19. Grid export visualization [#7738](https://github.com/IgniteUI/igniteui-angular/issues/7738)
26+
20. Allow setting of the name of the worksheet in exported workbook in IgxExcelExporter [#7396](https://github.com/IgniteUI/igniteui-angular/issues/7396)
27+
21. Enhance behavior of the Select All checkbox in Excel Style Filtering [#6617](https://github.com/IgniteUI/igniteui-angular/issues/6617)
28+
22. Igx-grid: Select all rows in a group [#7344](https://github.com/IgniteUI/igniteui-angular/issues/7344)
29+
30+
## Going down the road
31+
32+
1. Tile Manager
33+
2. Visual Cell merging
34+
3. RTL Support across Ignite UI for Angular components
35+
# Previous Milestones
36+
537
## Milestone 12 (Due by August 17th, 2020)
638

739
1. **[DONE]** igx-grid improve IGridEditEventArgs [#4965](https://github.com/IgniteUI/igniteui-angular/issues/4965)
@@ -16,27 +48,19 @@
1648
10. **[DONE]** igx-grid - pre-select rows [#6653](https://github.com/IgniteUI/igniteui-angular/issues/6653)
1749
11. **[DONE]** Average and Sum are shown on the Ship country level [#7334](https://github.com/IgniteUI/igniteui-angular/issues/7334)
1850
12. **[DONE]** Dock Manager Better Default Themes [#7578](https://github.com/IgniteUI/igniteui-angular/issues/7578)
19-
13. Expose templates for all ESF UI parts [#7221](https://github.com/IgniteUI/igniteui-angular/issues/7221)
51+
13. **[DONE]** Expose templates for all ESF UI parts [#7221](https://github.com/IgniteUI/igniteui-angular/issues/7221)
2052
14. **[DONE]** Calendar events when user changes month/year [#7039](https://github.com/IgniteUI/igniteui-angular/issues/7039)
21-
15. igxGrid default column display templates per-type [#7224](https://github.com/IgniteUI/igniteui-angular/issues/7224)
22-
16. Provide "Unfreeze All" option under Freeze button on Data Grid & Tree Grid
53+
15. **[DONE]** igxGrid default column display templates per-type [#7224](https://github.com/IgniteUI/igniteui-angular/issues/7224)
54+
16. **[DONE]** Provide "Unfreeze All" option under Freeze button on Data Grid & Tree Grid
2355
To Be Updated [#6549](https://github.com/IgniteUI/igniteui-angular/issues/6549)
24-
17. Exposing onActiveNodeChange output in the Grid [#7601](https://github.com/IgniteUI/igniteui-angular/issues/7601)
56+
17. **[DONE]** Exposing onActiveNodeChange output in the Grid [#7601](https://github.com/IgniteUI/igniteui-angular/issues/7601)
2557
18. **[DONE]** Refactor commit method of IgxHierarchicalTransactionService to accept same parameters as base type [#5205](https://github.com/IgniteUI/igniteui-angular/issues/5205)
2658
19. **[DONE]** Tooltip for grid cell text content [#6215](https://github.com/IgniteUI/igniteui-angular/issues/6215)
2759
20. **[DONE]** Add tooltip to column summary [#6505](https://github.com/IgniteUI/igniteui-angular/issues/6505)
2860
21. **[DONE]** IgxToast `show` should take a message param [#7156](https://github.com/IgniteUI/igniteui-angular/issues/7156)
2961
22. **[DONE]** IgxGridState working with IgxHierarchicalGrid [#7025](https://github.com/IgniteUI/igniteui-angular/issues/7025)
3062
23. **[DONE]** Sorting Indicator on all Grid components [#7493](https://github.com/IgniteUI/igniteui-angular/issues/7493)
3163

32-
33-
## Going down the road
34-
35-
1. Tile Manager
36-
2. Visual Cell merging
37-
3. RTL Support across Ignite UI for Angular components
38-
# Previous Milestones
39-
4064
## Milestone 11 (Released June 2nd, 2020)
4165

4266
1. **[DONE]** Dock Manger - Public Preview [#5980](https://github.com/IgniteUI/igniteui-angular/issues/5980)

projects/igniteui-angular/src/lib/avatar/avatar.component.ts

+16-13
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,24 @@ import {
1010
ViewChild
1111
} from '@angular/core';
1212
import { IgxIconModule } from '../icon/public_api';
13+
import { mkenum } from '../core/utils';
1314

1415
let NEXT_ID = 0;
15-
16-
export enum IgxAvatarSize {
17-
SMALL = 'small',
18-
MEDIUM = 'medium',
19-
LARGE = 'large'
20-
}
21-
22-
export enum IgxAvatarType {
23-
INITIALS = 'initials',
24-
IMAGE = 'image',
25-
ICON = 'icon',
26-
CUSTOM = 'custom',
27-
}
16+
export const IgxAvatarSize = mkenum({
17+
SMALL: 'small',
18+
MEDIUM: 'medium',
19+
LARGE: 'large'
20+
});
21+
export type IgxAvatarSize = (typeof IgxAvatarSize)[keyof typeof IgxAvatarSize];
22+
23+
export const IgxAvatarType = mkenum({
24+
INITIALS: 'initials',
25+
IMAGE: 'image',
26+
ICON: 'icon',
27+
CUSTOM: 'custom'
28+
});
29+
30+
export type IgxAvatarType = (typeof IgxAvatarType)[keyof typeof IgxAvatarType];
2831

2932
/**
3033
* Avatar provides a way to display an image, icon or initials to the user.

projects/igniteui-angular/src/lib/badge/badge.component.ts

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,21 @@
11
import { CommonModule } from '@angular/common';
22
import { Component, HostBinding, Input, NgModule } from '@angular/core';
33
import { IgxIconModule } from '../icon/public_api';
4+
import { mkenum } from '../core/utils';
45

56
let NEXT_ID = 0;
67

78
/**
89
* Determines the igxBadge type
910
*/
10-
export enum IgxBadgeType {
11-
PRIMARY = 'primary',
12-
INFO = 'info',
13-
SUCCESS = 'success',
14-
WARNING = 'warning',
15-
ERROR = 'error'
16-
}
11+
export const IgxBadgeType = mkenum({
12+
PRIMARY: 'primary',
13+
INFO: 'info',
14+
SUCCESS: 'success',
15+
WARNING: 'warning',
16+
ERROR: 'error'
17+
});
18+
export type IgxBadgeType = (typeof IgxBadgeType)[keyof typeof IgxBadgeType];
1719
/**
1820
* Badge provides visual notifications used to decorate avatars, menus, etc.
1921
*

projects/igniteui-angular/src/lib/calendar/calendar-base.ts

+8-7
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,18 @@ import { WEEKDAYS, Calendar, isDateInRanges, IFormattingOptions, IFormattingView
33
import { ControlValueAccessor } from '@angular/forms';
44
import { DateRangeDescriptor } from '../core/dates';
55
import { Subject } from 'rxjs';
6-
import { isDate } from '../core/utils';
6+
import { isDate, mkenum } from '../core/utils';
77
import { CalendarView } from './month-picker-base';
88

99
/**
10-
* Sets the selction type - single, multi or range.
10+
* Sets the selection type - single, multi or range.
1111
*/
12-
export enum CalendarSelection {
13-
SINGLE = 'single',
14-
MULTI = 'multi',
15-
RANGE = 'range'
16-
}
12+
export const CalendarSelection = mkenum({
13+
SINGLE: 'single',
14+
MULTI: 'multi',
15+
RANGE: 'range'
16+
});
17+
export type CalendarSelection = (typeof CalendarSelection)[keyof typeof CalendarSelection];
1718

1819
export enum ScrollMonth {
1920
PREV = 'prev',

projects/igniteui-angular/src/lib/calendar/month-picker/month-picker.component.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<div *ngIf="isDefaultView" [@animateView]="activeView" (@animateView.done)="viewRendered($event)" class="igx-calendar__body" (swiperight)="previousYear()" (swipeleft)="nextYear()">
22
<div class="igx-calendar-picker">
3-
<div tabindex="0" class="igx-calendar-picker__prev" (click)="previousYear()" (keydown)="previousYearKB($event)" [ngStyle]="{
3+
<div tabindex="0" class="igx-calendar-picker__prev" (click)="previousYear()" (keydown)="changeYearKB($event, false)" [ngStyle]="{
44
'min-width.%': 25,
55
'left': 0
66
}">
@@ -11,7 +11,7 @@
1111
{{ formattedYear(viewDate) }}
1212
</span>
1313
</div>
14-
<div tabindex="0" class="igx-calendar-picker__next" (click)="nextYear()" (keydown)="nextYearKB($event)" [ngStyle]="{
14+
<div tabindex="0" class="igx-calendar-picker__next" (click)="nextYear()" (keydown)="changeYearKB($event)" [ngStyle]="{
1515
'min-width.%': 25,
1616
'right': 0
1717
}">

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

+67
Original file line numberDiff line numberDiff line change
@@ -275,6 +275,73 @@ describe('IgxMonthPicker', () => {
275275
expect(yearBtn.nativeElement.textContent.trim()).toMatch('2021');
276276
});
277277

278+
it('should not emit onSelection when navigating to the next year', () => {
279+
const fixture = TestBed.createComponent(IgxMonthPickerSampleComponent);
280+
fixture.detectChanges();
281+
282+
const dom = fixture.debugElement;
283+
const monthPicker = fixture.componentInstance.monthPicker;
284+
spyOn(monthPicker.onSelection, 'emit').and.callThrough();
285+
286+
const next = dom.query(By.css('.igx-calendar-picker__next'));
287+
let yearBtn = dom.query(By.css('.igx-calendar-picker__date'));
288+
expect(yearBtn.nativeElement.textContent.trim()).toMatch('2019');
289+
290+
UIInteractions.simulateClickEvent(next.nativeElement);
291+
fixture.detectChanges();
292+
UIInteractions.triggerKeyDownEvtUponElem('Enter', next.nativeElement);
293+
fixture.detectChanges();
294+
295+
expect(monthPicker.onSelection.emit).toHaveBeenCalledTimes(0);
296+
yearBtn = dom.query(By.css('.igx-calendar-picker__date'));
297+
expect(yearBtn.nativeElement.textContent.trim()).toMatch('2021');
298+
});
299+
300+
it('should not emit onSelection when navigating to the previous year', () => {
301+
const fixture = TestBed.createComponent(IgxMonthPickerSampleComponent);
302+
fixture.detectChanges();
303+
304+
const dom = fixture.debugElement;
305+
const monthPicker = fixture.componentInstance.monthPicker;
306+
spyOn(monthPicker.onSelection, 'emit').and.callThrough();
307+
308+
const prev = dom.query(By.css('.igx-calendar-picker__prev'));
309+
let yearBtn = dom.query(By.css('.igx-calendar-picker__date'));
310+
expect(yearBtn.nativeElement.textContent.trim()).toMatch('2019');
311+
312+
UIInteractions.triggerKeyDownEvtUponElem('Enter', prev.nativeElement);
313+
fixture.detectChanges();
314+
UIInteractions.simulateClickEvent(prev.nativeElement);
315+
fixture.detectChanges();
316+
317+
expect(monthPicker.onSelection.emit).toHaveBeenCalledTimes(0);
318+
yearBtn = dom.query(By.css('.igx-calendar-picker__date'));
319+
expect(yearBtn.nativeElement.textContent.trim()).toMatch('2017');
320+
});
321+
322+
it('should not emit onSelection when changing the year', () => {
323+
const fixture = TestBed.createComponent(IgxMonthPickerSampleComponent);
324+
fixture.detectChanges();
325+
326+
const dom = fixture.debugElement;
327+
const monthPicker = fixture.componentInstance.monthPicker;
328+
spyOn(monthPicker.onSelection, 'emit').and.callThrough();
329+
330+
let yearBtn = dom.query(By.css('.igx-calendar-picker__date'));
331+
expect(yearBtn.nativeElement.textContent.trim()).toMatch('2019');
332+
333+
UIInteractions.simulateClickEvent(yearBtn.nativeElement);
334+
fixture.detectChanges();
335+
336+
const year = dom.nativeElement.querySelector('.igx-calendar__year');
337+
UIInteractions.simulateClickEvent(year);
338+
fixture.detectChanges();
339+
340+
expect(monthPicker.onSelection.emit).toHaveBeenCalledTimes(0);
341+
yearBtn = dom.query(By.css('.igx-calendar-picker__date'));
342+
expect(yearBtn.nativeElement.textContent.trim()).toMatch('2016');
343+
});
344+
278345
it('should open years view, navigate through and select an year via KB.', () => {
279346
const fixture = TestBed.createComponent(IgxMonthPickerSampleComponent);
280347
fixture.detectChanges();

projects/igniteui-angular/src/lib/calendar/month-picker/month-picker.component.ts

+8-51
Original file line numberDiff line numberDiff line change
@@ -124,13 +124,11 @@ export class IgxMonthPickerComponent extends IgxMonthPickerBaseDirective {
124124
super.activeViewDecadeKB(event);
125125

126126
if (event.key === KEYS.RIGHT_ARROW || event.key === KEYS.RIGHT_ARROW_IE) {
127-
event.preventDefault();
128-
this.nextYear();
127+
this.nextYear(event);
129128
}
130129

131130
if (event.key === KEYS.LEFT_ARROW || event.key === KEYS.LEFT_ARROW_IE) {
132-
event.preventDefault();
133-
this.previousYear();
131+
this.previousYear(event);
134132
}
135133

136134
requestAnimationFrame(() => {
@@ -152,48 +150,10 @@ export class IgxMonthPickerComponent extends IgxMonthPickerBaseDirective {
152150
/**
153151
* @hidden
154152
*/
155-
public nextYear() {
156-
this.yearAction = 'next';
157-
this.previousViewDate = this.viewDate;
158-
this.viewDate = this.calendarModel.getNextYear(this.viewDate);
159-
160-
this.selectDate(this.viewDate);
161-
this.onSelection.emit(this.selectedDates);
162-
}
163-
164-
/**
165-
* @hidden
166-
*/
167-
public nextYearKB(event) {
153+
public changeYearKB(event, next = true) {
168154
if (event.key === KEYS.SPACE || event.key === KEYS.SPACE_IE || event.key === KEYS.ENTER) {
169-
event.preventDefault();
170155
event.stopPropagation();
171-
172-
this.nextYear();
173-
}
174-
}
175-
176-
/**
177-
* @hidden
178-
*/
179-
public previousYear() {
180-
this.yearAction = 'prev';
181-
this.previousViewDate = this.viewDate;
182-
this.viewDate = this.calendarModel.getPrevYear(this.viewDate);
183-
184-
this.selectDate(this.viewDate);
185-
this.onSelection.emit(this.selectedDates);
186-
}
187-
188-
/**
189-
* @hidden
190-
*/
191-
public previousYearKB(event) {
192-
if (event.key === KEYS.SPACE || event.key === KEYS.SPACE_IE || event.key === KEYS.ENTER) {
193-
event.preventDefault();
194-
event.stopPropagation();
195-
196-
this.previousYear();
156+
next ? this.nextYear(event) : this.previousYear(event);
197157
}
198158
}
199159

@@ -205,9 +165,6 @@ export class IgxMonthPickerComponent extends IgxMonthPickerBaseDirective {
205165
this.viewDate = new Date(event.getFullYear(), event.getMonth(), event.getDate());
206166
this.activeView = CalendarView.DEFAULT;
207167

208-
this.selectDate(event);
209-
this.onSelection.emit(this.selectedDates);
210-
211168
requestAnimationFrame(() => {
212169
if (this.yearsBtn) { this.yearsBtn.nativeElement.focus(); }
213170
});
@@ -252,8 +209,8 @@ export class IgxMonthPickerComponent extends IgxMonthPickerBaseDirective {
252209
* @hidden
253210
*/
254211
@HostListener('keydown.pageup', ['$event'])
255-
public onKeydownPageUp(event: KeyboardEvent) {
256-
event.preventDefault();
212+
public previousYear(event?: KeyboardEvent) {
213+
event?.preventDefault();
257214
this.yearAction = 'prev';
258215
this.previousViewDate = this.viewDate;
259216
this.viewDate = this.calendarModel.getPrevYear(this.viewDate);
@@ -263,8 +220,8 @@ export class IgxMonthPickerComponent extends IgxMonthPickerBaseDirective {
263220
* @hidden
264221
*/
265222
@HostListener('keydown.pagedown', ['$event'])
266-
public onKeydownPageDown(event: KeyboardEvent) {
267-
event.preventDefault();
223+
public nextYear(event?: KeyboardEvent) {
224+
event?.preventDefault();
268225
this.yearAction = 'next';
269226
this.previousViewDate = this.viewDate;
270227
this.viewDate = this.calendarModel.getNextYear(this.viewDate);

projects/igniteui-angular/src/lib/card/card.component.ts

+11-8
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import {
1212
SimpleChanges
1313
} from '@angular/core';
1414
import { IgxButtonModule } from '../directives/button/button.directive';
15+
import { mkenum } from '../core/utils';
1516

1617
let NEXT_ID = 0;
1718

@@ -200,10 +201,11 @@ export class IgxCardFooterDirective {
200201
* ```
201202
*/
202203

203-
export enum IgxCardType {
204-
ELEVATED = 'elevated',
205-
OUTLINED = 'outlined'
206-
}
204+
export const IgxCardType = mkenum({
205+
ELEVATED: 'elevated',
206+
OUTLINED: 'outlined'
207+
});
208+
export type IgxCardType = (typeof IgxCardType)[keyof typeof IgxCardType];
207209

208210
@Component({
209211
selector: 'igx-card',
@@ -276,10 +278,11 @@ export class IgxCardComponent {
276278
public horizontal = false;
277279
}
278280

279-
export enum IgxCardActionsLayout {
280-
START = 'start',
281-
JUSTIFY = 'justify',
282-
}
281+
export const IgxCardActionsLayout = mkenum({
282+
START: 'start',
283+
JUSTIFY: 'justify'
284+
});
285+
export type IgxCardActionsLayout = (typeof IgxCardActionsLayout)[keyof typeof IgxCardActionsLayout];
283286

284287
/**
285288
* IgxCardActions is container for the card actions.

0 commit comments

Comments
 (0)