Skip to content

Commit 834a0fd

Browse files
authored
Merge branch '7.2.x' into SKrastev/fix-4209
2 parents c69642d + 910f67c commit 834a0fd

33 files changed

+766
-425
lines changed

CHANGELOG.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,16 @@
22

33
All notable changes for each version of this project will be documented in this file.
44

5-
## 7.2.2
5+
# 7.2.2
6+
- **Components' Display Type** - All components now have their CSS display property explicitly set on the host element to ensure width, padding, and margins are applied when set directly on the host selectors.
67
- **Themes**
78
- Add support for gradients and images as values for component themes via the component theme functions.
89
- `Palettes` - added surface color to the palette. The surface color is used by cards, pickers, dialog windows, etc. as the default background.
910

1011
## 7.2.1
11-
- **Feature** Column Hiding and Column Pinning components now expose a `disableFilter` property which allows hiding the filter columns input from the UI.
12+
- `igxGrid`
13+
- **Breaking Change** The `groupsRecords` property now only returns the visible tree and does not include groups that are children of collapsed parents.
14+
- **Feature** Column Hiding and Column Pinning components now expose a `disableFilter` property which allows hiding the filter columns input from the UI.
1215

1316
### Improvements
1417
- igxSelect - select-positioning-strategy code cleanup #4019

ROADMAP.md

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,20 @@
11
# Roadmap - Ignite UI for Angular
22

33
# Current Milestone
4-
54

6-
## Milestone 6 (Due March 8th, 2019)
75

8-
1. Hierarchical Grid #827
9-
2. **[DROPPED]** igxGrid rendering strategies (like record-based rendering) #2384
10-
3. Auto-complete (inline editable) #3585
11-
4. Excel Style Filtering #3592
12-
5. Inline date and time pickers (with drop down/toggle) #3034 #2337
13-
6. igxSelect Component #3148
6+
## Milestone 7 (Due May 1st, 2019)
7+
1. Multi-cell Selection #3915
8+
2. Grid Multi-Row Layout
9+
3. Grid Row Dragging
1410

1511

16-
## Further Down the line
12+
## Going down the road
1713

1814
1. Advanced Filtering
1915
2. Row-pinning
2016
3. Column Groups expand/collapse, with column grouping templates
2117
4. Visual Cell merging
22-
5. Multi-cell Selection #3915
23-
6. Grid Multi-Row Layout
2418

2519

2620
# Previous Milestones
@@ -90,3 +84,12 @@
9084
2. **[DONE]** Grid GroupBy summaries
9185
3. **[DONE]** Banner Component [issue](https://github.com/IgniteUI/igniteui-angular/issues/2672)
9286
4. **[DONE]** Toolbar Templatable and NavBar Templatable
87+
88+
## Milestone 6 (Due March 8th, 2019)
89+
90+
1. **[DONE]** Hierarchical Grid #827
91+
2. **[DROPPED]** igxGrid rendering strategies (like record-based rendering) #2384
92+
3. **[DONE]** Auto-complete (inline editable) #3585
93+
4. **[DONE]** Excel Style Filtering #3592
94+
5. **[DONE]** Inline date and time pickers (with drop down/toggle) #3034 #2337
95+
6. **[DONE]** igxSelect Component #3148

projects/igniteui-angular/package.json

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,16 @@
1616
"angular6",
1717
"UI components",
1818
"grid",
19+
"data table",
20+
"tree grid",
21+
"tree table",
22+
"hierarchical grid",
23+
"hierarchical table",
1924
"combo",
2025
"drop down",
26+
"select",
27+
"auto complete",
28+
"autocomplete",
2129
"list",
2230
"tabs",
2331
"calendar",
@@ -52,6 +60,8 @@
5260
"slider",
5361
"toast",
5462
"snackbar",
63+
"banner",
64+
"expansion panel",
5565
"excel export",
5666
"csv export"
5767
],

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

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,8 @@ export enum Direction { NONE, NEXT, PREV }
4343
templateUrl: 'carousel.component.html',
4444
styles: [`
4545
:host {
46-
outline-style: none
46+
display: block;
47+
outline-style: none;
4748
}`]
4849
})
4950

projects/igniteui-angular/src/lib/combo/combo.component.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
<ng-content select="igx-hint, [igxHint]"></ng-content>
2626
</ng-container>
2727
<input igxInput #comboInput name="comboInput" type="text" [value]="value" readonly [placeholder]="placeholder"
28-
[disabled]="disabled" />
28+
[disabled]="disabled" (blur)="onBlur()" />
2929
<ng-container ngProjectAs="igx-suffix">
3030
<ng-content select="igx-suffix"></ng-content>
3131
</ng-container>

projects/igniteui-angular/src/lib/combo/combo.component.spec.ts

Lines changed: 54 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -264,7 +264,7 @@ describe('igxCombo', () => {
264264
fix.detectChanges();
265265
expect(document.activeElement).toEqual(combo.searchInput.nativeElement);
266266
expect(combo.collapsed).toBeFalsy();
267-
combo.handleKeyUp(new KeyboardEvent('keyup', { key: 'ArrowDown'}));
267+
combo.handleKeyUp(new KeyboardEvent('keyup', { key: 'ArrowDown' }));
268268
fix.detectChanges();
269269
expect(dropdown.focusedItem).toBeTruthy();
270270
expect(dropdown.focusedItem.itemIndex).toEqual(0);
@@ -274,7 +274,7 @@ describe('igxCombo', () => {
274274
tick();
275275
fix.detectChanges();
276276
expect(document.activeElement).toEqual(combo.searchInput.nativeElement);
277-
combo.handleKeyUp(new KeyboardEvent('keyup', { key: 'ArrowDown'}));
277+
combo.handleKeyUp(new KeyboardEvent('keyup', { key: 'ArrowDown' }));
278278
fix.detectChanges();
279279
expect(dropdown.focusedItem).toBeTruthy();
280280
expect(dropdown.focusedItem.itemIndex).toEqual(0);
@@ -293,7 +293,7 @@ describe('igxCombo', () => {
293293
expect(IgxDropDownBase.prototype.navigatePrev).toHaveBeenCalledTimes(1);
294294
}));
295295

296-
it('Should properly call dropdown navigateNext with virutal items', ( async () => {
296+
it('Should properly call dropdown navigateNext with virutal items', (async () => {
297297
const fix = TestBed.createComponent(IgxComboSampleComponent);
298298
fix.detectChanges();
299299
const combo = fix.componentInstance.combo;
@@ -463,19 +463,19 @@ describe('igxCombo', () => {
463463
spyOn(combo, 'selectAllItems');
464464
spyOn(combo, 'toggle');
465465
spyOn(combo.dropdown, 'onFocus').and.callThrough();
466-
combo.handleKeyUp(new KeyboardEvent('keyup', { key: 'A'}));
466+
combo.handleKeyUp(new KeyboardEvent('keyup', { key: 'A' }));
467467
combo.handleKeyUp(new KeyboardEvent('keyup', {}));
468468
expect(combo.selectAllItems).toHaveBeenCalledTimes(0);
469469
expect(combo.dropdown.onFocus).toHaveBeenCalledTimes(0);
470-
combo.handleKeyUp(new KeyboardEvent('keyup', { key: 'Enter'}));
470+
combo.handleKeyUp(new KeyboardEvent('keyup', { key: 'Enter' }));
471471
expect(combo.selectAllItems).toHaveBeenCalledTimes(0);
472472
spyOnProperty(combo, 'filteredData', 'get').and.returnValue([1]);
473-
combo.handleKeyUp(new KeyboardEvent('keyup', { key: 'Enter'}));
473+
combo.handleKeyUp(new KeyboardEvent('keyup', { key: 'Enter' }));
474474
expect(combo.selectAllItems).toHaveBeenCalledTimes(0);
475-
combo.handleKeyUp(new KeyboardEvent('keyup', { key: 'ArrowDown'}));
475+
combo.handleKeyUp(new KeyboardEvent('keyup', { key: 'ArrowDown' }));
476476
expect(combo.selectAllItems).toHaveBeenCalledTimes(0);
477477
expect(combo.dropdown.onFocus).toHaveBeenCalledTimes(1);
478-
combo.handleKeyUp(new KeyboardEvent('keyup', { key: 'Escape'}));
478+
combo.handleKeyUp(new KeyboardEvent('keyup', { key: 'Escape' }));
479479
expect(combo.toggle).toHaveBeenCalledTimes(1);
480480
}));
481481
it('Dropdown button should open/close dropdown list', fakeAsync(() => {
@@ -1384,7 +1384,7 @@ describe('igxCombo', () => {
13841384
fixture.detectChanges();
13851385
const dropdownList = fixture.debugElement.query(By.css('.' + CSS_CLASS_DROPDOWNLIST)).nativeElement;
13861386
const verifyOnSelectionChangeEventIsFired = function (itemIndex: number) {
1387-
const dropdownItems = fixture.debugElement.queryAll(By.css('.' + CSS_CLASS_DROPDOWNLISTITEM));
1387+
const dropdownItems = fixture.debugElement.queryAll(By.css('.' + CSS_CLASS_DROPDOWNLISTITEM));
13881388
const checkbox = dropdownItems[itemIndex];
13891389
checkbox.triggerEventHandler('click', mockEvent);
13901390
fixture.detectChanges();
@@ -1545,21 +1545,17 @@ describe('igxCombo', () => {
15451545

15461546
describe('Rendering tests: ', () => {
15471547
it('Should apply all appropriate classes on combo initialization', () => {
1548-
const defaultComboWidth = '100%';
1549-
const defaultComboDDWidth = '100%';
15501548
const fix = TestBed.createComponent(IgxComboScrollTestComponent);
15511549
fix.detectChanges();
15521550

15531551
const comboWrapper = fix.nativeElement.querySelector(CSS_CLASS_COMBO);
15541552
expect(comboWrapper).not.toBeNull();
1555-
expect(comboWrapper.style.width).toEqual(defaultComboWidth);
15561553
expect(comboWrapper.attributes.getNamedItem('ng-reflect-placeholder').nodeValue).toEqual('Items');
15571554
expect(comboWrapper.attributes.getNamedItem('ng-reflect-data').nodeValue).toEqual('Item 1,Item 2,Item 3');
15581555
expect(comboWrapper.attributes.getNamedItem('ng-reflect-filterable')).toBeTruthy();
15591556
expect(comboWrapper.childElementCount).toEqual(2); // Input Group + Dropdown
15601557
expect(comboWrapper.attributes.getNamedItem('class').nodeValue).toEqual(CSS_CLASS_COMBO);
15611558
expect(comboWrapper.attributes.getNamedItem('role').nodeValue).toEqual('combobox');
1562-
expect(comboWrapper.style.width).toEqual(defaultComboWidth);
15631559
expect(comboWrapper.attributes.getNamedItem('aria-haspopup').nodeValue).toEqual('listbox');
15641560
expect(comboWrapper.attributes.getNamedItem('aria-expanded').nodeValue).toEqual('false');
15651561
expect(comboWrapper.attributes.getNamedItem('aria-owns').nodeValue).toEqual(fix.componentInstance.combo.dropdown.id);
@@ -1602,13 +1598,11 @@ describe('igxCombo', () => {
16021598
const dropDownElement = comboWrapper.children[1];
16031599
expect(dropDownElement.classList.contains(CSS_CLASS_COMBO_DROPDOWN)).toBeTruthy();
16041600
expect(dropDownElement.classList.contains(CSS_CLASS_DROPDOWN)).toBeTruthy();
1605-
expect(dropDownElement.attributes.getNamedItem('ng-reflect-width').nodeValue).toEqual(defaultComboDDWidth);
16061601
expect(dropDownElement.childElementCount).toEqual(1);
16071602

16081603
const dropDownList = dropDownElement.children[0];
16091604
expect(dropDownList.classList.contains(CSS_CLASS_DROPDOWNLIST)).toBeTruthy();
16101605
expect(dropDownList.classList.contains('igx-toggle--hidden')).toBeTruthy();
1611-
expect(dropDownList.style.width).toEqual(defaultComboDDWidth);
16121606
expect(dropDownList.childElementCount).toEqual(0);
16131607
});
16141608
it('Should render aria attribute properly', fakeAsync(() => {
@@ -2070,7 +2064,7 @@ describe('igxCombo', () => {
20702064
verifyComboData();
20712065
// index is at bottom
20722066
expect(combo.dropdown.verticalScrollContainer.state.startIndex + combo.dropdown.verticalScrollContainer.state.chunkSize - 1)
2073-
.toEqual(productIndex);
2067+
.toEqual(productIndex);
20742068
await wait(20);
20752069

20762070
productIndex = 485;
@@ -2080,7 +2074,7 @@ describe('igxCombo', () => {
20802074
verifyComboData();
20812075
// index is at bottom
20822076
expect(combo.dropdown.verticalScrollContainer.state.startIndex + combo.dropdown.verticalScrollContainer.state.chunkSize - 1)
2083-
.toEqual(productIndex);
2077+
.toEqual(productIndex);
20842078
await wait(20);
20852079

20862080
productIndex = 873;
@@ -2883,7 +2877,7 @@ describe('igxCombo', () => {
28832877
expect(combo.value).toEqual('My New Custom Item');
28842878
}));
28852879

2886-
it('Disable/Enable filtering at runtime', fakeAsync(() => {
2880+
it('Disable/Enable filtering at runtime', fakeAsync(() => {
28872881
const fix = TestBed.createComponent(IgxComboInputTestComponent);
28882882
fix.detectChanges();
28892883
const combo = fix.componentInstance.combo;
@@ -2954,7 +2948,7 @@ describe('igxCombo', () => {
29542948

29552949
describe('Form control tests: ', () => {
29562950

2957-
it('Should properly initialize when used as a form control', fakeAsync(() => {
2951+
it('Should properly initialize when used as a form control', fakeAsync(() => {
29582952
const fix = TestBed.createComponent(IgxComboFormComponent);
29592953
fix.detectChanges();
29602954
const combo = fix.componentInstance.combo;
@@ -2969,8 +2963,47 @@ describe('igxCombo', () => {
29692963
clearButton.click();
29702964
fix.detectChanges();
29712965
expect(combo.valid).toEqual(IgxComboState.INVALID);
2966+
2967+
combo.onBlur();
2968+
fix.detectChanges();
2969+
expect(combo.valid).toEqual(IgxComboState.INVALID);
2970+
29722971
combo.selectItems([combo.dropdown.items[0], combo.dropdown.items[1]]);
29732972
expect(combo.valid).toEqual(IgxComboState.VALID);
2973+
2974+
combo.onBlur();
2975+
fix.detectChanges();
2976+
expect(combo.valid).toEqual(IgxComboState.INITIAL);
2977+
}));
2978+
2979+
it('Should properly initialize when used as a form control - without validators', fakeAsync(() => {
2980+
const fix = TestBed.createComponent(IgxComboFormComponent);
2981+
fix.detectChanges();
2982+
const combo = fix.componentInstance.combo;
2983+
const form: FormGroup = fix.componentInstance.reactiveForm;
2984+
form.controls.townCombo.validator = null;
2985+
expect(combo).toBeDefined();
2986+
const comboFormReference = fix.componentInstance.reactiveForm.controls.townCombo;
2987+
expect(comboFormReference).toBeDefined();
2988+
expect(combo.selectedItems()).toEqual(comboFormReference.value);
2989+
expect(combo.selectedItems().length).toEqual(1);
2990+
expect(combo.selectedItems()[0].field).toEqual('Connecticut');
2991+
expect(combo.valid).toEqual(IgxComboState.INITIAL);
2992+
const clearButton = fix.debugElement.query(By.css('.' + CSS_CLASS_CLEARBUTTON)).nativeElement;
2993+
clearButton.click();
2994+
fix.detectChanges();
2995+
expect(combo.valid).toEqual(IgxComboState.INITIAL);
2996+
2997+
combo.onBlur();
2998+
fix.detectChanges();
2999+
expect(combo.valid).toEqual(IgxComboState.INITIAL);
3000+
3001+
combo.selectItems([combo.dropdown.items[0], combo.dropdown.items[1]]);
3002+
expect(combo.valid).toEqual(IgxComboState.INITIAL);
3003+
3004+
combo.onBlur();
3005+
fix.detectChanges();
3006+
expect(combo.valid).toEqual(IgxComboState.INITIAL);
29743007
}));
29753008

29763009
it('Should be possible to be enabled/disabled when used as a form control', () => {
@@ -2989,6 +3022,7 @@ describe('igxCombo', () => {
29893022
combo.comboInput.nativeElement.click();
29903023
fix.detectChanges();
29913024
expect(combo.onInputClick).toHaveBeenCalledTimes(1);
3025+
combo.comboInput.nativeElement.blur();
29923026

29933027
form.disable();
29943028
// Disabling the form disables all of the controls in it
@@ -3001,6 +3035,7 @@ describe('igxCombo', () => {
30013035
combo.comboInput.nativeElement.click();
30023036
fix.detectChanges();
30033037
expect(combo.onInputClick).toHaveBeenCalledTimes(1);
3038+
combo.comboInput.nativeElement.blur();
30043039

30053040
// Can enabling the form re-enables all of the controls in it
30063041
form.enable();

0 commit comments

Comments
 (0)