Skip to content

Commit b797bac

Browse files
authored
Merge branch 'master' into nalipiev/update-ig-schematics
2 parents f4a8ec3 + 71eb4d3 commit b797bac

Some content is hidden

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

49 files changed

+886
-272
lines changed

CHANGELOG.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ All notable changes for each version of this project will be documented in this
4848
- `cellEditExit` is a new event that fires when cell exits edit mode
4949
- `rowEditExit` is a new event that fires when row exits edit mode
5050
- Added *getRowData(rowSelector)* method that returns an object that represents the data that is contained in the specified row component.
51-
- Added ability to spawn row adding UI through exoposed methods. Note that rowEditing should be enabled.
51+
- Added ability to spawn row adding UI through exposed methods. Note that rowEditing should be enabled.
5252
- `beginAddRow` method which starts the adding row UI.
5353
- `beginAddChild` method which starts the adding child UI.
5454
```typescript
@@ -63,6 +63,22 @@ All notable changes for each version of this project will be documented in this
6363
</igx-action-strip>
6464
</igx-tree-grid>
6565
```
66+
- A new `locale` and `pipeArgs` parameters are introduced in the `operate` method exposed by the `IgxNumberSummaryOperand` and `IgxDateSummaryOperand`, which exposes the grid locale. Use the `locale` parameter to get localized summary data (as per the grid locale. If not passed, `locale` defaults to `'en-US'`). Use the `pipeArgs` parameter only if you want to customize the format of the date and numeric values that will be returned.
67+
```typescript
68+
class MySummary extends IgxDateSummaryOperand {
69+
operate(columnData: any[], allData = [], fieldName, locale: string, pipeArgs: IColumnPipeArgs): IgxSummaryResult[] {
70+
const pipeArgs: IColumnPipeArgs = {
71+
format: 'longDate',
72+
timezone: 'UTC',
73+
digitsInfo: '1.1-2'
74+
}
75+
const result = super.operate(columnData, allData, fieldName, locale, pipeArgs);
76+
return result;
77+
}
78+
}
79+
```
80+
- A new `pipeArgs` input property is exposed by the `IgxColumnComponent`, which is used to pass arguments to the Angular `DatePipe` and `DecimalPipe`, to format the display for date and numeric columns.
81+
```typescript
6682
- ` IGX_INPUT_GROUP_TYPE` injection token
6783
- Allows for setting an input group `type` on a global level, so all input-group instances, including components using such an instance as a template will have their input group type set to the one specified by the token. It can be overridden on a component level by explicitly setting a `type`.
6884
- ` IgxExcelExporterService`

projects/igniteui-angular/migrations/common/tsUtils.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ export function getTypeDefinitionAtPosition(langServ: tss.LanguageService, entry
236236
.filter(<(a: ts.Statement) => a is ts.ClassDeclaration>(m => m.kind === ts.SyntaxKind.ClassDeclaration))
237237
.find(m => m.name.getText() === definition.containerName);
238238
const member: ts.ClassElement = classDeclaration
239-
.members
239+
?.members
240240
.find(m => m.name.getText() === definition.name);
241241
if (!member || !member.name) { return null; }
242242
typeDefs = langServ.getTypeDefinitionAtPosition(definition.fileName, member.name.getStart() + 1);

projects/igniteui-angular/migrations/update-10_2_0/changes/members.json

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,58 @@
99
"IgxTreeGridComponent",
1010
"IgxHierarchicalGridComponent"
1111
]
12+
},
13+
{
14+
"member": "onRowEditEnter",
15+
"replaceWith": "rowEditEnter",
16+
"definedIn": [
17+
"IgxGridComponent",
18+
"IgxTreeGridComponent",
19+
"IgxHierarchicalGridComponent"
20+
]
21+
},
22+
{
23+
"member": "onCellEditEnter",
24+
"replaceWith": "cellEditEnter",
25+
"definedIn": [
26+
"IgxGridComponent",
27+
"IgxTreeGridComponent",
28+
"IgxHierarchicalGridComponent"
29+
]
30+
},
31+
{
32+
"member": "onCellEdit",
33+
"replaceWith": "cellEdit",
34+
"definedIn": [
35+
"IgxGridComponent",
36+
"IgxTreeGridComponent",
37+
"IgxHierarchicalGridComponent"
38+
]
39+
},
40+
{
41+
"member": "onCellEditCancel",
42+
"replaceWith": "cellEditExit",
43+
"definedIn": [
44+
"IgxGridComponent",
45+
"IgxTreeGridComponent",
46+
"IgxHierarchicalGridComponent"
47+
]
48+
},
49+
{
50+
"member": "onRowEditCancel",
51+
"replaceWith": "rowEditExit",
52+
"definedIn": [
53+
"IgxGridComponent",
54+
"IgxTreeGridComponent",
55+
"IgxHierarchicalGridComponent"
56+
]
57+
},
58+
{
59+
"member": "panel",
60+
"replaceWith": "owner",
61+
"definedIn": [
62+
"IExpansionPanelEventArgs"
63+
]
1264
}
1365
]
1466
}

projects/igniteui-angular/migrations/update-10_2_0/index.spec.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,4 +50,51 @@ describe('Update 10.2.0', () => {
5050
it('should replace selectedRows() with selectedRows in ts files', async () => {
5151
pending('set up tests for migrations through lang service');
5252
});
53+
54+
it('Should remove references to deprecated `pane` property of `IExpansionPanelEventArgs`', async () => {
55+
pending('set up tests for migrations through lang service');
56+
appTree.create(
57+
'/testSrc/appPrefix/component/expansion-test.component.ts',
58+
`import { Component, ViewChild } from '@angular/core';
59+
import { IExpansionPanelEventArgs, IgxExpansionPanelComponent } from 'igniteui-angular';
60+
61+
@Component({
62+
selector: 'app-expansion-test',
63+
templateUrl: './expansion-test.component.html',
64+
styleUrls: ['./expansion-test.component.scss']
65+
})
66+
export class ExpansionTestComponent {
67+
68+
@ViewChild(IgxExpansionPanelComponent, { static: true })
69+
public panel: IgxExpansionPanelComponent;
70+
71+
public onPanelOpened(event: IExpansionPanelEventArgs) {
72+
console.log(event.panel);
73+
}
74+
}`
75+
);
76+
const tree = await schematicRunner
77+
.runSchematicAsync('migration-17', {}, appTree)
78+
.toPromise();
79+
const expectedContent = `import { Component, ViewChild } from '@angular/core';
80+
import { IExpansionPanelEventArgs, IgxExpansionPanelComponent } from 'igniteui-angular';
81+
82+
@Component({
83+
selector: 'app-expansion-test',
84+
templateUrl: './expansion-test.component.html',
85+
styleUrls: ['./expansion-test.component.scss']
86+
})
87+
export class ExpansionTestComponent {
88+
89+
@ViewChild(IgxExpansionPanelComponent, { static: true })
90+
public panel: IgxExpansionPanelComponent;
91+
92+
public onPanelOpened(event: IExpansionPanelEventArgs) {
93+
console.log(event.owner);
94+
}
95+
}`;
96+
expect(
97+
tree.readContent('/testSrc/appPrefix/component/expansion-test.component.ts')
98+
).toEqual(expectedContent);
99+
});
53100
});

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -336,9 +336,9 @@ Setting `[displayDensity]` affects the control's items' and inputs' css properti
336336
| `onSearchInput` | Emitted when an the search input's input event is triggered | true | { searchValue: `string` } |
337337
| `onAddition` | Emitted when an item is being added to the data collection | false | { oldCollection: `any[]`, addedItem: `<any>`, newCollection: `any[]` }|
338338
| `onDataPreLoad` | Emitted when new chunk of data is loaded from the virtualization | false | { event: `Event` } |
339-
| `onOpening` | Emitted before the dropdown is opened | false | { event: `Event` } |
339+
| `onOpening` | Emitted before the dropdown is opened | false | `IBaseCancelableBrowserEventArgs` |
340340
| `onOpened` | Emitted after the dropdown is opened | false | { event: `Event` } |
341-
| `onClosing` | Emitted before the dropdown is closed | false | { event: `Event` } |
341+
| `onClosing` | Emitted before the dropdown is closed | false | `IBaseCancelableBrowserEventArgs` |
342342
| `onClosed` | Emitted after the dropdown is closed | false | { event: `Event` } |
343343

344344
### Methods

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

Lines changed: 60 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ import { DisplayDensity } from '../core/density';
1919
import { AbsoluteScrollStrategy, ConnectedPositioningStrategy } from '../services/public_api';
2020
import { IgxSelectionAPIService } from '../core/selection';
2121
import { IgxIconService } from '../icon/public_api';
22+
import { IBaseCancelableBrowserEventArgs } from '../core/utils';
2223

2324
const CSS_CLASS_COMBO = 'igx-combo';
2425
const CSS_CLASS_COMBO_DROPDOWN = 'igx-combo__drop-down';
@@ -282,6 +283,45 @@ describe('igxCombo', () => {
282283
combo.selectItems([], true);
283284
expect(combo.selectedItems()).toEqual([]);
284285
});
286+
it('should emit owner on `onOpening` and `onClosing`', () => {
287+
combo = new IgxComboComponent(elementRef, mockCdr, mockSelection as any, mockComboService,
288+
mockIconService, null, null, mockInjector);
289+
spyOn(mockIconService, 'addSvgIconFromText').and.returnValue(null);
290+
combo.ngOnInit();
291+
spyOn(combo.onOpening, 'emit').and.callThrough();
292+
spyOn(combo.onClosing, 'emit').and.callThrough();
293+
const mockObj = {};
294+
const inputEvent: IBaseCancelableBrowserEventArgs = {
295+
cancel: false,
296+
owner: mockObj,
297+
};
298+
combo.comboInput = <any>{
299+
nativeElement: {
300+
focus: () => {}
301+
}
302+
};
303+
combo.handleOpening(inputEvent);
304+
const expectedCall: IBaseCancelableBrowserEventArgs = Object.assign({}, inputEvent, { owner: combo });
305+
expect(combo.onOpening.emit).toHaveBeenCalledWith(expectedCall);
306+
expect(inputEvent.owner).toEqual(mockObj);
307+
combo.handleClosing(inputEvent);
308+
expect(combo.onClosing.emit).toHaveBeenCalledWith(expectedCall);
309+
expect(inputEvent.owner).toEqual(mockObj);
310+
let sub = combo.onOpening.subscribe((e: IBaseCancelableBrowserEventArgs) => {
311+
e.cancel = true;
312+
});
313+
combo.handleOpening(inputEvent);
314+
expect(inputEvent.cancel).toEqual(true);
315+
sub.unsubscribe();
316+
inputEvent.cancel = false;
317+
318+
sub = combo.onClosing.subscribe((e: IBaseCancelableBrowserEventArgs) => {
319+
e.cancel = true;
320+
});
321+
combo.handleClosing(inputEvent);
322+
expect(inputEvent.cancel).toEqual(true);
323+
sub.unsubscribe();
324+
});
285325
it('should fire onSelectionChange event on item selection', () => {
286326
const selectionService = new IgxSelectionAPIService();
287327
combo = new IgxComboComponent(elementRef, mockCdr, selectionService, mockComboService,
@@ -299,12 +339,13 @@ describe('igxCombo', () => {
299339

300340
combo.selectItems(newSelection);
301341
expect(combo.onSelectionChange.emit).toHaveBeenCalledTimes(1);
302-
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith({
342+
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith(<IComboSelectionChangeEventArgs>{
303343
oldSelection: oldSelection,
304344
newSelection: newSelection,
305345
added: newSelection,
306346
removed: [],
307347
event: undefined,
348+
owner: combo,
308349
displayText: `${newSelection.join(', ')}`,
309350
cancel: false
310351
});
@@ -314,12 +355,13 @@ describe('igxCombo', () => {
314355
oldSelection = [...newSelection];
315356
newSelection.push(newItem);
316357
expect(combo.onSelectionChange.emit).toHaveBeenCalledTimes(2);
317-
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith({
358+
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith(<IComboSelectionChangeEventArgs>{
318359
oldSelection: oldSelection,
319360
newSelection: newSelection,
320361
removed: [],
321362
added: [combo.data[3]],
322363
event: undefined,
364+
owner: combo,
323365
displayText: `${newSelection.join(', ')}`,
324366
cancel: false
325367
});
@@ -328,12 +370,13 @@ describe('igxCombo', () => {
328370
newSelection = [combo.data[0]];
329371
combo.selectItems(newSelection, true);
330372
expect(combo.onSelectionChange.emit).toHaveBeenCalledTimes(3);
331-
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith({
373+
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith(<IComboSelectionChangeEventArgs>{
332374
oldSelection: oldSelection,
333375
newSelection: newSelection,
334376
removed: oldSelection,
335377
added: newSelection,
336378
event: undefined,
379+
owner: combo,
337380
displayText: `${newSelection.join(', ')}`,
338381
cancel: false
339382
});
@@ -344,12 +387,13 @@ describe('igxCombo', () => {
344387
combo.deselectItems([newItem]);
345388
expect(combo.selectedItems().length).toEqual(0);
346389
expect(combo.onSelectionChange.emit).toHaveBeenCalledTimes(4);
347-
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith({
390+
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith(<IComboSelectionChangeEventArgs>{
348391
oldSelection: oldSelection,
349392
newSelection: newSelection,
350393
removed: [combo.data[0]],
351394
added: [],
352395
event: undefined,
396+
owner: combo,
353397
displayText: `${newSelection.join(', ')}`,
354398
cancel: false
355399
});
@@ -372,6 +416,7 @@ describe('igxCombo', () => {
372416
added: [combo.data[0][combo.valueKey]],
373417
removed: [],
374418
event: undefined,
419+
owner: combo,
375420
displayText: `${combo.data[0][combo.displayKey]}`,
376421
cancel: false
377422
};
@@ -408,6 +453,7 @@ describe('igxCombo', () => {
408453
added: newSelection.map(e => e[combo.valueKey]),
409454
removed: [],
410455
event: undefined,
456+
owner: combo,
411457
displayText: `${newSelection.map(entry => entry[combo.displayKey]).join(', ')}`,
412458
cancel: false
413459
};
@@ -472,11 +518,12 @@ describe('igxCombo', () => {
472518
combo.selectAllItems(true);
473519
expect(combo.selectedItems()).toEqual(data);
474520
expect(combo.onSelectionChange.emit).toHaveBeenCalledTimes(1);
475-
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith({
521+
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith(<IComboSelectionChangeEventArgs>{
476522
oldSelection: [],
477523
newSelection: data,
478524
added: data,
479525
removed: [],
526+
owner: combo,
480527
event: undefined,
481528
displayText: `${combo.data.join(', ')}`,
482529
cancel: false
@@ -485,11 +532,12 @@ describe('igxCombo', () => {
485532
combo.deselectAllItems(true);
486533
expect(combo.selectedItems()).toEqual([]);
487534
expect(combo.onSelectionChange.emit).toHaveBeenCalledTimes(2);
488-
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith({
535+
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith(<IComboSelectionChangeEventArgs>{
489536
oldSelection: data,
490537
newSelection: [],
491538
added: [],
492539
removed: data,
540+
owner: combo,
493541
event: undefined,
494542
displayText: '',
495543
cancel: false
@@ -1879,12 +1927,13 @@ describe('igxCombo', () => {
18791927
expect(selectedItem_1.element.nativeElement.classList.contains(CSS_CLASS_SELECTED)).toBeTruthy();
18801928
expect(combo.onSelectionChange.emit).toHaveBeenCalledTimes(1);
18811929
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith(
1882-
{
1930+
<IComboSelectionChangeEventArgs>{
18831931
newSelection: [selectedItem_1.value[combo.valueKey]],
18841932
oldSelection: [],
18851933
added: [selectedItem_1.value[combo.valueKey]],
18861934
removed: [],
18871935
event: UIInteractions.getMouseEvent('click'),
1936+
owner: combo,
18881937
displayText: selectedItem_1.value[combo.valueKey],
18891938
cancel: false
18901939
});
@@ -1896,12 +1945,13 @@ describe('igxCombo', () => {
18961945
expect(selectedItem_2.element.nativeElement.classList.contains(CSS_CLASS_SELECTED)).toBeTruthy();
18971946
expect(combo.onSelectionChange.emit).toHaveBeenCalledTimes(2);
18981947
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith(
1899-
{
1948+
<IComboSelectionChangeEventArgs>{
19001949
newSelection: [selectedItem_1.value[combo.valueKey], selectedItem_2.value[combo.valueKey]],
19011950
oldSelection: [selectedItem_1.value[combo.valueKey]],
19021951
added: [selectedItem_2.value[combo.valueKey]],
19031952
removed: [],
19041953
event: UIInteractions.getMouseEvent('click'),
1954+
owner: combo,
19051955
displayText: selectedItem_1.value[combo.valueKey] + ', ' + selectedItem_2.value[combo.valueKey],
19061956
cancel: false
19071957
});
@@ -1914,12 +1964,13 @@ describe('igxCombo', () => {
19141964
expect(unselectedItem.element.nativeElement.classList.contains(CSS_CLASS_SELECTED)).toBeFalsy();
19151965
expect(combo.onSelectionChange.emit).toHaveBeenCalledTimes(3);
19161966
expect(combo.onSelectionChange.emit).toHaveBeenCalledWith(
1917-
{
1967+
<IComboSelectionChangeEventArgs>{
19181968
newSelection: [selectedItem_2.value[combo.valueKey]],
19191969
oldSelection: [selectedItem_1.value[combo.valueKey], selectedItem_2.value[combo.valueKey]],
19201970
added: [],
19211971
removed: [unselectedItem.value[combo.valueKey]],
19221972
event: UIInteractions.getMouseEvent('click'),
1973+
owner: combo,
19231974
displayText: selectedItem_2.value[combo.valueKey],
19241975
cancel: false
19251976
});

0 commit comments

Comments
 (0)