Skip to content

Commit d752ee1

Browse files
committed
Merge branch 'master' of https://github.com/IgniteUI/igniteui-angular into ha-mutliview-calendar-2
2 parents 7ffba6d + a69d8e4 commit d752ee1

File tree

63 files changed

+2580
-600
lines changed

Some content is hidden

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

63 files changed

+2580
-600
lines changed

CHANGELOG.md

+29
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,35 @@
22

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

5+
## 8.2.0
6+
7+
### New Features
8+
- `IgxGrid`, `IgxTreeGrid`, `IgxHierarchicalGrid`
9+
- `uniqueColumnValuesStrategy` input is added. This property provides a callback for loading unique column values on demand. If this property is provided, the unique values it generates will be used by the Excel Style Filtering (instead of using the unique values from the data that is bound to the grid).
10+
- `igxExcelStyleLoading` directive is added, which can be used to provide a custom loading template for the Excel Style Filtering. If this property is not provided, a default loading template will be used instead.
11+
### General
12+
- `IgxGrid`, `IgxTreeGrid`, `IgxHierarchicalGrid`
13+
- **Breaking Change** `igxExcelStyleSortingTemplate` directive is renamed to `igxExcelStyleSorting`.
14+
- **Breaking Change** `igxExcelStyleMovingTemplate` directive is renamed to `igxExcelStyleMoving`.
15+
- **Breaking Change** `igxExcelStyleHidingTemplate` directive is renamed to `igxExcelStyleHiding`.
16+
- **Breaking Change** `igxExcelStylePinningTemplate` directive is renamed to `igxExcelStylePinning`.
17+
18+
## 8.1.3
19+
- `IgxCombo`
20+
- Combo `onSelectionChange` events now emits the item(s) that were added to or removed from the collection:
21+
```html
22+
<igx-combo (onSelectionChange)="handleChange($event)">
23+
```
24+
```typescript
25+
export class Example {
26+
...
27+
handleChange(event: IComboSelectionChangeEventArgs) {
28+
console.log("Items added: ", [...event.added]); // the items added to the selection in this change
29+
console.log("Items removed: ", [...event.removed]); // the items removed from the selection in this change
30+
}
31+
}
32+
```
33+
534
## 8.1.2
635

736
### New Features

projects/igniteui-angular/migrations/migration-collection.json

+5
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@
4545
"version": "7.3.4",
4646
"description": "Updates Ignite UI for Angular from v7.2.0 to v7.3.4",
4747
"factory": "./update-7_3_4"
48+
},
49+
"migration-10": {
50+
"version": "8.2.0",
51+
"description": "Updates Ignite UI for Angular from v8.1.x to v8.2.0",
52+
"factory": "./update-8_2_0"
4853
}
4954
}
5055
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
{
2+
"$schema": "../../common/schema/selector.schema.json",
3+
"changes": [
4+
{
5+
"type": "directive",
6+
"selector": "igxExcelStyleSortingTemplate",
7+
"replaceWith": "igxExcelStyleSorting"
8+
},
9+
{
10+
"type": "directive",
11+
"selector": "igxExcelStyleMovingTemplate",
12+
"replaceWith": "igxExcelStyleMoving"
13+
},
14+
{
15+
"type": "directive",
16+
"selector": "igxExcelStyleHidingTemplate",
17+
"replaceWith": "igxExcelStyleHiding"
18+
},
19+
{
20+
"type": "directive",
21+
"selector": "igxExcelStylePinningTemplate",
22+
"replaceWith": "igxExcelStylePinning"
23+
}
24+
]
25+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
import * as path from 'path';
2+
3+
// tslint:disable:no-implicit-dependencies
4+
import { virtualFs } from '@angular-devkit/core';
5+
import { EmptyTree } from '@angular-devkit/schematics';
6+
// tslint:disable-next-line:no-submodule-imports
7+
import { SchematicTestRunner, UnitTestTree } from '@angular-devkit/schematics/testing';
8+
9+
describe('Update 8.2.0', () => {
10+
let appTree: UnitTestTree;
11+
const schematicRunner = new SchematicTestRunner('ig-migrate', path.join(__dirname, '../migration-collection.json'));
12+
const configJson = {
13+
defaultProject: 'testProj',
14+
projects: {
15+
testProj: {
16+
sourceRoot: '/testSrc'
17+
}
18+
},
19+
schematics: {
20+
'@schematics/angular:component': {
21+
prefix: 'appPrefix'
22+
}
23+
}
24+
};
25+
26+
beforeEach(() => {
27+
appTree = new UnitTestTree(new EmptyTree());
28+
appTree.create('/angular.json', JSON.stringify(configJson));
29+
});
30+
31+
it('should update Excel Style Filtering template selectors', done => {
32+
appTree.create(
33+
'/testSrc/appPrefix/component/custom.component.html',
34+
`<igx-grid [data]="data" height="500px" [autoGenerate]="true" [allowFiltering]='true' [filterMode]="'excelStyleFilter'">
35+
<ng-template igxExcelStyleSortingTemplate><div class="esf-custom-sorting">Sorting Template</div></ng-template>
36+
<ng-template igxExcelStyleHidingTemplate><div class="esf-custom-hiding">Hiding Template</div></ng-template>
37+
<ng-template igxExcelStyleMovingTemplate><div class="esf-custom-moving">Moving Template</div></ng-template>
38+
<ng-template igxExcelStylePinningTemplate><div class="esf-custom-pinning">Pinning Template</div></ng-template>
39+
</igx-grid>`);
40+
41+
const tree = schematicRunner.runSchematic('migration-10', {}, appTree);
42+
expect(tree.readContent('/testSrc/appPrefix/component/custom.component.html'))
43+
.toEqual(
44+
`<igx-grid [data]="data" height="500px" [autoGenerate]="true" [allowFiltering]='true' [filterMode]="'excelStyleFilter'">
45+
<ng-template igxExcelStyleSorting><div class="esf-custom-sorting">Sorting Template</div></ng-template>
46+
<ng-template igxExcelStyleHiding><div class="esf-custom-hiding">Hiding Template</div></ng-template>
47+
<ng-template igxExcelStyleMoving><div class="esf-custom-moving">Moving Template</div></ng-template>
48+
<ng-template igxExcelStylePinning><div class="esf-custom-pinning">Pinning Template</div></ng-template>
49+
</igx-grid>`);
50+
51+
done();
52+
});
53+
});
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import {
2+
Rule,
3+
SchematicContext,
4+
Tree
5+
} from '@angular-devkit/schematics';
6+
import { UpdateChanges } from '../common/UpdateChanges';
7+
8+
const version = '8.2.0';
9+
10+
export default function(): Rule {
11+
return (host: Tree, context: SchematicContext) => {
12+
context.logger.info(`Applying migration for Ignite UI for Angular to version ${version}`);
13+
14+
const update = new UpdateChanges(__dirname, host, context);
15+
update.applyChanges();
16+
};
17+
}

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

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,13 @@ export class IgxBannerComponent implements IToggleView {
4747
@ViewChild('expansionPanel', { static: true })
4848
private _expansionPanel: IgxExpansionPanelComponent;
4949

50-
@ContentChild(IgxBannerActionsDirective, { static: true })
50+
@ContentChild(IgxBannerActionsDirective, { static: false })
5151
private _bannerActionTemplate: IgxBannerActionsDirective;
5252

5353
/**
5454
* @hidden
5555
*/
56-
@ContentChild(IgxIconComponent, { static: true })
56+
@ContentChild(IgxIconComponent, { static: false })
5757
public bannerIcon: IgxIconComponent;
5858

5959
/**

projects/igniteui-angular/src/lib/chips/chip.component.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import {
1919
IDragStartEventArgs,
2020
IgxDropEnterEventArgs,
2121
IgxDropEventArgs
22-
} from '../directives/dragdrop/dragdrop.directive';
22+
} from '../directives/drag-drop/drag-drop.directive';
2323

2424

2525
export interface IBaseChipEventArgs {

projects/igniteui-angular/src/lib/chips/chips-area.component.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import {
2323
} from './chip.component';
2424
import {
2525
IgxDropEnterEventArgs
26-
} from '../directives/dragdrop/dragdrop.directive';
26+
} from '../directives/drag-drop/drag-drop.directive';
2727
import { takeUntil } from 'rxjs/operators';
2828
import { Subject } from 'rxjs/internal/Subject';
2929

projects/igniteui-angular/src/lib/chips/chips.module.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import { IgxAvatarModule } from '../avatar/avatar.component';
66
import { IgxIconModule } from '../icon/index';
77
import { IgxChipComponent } from './chip.component';
88
import { IgxChipsAreaComponent } from './chips-area.component';
9-
import { IgxDragDropModule } from '../directives/dragdrop/dragdrop.directive';
9+
import { IgxDragDropModule } from '../directives/drag-drop/drag-drop.directive';
1010
import { IgxPrefixModule, IgxPrefixDirective} from '../directives/prefix/prefix.directive';
1111
import { IgxSuffixModule, IgxSuffixDirective } from '../directives/suffix/suffix.directive';
1212

projects/igniteui-angular/src/lib/combo/README.md

+10-10
Original file line numberDiff line numberDiff line change
@@ -276,14 +276,14 @@ Setting `[displayDensity]` affects the control's items' and inputs' css properti
276276

277277
| Name | Description | Cancelable | Parameters |
278278
|------------------ |-------------------------------------------------------------------------|------------- |-----------------------------------------|
279-
| `onSelectionChange` | Emitted when item selection is changing, before the selection completes | true | { oldSelection: `Array<any>`, newSelection: `Array<any>`, event: Event } |
279+
| `onSelectionChange` | Emitted when item selection is changing, before the selection completes | true | [`IComboSelectionChangeEventArgs`](https://www.infragistics.com/products/ignite-ui-angular/docs/typescript/latest/interfaces/icomboselectionchangeeventargs.html) |
280280
| `onSearchInput` | Emitted when an the search input's input event is triggered | false | { searchValue: `string` } |
281-
| `onAddition` | Emitted when an item is being added to the data collection | false | { oldCollection: `Array<any>`, addedItem: `<any>`, newCollection: `Array<any>` }|
282-
| `onDataPreLoad` | Emitted when new chunk of data is loaded from the virtualization | false | { event: Event } |
283-
| `onOpening` | Emitted before the dropdown is opened | false | { event: Event } |
284-
| `onOpened` | Emitted after the dropdown is opened | false | { event: Event } |
285-
| `onClosing` | Emitted before the dropdown is closed | false | { event: Event } |
286-
| `onClosed` | Emitted after the dropdown is closed | false | { event: Event } |
281+
| `onAddition` | Emitted when an item is being added to the data collection | false | { oldCollection: `any[]`, addedItem: `<any>`, newCollection: `any[]` }|
282+
| `onDataPreLoad` | Emitted when new chunk of data is loaded from the virtualization | false | { event: `Event` } |
283+
| `onOpening` | Emitted before the dropdown is opened | false | { event: `Event` } |
284+
| `onOpened` | Emitted after the dropdown is opened | false | { event: `Event` } |
285+
| `onClosing` | Emitted before the dropdown is closed | false | { event: `Event` } |
286+
| `onClosed` | Emitted after the dropdown is closed | false | { event: `Event` } |
287287

288288
### Methods
289289

@@ -292,9 +292,9 @@ Setting `[displayDensity]` affects the control's items' and inputs' css properti
292292
| `open` | Opens drop down | `void` | `None` |
293293
| `close` | Closes drop down | `void` | `None` |
294294
| `toggle` | Toggles drop down | `void` | `None` |
295-
| `selectedItems` | Get current selection state | `Array<any>` | `None` |
296-
| `selectItems` | Select defined items | `void` | items: `Array<any>`, clearCurrentSelection: `boolean` |
297-
| `deselectItems` | Deselect defined items | `void` | items: `Array<any>` |
295+
| `selectedItems` | Get current selection state | `any[]` | `None` |
296+
| `selectItems` | Select defined items | `void` | items: `any[]`, clearCurrentSelection: `boolean` |
297+
| `deselectItems` | Deselect defined items | `void` | items: `any[]` |
298298
| `selectAllItems` | Select all (filtered) items | `void` | ignoreFilter?: `boolean` - if `true` selects **all** values |
299299
| `deselectAllItems` | Deselect (filtered) all items | `void` | ignoreFilter?: `boolean` - if `true` deselects **all** values |
300300
| `setSelectedItem` | Toggles (select/deselect) an item by key | `void` | itemID: any, select = true, event?: Event |

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

+81-15
Original file line numberDiff line numberDiff line change
@@ -1015,6 +1015,8 @@ describe('igxCombo', () => {
10151015
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith({
10161016
oldSelection: [],
10171017
newSelection: [targetItem.itemID],
1018+
added: [targetItem.itemID],
1019+
removed: [],
10181020
event: undefined,
10191021
cancel: false
10201022
});
@@ -1027,6 +1029,8 @@ describe('igxCombo', () => {
10271029
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith({
10281030
oldSelection: [targetItem.itemID],
10291031
newSelection: [],
1032+
added: [],
1033+
removed: [targetItem.itemID],
10301034
event: undefined,
10311035
cancel: false
10321036
});
@@ -1049,6 +1053,8 @@ describe('igxCombo', () => {
10491053
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith({
10501054
oldSelection: oldSelection,
10511055
newSelection: newSelection,
1056+
added: [combo.data[1], combo.data[5], combo.data[6]],
1057+
removed: [],
10521058
event: undefined,
10531059
cancel: false
10541060
});
@@ -1063,6 +1069,8 @@ describe('igxCombo', () => {
10631069
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith({
10641070
oldSelection: oldSelection,
10651071
newSelection: newSelection,
1072+
removed: [],
1073+
added: [combo.data[3]],
10661074
event: undefined,
10671075
cancel: false
10681076
});
@@ -1076,6 +1084,8 @@ describe('igxCombo', () => {
10761084
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith({
10771085
oldSelection: oldSelection,
10781086
newSelection: newSelection,
1087+
removed: oldSelection,
1088+
added: [combo.data[0]],
10791089
event: undefined,
10801090
cancel: false
10811091
});
@@ -1091,6 +1101,8 @@ describe('igxCombo', () => {
10911101
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith({
10921102
oldSelection: oldSelection,
10931103
newSelection: newSelection,
1104+
removed: [combo.data[0]],
1105+
added: [],
10941106
event: undefined,
10951107
cancel: false
10961108
});
@@ -1410,6 +1422,8 @@ describe('igxCombo', () => {
14101422
const eventParams = {
14111423
oldSelection: [],
14121424
newSelection: [],
1425+
added: [],
1426+
removed: [],
14131427
event: mockEvent,
14141428
cancel: false
14151429
};
@@ -1427,29 +1441,23 @@ describe('igxCombo', () => {
14271441
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith(eventParams);
14281442
};
14291443

1430-
eventParams.newSelection.push(dropdown.items[3].value);
1444+
eventParams.newSelection = [dropdown.items[3].value];
1445+
eventParams.added = [dropdown.items[3].value];
14311446
verifyOnSelectionChangeEventIsFired(3);
14321447
timesFired++;
14331448

1434-
eventParams.oldSelection.push(dropdown.items[3].value);
1435-
eventParams.newSelection.push(dropdown.items[7].value);
1449+
eventParams.oldSelection = [dropdown.items[3].value];
1450+
eventParams.newSelection = [dropdown.items[3].value, dropdown.items[7].value];
1451+
eventParams.added = [dropdown.items[7].value];
14361452
verifyOnSelectionChangeEventIsFired(7);
14371453
timesFired++;
14381454

1439-
eventParams.oldSelection.push(dropdown.items[7].value);
1440-
eventParams.newSelection.push(dropdown.items[1].value);
1441-
verifyOnSelectionChangeEventIsFired(1);
1442-
timesFired++;
1443-
14441455
// Deselecting an item
1445-
eventParams.oldSelection.push(dropdown.items[1].value);
1446-
eventParams.newSelection = eventParams.newSelection.filter(item => item !== dropdown.items[7].value);
1456+
eventParams.oldSelection = [dropdown.items[3].value, dropdown.items[7].value];
1457+
eventParams.newSelection = [dropdown.items[3].value];
1458+
eventParams.added = [];
1459+
eventParams.removed = [dropdown.items[7].value];
14471460
verifyOnSelectionChangeEventIsFired(7);
1448-
timesFired++;
1449-
1450-
eventParams.oldSelection = eventParams.oldSelection.filter(item => item !== dropdown.items[7].value);
1451-
eventParams.newSelection = eventParams.newSelection.filter(item => item !== dropdown.items[1].value);
1452-
verifyOnSelectionChangeEventIsFired(1);
14531461
}));
14541462
it('Should be able to select item when in grouped state', fakeAsync(() => {
14551463
const fixture = TestBed.createComponent(IgxComboSampleComponent);
@@ -1576,6 +1584,64 @@ describe('igxCombo', () => {
15761584
// onSelectionChange fires and overrides the selection to be [];
15771585
expect(combo.selectedItems()).toEqual([]);
15781586
}));
1587+
1588+
it('Should properly emit added and removed values in change event - single values', () => {
1589+
const fixture = TestBed.createComponent(IgxComboSampleComponent);
1590+
fixture.detectChanges();
1591+
const combo = fixture.componentInstance.combo;
1592+
const selectionSpy = spyOn(fixture.componentInstance, 'onSelectionChange');
1593+
const expectedResults = {
1594+
newSelection: [combo.data[0]],
1595+
oldSelection: [],
1596+
added: [combo.data[0]],
1597+
removed: [],
1598+
event: undefined,
1599+
cancel: false
1600+
};
1601+
combo.selectItems([combo.data[0]]);
1602+
expect(selectionSpy).toHaveBeenCalledWith(expectedResults);
1603+
Object.assign(expectedResults, {
1604+
newSelection: [],
1605+
oldSelection: [combo.data[0]],
1606+
added: [],
1607+
removed: [combo.data[0]]
1608+
});
1609+
combo.deselectItems([combo.data[0]]);
1610+
expect(selectionSpy).toHaveBeenCalledWith(expectedResults);
1611+
});
1612+
1613+
it('Should properly emit added and removed values in change event - multiple values', () => {
1614+
const fixture = TestBed.createComponent(IgxComboSampleComponent);
1615+
fixture.detectChanges();
1616+
const combo = fixture.componentInstance.combo;
1617+
const selectionSpy = spyOn(fixture.componentInstance, 'onSelectionChange');
1618+
const expectedResults = {
1619+
newSelection: [combo.data[0], combo.data[1], combo.data[2]],
1620+
oldSelection: [],
1621+
added: [combo.data[0], combo.data[1], combo.data[2]],
1622+
removed: [],
1623+
event: undefined,
1624+
cancel: false
1625+
};
1626+
combo.selectItems([combo.data[0], combo.data[1], combo.data[2]]);
1627+
expect(selectionSpy).toHaveBeenCalledWith(expectedResults);
1628+
combo.deselectItems([combo.data[0]]);
1629+
Object.assign(expectedResults, {
1630+
newSelection: [combo.data[1], combo.data[2]],
1631+
oldSelection: [combo.data[0], combo.data[1], combo.data[2]],
1632+
added: [],
1633+
removed: [combo.data[0]]
1634+
});
1635+
expect(selectionSpy).toHaveBeenCalledWith(expectedResults);
1636+
Object.assign(expectedResults, {
1637+
newSelection: [combo.data[4], combo.data[5], combo.data[6]],
1638+
oldSelection: [combo.data[1], combo.data[2]],
1639+
added: [combo.data[4], combo.data[5], combo.data[6]],
1640+
removed: [combo.data[1], combo.data[2]]
1641+
});
1642+
combo.selectItems([combo.data[4], combo.data[5], combo.data[6]], true);
1643+
expect(selectionSpy).toHaveBeenCalledWith(expectedResults);
1644+
});
15791645
});
15801646

15811647
describe('Rendering tests: ', () => {

0 commit comments

Comments
 (0)