Skip to content

Commit 8ee9125

Browse files
authored
Merge branch 'master' into mkirova/fix-10664
2 parents eb13fd4 + 6911329 commit 8ee9125

File tree

11 files changed

+266
-101
lines changed

11 files changed

+266
-101
lines changed

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,16 @@
33
All notable changes for each version of this project will be documented in this file.
44

55
## 13.1.0
6+
67
### New Features
78
- `igxTooltipTarget` directive now allows specifying a plain text tooltip without adding an additional DOM element decorated with the `igxTooltip` directive. This is achieved via the newly introduced `tooltip` string input.
89
```html
910
<button igxTooltipTarget [tooltip]="'Infragistics Inc. HQ'">
1011
info
1112
</button>
1213
```
14+
- `IgxTabs` have full right-to-left (RTL) support.
15+
1316
### General
1417

1518
- `IgxGrid`, `IgxTreeGrid`, `IgxHierarchicalGrid`

projects/igniteui-angular/src/lib/core/styles/components/tabs/_tabs-theme.scss

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -58,30 +58,23 @@
5858
@function igx-tabs-theme(
5959
$palette: null,
6060
$schema: $light-schema,
61-
6261
$item-text-color: null,
6362
$item-background: null,
64-
6563
$item-hover-background: null,
6664
$item-hover-color: null,
67-
6865
$item-active-color: null,
6966
$item-active-icon-color: null,
7067
$item-active-background: null,
7168
$indicator-color: null,
72-
7369
$button-color: null,
7470
$button-background: null,
7571
$button-hover-background: null,
7672
$button-hover-color: null,
77-
7873
$tab-ripple-color: null,
7974
$button-ripple-color: null,
8075
$border-radius: null,
81-
8276
$border-color: null,
8377
$border-color--hover: null,
84-
8578
$disable-shadow: true
8679
) {
8780
$name: 'igx-tabs';
@@ -347,6 +340,10 @@
347340
display: none;
348341
}
349342

343+
@include if-rtl() {
344+
transform: scaleX(-1);
345+
}
346+
350347
@include igx-ripple($button-ripple-theme);
351348
@include igx-css-vars($button-ripple-theme);
352349
}
@@ -594,5 +591,3 @@
594591
}
595592
}
596593
}
597-
598-

projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid-grouping.pipe.spec.ts

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { DefaultSortingStrategy } from 'igniteui-angular';
44
import { IGroupingExpression } from '../../data-operations/grouping-expression.interface';
55
import { configureTestSuite } from '../../test-utils/configure-suite';
66
import { SampleTestData } from '../../test-utils/sample-test-data.spec';
7-
import { IgxTreeGridSimpleComponent } from '../../test-utils/tree-grid-components.spec';
7+
import { IgxTreeGridSimpleComponent, IgxTreeGridPrimaryForeignKeyComponent } from '../../test-utils/tree-grid-components.spec';
88
import { IgxTreeGridGroupingPipe } from './tree-grid.grouping.pipe';
99
import { IgxTreeGridModule } from './public_api';
1010

@@ -18,7 +18,7 @@ describe('TreeGrid Grouping Pipe', () => {
1818
beforeAll(waitForAsync(() => {
1919
TestBed.configureTestingModule({
2020
declarations: [
21-
IgxTreeGridSimpleComponent
21+
IgxTreeGridSimpleComponent, IgxTreeGridPrimaryForeignKeyComponent
2222
],
2323
imports: [IgxTreeGridModule, NoopAnimationsModule]
2424
})
@@ -148,6 +148,26 @@ describe('TreeGrid Grouping Pipe', () => {
148148
});
149149
});
150150

151+
describe('By String', () => {
152+
beforeEach(fakeAsync(/** height/width setter rAF */() => {
153+
const fix = TestBed.createComponent(IgxTreeGridPrimaryForeignKeyComponent);
154+
fix.detectChanges();
155+
tick(16);
156+
grid = fix.componentInstance.treeGrid;
157+
groupPipe = new IgxTreeGridGroupingPipe();
158+
data = SampleTestData.employeeTreeDataCaseSensitive();
159+
data.forEach(element => {
160+
element['HireDate'] = null;
161+
});
162+
}));
163+
164+
it('groups the data properly by a single string field with lower case value', () => {
165+
const groupingExpressions =
166+
[groupingExpression('JobTitle')];
167+
transformAndVerify(data, groupedByJobTitleCaseSensitive, groupingExpressions, 'Employees', 'CK', grid);
168+
});
169+
});
170+
151171
const groupingExpression = (fieldName: string, dir = 1, ignoreCase = true, strategy = DefaultSortingStrategy.instance()) => (
152172
{fieldName, dir, ignoreCase, strategy });
153173

@@ -172,6 +192,8 @@ describe('TreeGrid Grouping Pipe', () => {
172192
// eslint-disable-next-line max-len
173193
const groupedByJobTitle = '[{"CK":[{"ID":147,"ParentID":-1,"Name":"John Winchester","HireDate":null,"Age":55,"OnPTO":false,"JobTitle":"Director"},{"ID":19,"ParentID":-1,"Name":"Victoria Lincoln","HireDate":null,"Age":49,"OnPTO":false,"JobTitle":"Director"},{"ID":17,"ParentID":-1,"Name":"Yang Wang","HireDate":null,"Age":61,"OnPTO":false,"JobTitle":"Director"},{"ID":12,"ParentID":17,"Name":"Pedro Afonso","HireDate":null,"Age":50,"OnPTO":false,"JobTitle":"Director"}],"Employees":"Director (4)","_Igx_Hidden_Data_":{"JobTitle":"Director"}},{"CK":[{"ID":475,"ParentID":147,"Name":"Michael Langdon","HireDate":null,"Age":43,"OnPTO":false,"Employees":null,"JobTitle":"Software Developer"},{"ID":317,"ParentID":147,"Name":"Monica Reyes","HireDate":null,"Age":31,"OnPTO":false,"JobTitle":"Software Developer"},{"ID":711,"ParentID":317,"Name":"Roland Mendel","HireDate":null,"Age":35,"OnPTO":true,"JobTitle":"Software Developer"},{"ID":141,"ParentID":663,"Name":"Trevor Ashworth","HireDate":null,"OnPTO":false,"Age":39,"JobTitle":"Software Developer"},{"ID":101,"ParentID":17,"Name":"Casey Harper","HireDate":null,"OnPTO":false,"Age":27,"JobTitle":"Software Developer"}],"Employees":"Software Developer (5)","_Igx_Hidden_Data_":{"JobTitle":"Software Developer"}},{"CK":[{"ID":957,"ParentID":147,"Name":"Thomas Hardy","HireDate":null,"Age":29,"OnPTO":true,"JobTitle":"Associate Software Developer"},{"ID":663,"ParentID":847,"Name":"Elizabeth Richards","HireDate":null,"Age":25,"OnPTO":false,"JobTitle":"Associate Software Developer"},{"ID":109,"ParentID":12,"Name":"Patricio Simpson","HireDate":null,"Age":25,"OnPTO":false,"Employees":[],"JobTitle":"Associate Software Developer"},{"ID":299,"ParentID":12,"Name":"Peter Lewis","HireDate":null,"OnPTO":false,"Age":25,"JobTitle":"Associate Software Developer"}],"Employees":"Associate Software Developer (4)","_Igx_Hidden_Data_":{"JobTitle":"Associate Software Developer"}},{"CK":[{"ID":998,"ParentID":317,"Name":"Sven Ottlieb","HireDate":null,"Age":44,"OnPTO":false,"JobTitle":"Senior Software Developer"},{"ID":225,"ParentID":847,"Name":"Laurence Johnson","HireDate":null,"OnPTO":true,"Age":44,"JobTitle":"Senior Software Developer"},{"ID":99,"ParentID":12,"Name":"Francisco Chang","HireDate":null,"OnPTO":true,"Age":39,"JobTitle":"Senior Software Developer"}],"Employees":"Senior Software Developer (3)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer"}},{"CK":[{"ID":847,"ParentID":-1,"Name":"Ana Sanders","HireDate":null,"Age":42,"OnPTO":false,"JobTitle":"Vice President"}],"Employees":"Vice President (1)","_Igx_Hidden_Data_":{"JobTitle":"Vice President"}},{"CK":[{"ID":15,"ParentID":19,"Name":"Antonio Moreno","HireDate":null,"Age":44,"OnPTO":true,"Employees":[],"JobTitle":"Senior Software Developer, TL"}],"Employees":"Senior Software Developer, TL (1)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer, TL"}}]';
174194
// eslint-disable-next-line max-len
195+
const groupedByJobTitleCaseSensitive = '[{"CK":[{"ID":147,"ParentID":-1,"Name":"John Winchester","HireDate":null,"Age":55,"OnPTO":false,"JobTitle":"Director"},{"ID":19,"ParentID":-1,"Name":"Victoria Lincoln","HireDate":null,"Age":49,"OnPTO":false,"JobTitle":"Director"}],"Employees":"Director (2)","_Igx_Hidden_Data_":{"JobTitle":"Director"}},{"CK":[{"ID":475,"ParentID":147,"Name":"Michael Langdon","HireDate":null,"Age":43,"OnPTO":false,"Employees":null,"JobTitle":"Software Developer"},{"ID":957,"ParentID":147,"Name":"Thomas Hardy","HireDate":null,"Age":29,"OnPTO":true,"JobTitle":"Software developer"},{"ID":317,"ParentID":147,"Name":"Monica Reyes","HireDate":null,"Age":31,"OnPTO":false,"JobTitle":"Software Developer"}],"Employees":"Software Developer (3)","_Igx_Hidden_Data_":{"JobTitle":"Software Developer"}}]';
196+
// eslint-disable-next-line max-len
175197
const groupedByPTODescJobTitle = '[{"CK":[{"CK":[{"ID":147,"ParentID":-1,"Name":"John Winchester","HireDate":null,"Age":55,"OnPTO":false,"JobTitle":"Director"},{"ID":19,"ParentID":-1,"Name":"Victoria Lincoln","HireDate":null,"Age":49,"OnPTO":false,"JobTitle":"Director"},{"ID":17,"ParentID":-1,"Name":"Yang Wang","HireDate":null,"Age":61,"OnPTO":false,"JobTitle":"Director"},{"ID":12,"ParentID":17,"Name":"Pedro Afonso","HireDate":null,"Age":50,"OnPTO":false,"JobTitle":"Director"}],"Employees":"Director (4)","_Igx_Hidden_Data_":{"JobTitle":"Director"}},{"CK":[{"ID":475,"ParentID":147,"Name":"Michael Langdon","HireDate":null,"Age":43,"OnPTO":false,"Employees":null,"JobTitle":"Software Developer"},{"ID":317,"ParentID":147,"Name":"Monica Reyes","HireDate":null,"Age":31,"OnPTO":false,"JobTitle":"Software Developer"},{"ID":141,"ParentID":663,"Name":"Trevor Ashworth","HireDate":null,"OnPTO":false,"Age":39,"JobTitle":"Software Developer"},{"ID":101,"ParentID":17,"Name":"Casey Harper","HireDate":null,"OnPTO":false,"Age":27,"JobTitle":"Software Developer"}],"Employees":"Software Developer (4)","_Igx_Hidden_Data_":{"JobTitle":"Software Developer"}},{"CK":[{"ID":998,"ParentID":317,"Name":"Sven Ottlieb","HireDate":null,"Age":44,"OnPTO":false,"JobTitle":"Senior Software Developer"}],"Employees":"Senior Software Developer (1)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer"}},{"CK":[{"ID":847,"ParentID":-1,"Name":"Ana Sanders","HireDate":null,"Age":42,"OnPTO":false,"JobTitle":"Vice President"}],"Employees":"Vice President (1)","_Igx_Hidden_Data_":{"JobTitle":"Vice President"}},{"CK":[{"ID":663,"ParentID":847,"Name":"Elizabeth Richards","HireDate":null,"Age":25,"OnPTO":false,"JobTitle":"Associate Software Developer"},{"ID":109,"ParentID":12,"Name":"Patricio Simpson","HireDate":null,"Age":25,"OnPTO":false,"Employees":[],"JobTitle":"Associate Software Developer"},{"ID":299,"ParentID":12,"Name":"Peter Lewis","HireDate":null,"OnPTO":false,"Age":25,"JobTitle":"Associate Software Developer"}],"Employees":"Associate Software Developer (3)","_Igx_Hidden_Data_":{"JobTitle":"Associate Software Developer"}}],"Employees":"false (13)","_Igx_Hidden_Data_":{"OnPTO":false}},{"CK":[{"CK":[{"ID":957,"ParentID":147,"Name":"Thomas Hardy","HireDate":null,"Age":29,"OnPTO":true,"JobTitle":"Associate Software Developer"}],"Employees":"Associate Software Developer (1)","_Igx_Hidden_Data_":{"JobTitle":"Associate Software Developer"}},{"CK":[{"ID":711,"ParentID":317,"Name":"Roland Mendel","HireDate":null,"Age":35,"OnPTO":true,"JobTitle":"Software Developer"}],"Employees":"Software Developer (1)","_Igx_Hidden_Data_":{"JobTitle":"Software Developer"}},{"CK":[{"ID":225,"ParentID":847,"Name":"Laurence Johnson","HireDate":null,"OnPTO":true,"Age":44,"JobTitle":"Senior Software Developer"},{"ID":99,"ParentID":12,"Name":"Francisco Chang","HireDate":null,"OnPTO":true,"Age":39,"JobTitle":"Senior Software Developer"}],"Employees":"Senior Software Developer (2)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer"}},{"CK":[{"ID":15,"ParentID":19,"Name":"Antonio Moreno","HireDate":null,"Age":44,"OnPTO":true,"Employees":[],"JobTitle":"Senior Software Developer, TL"}],"Employees":"Senior Software Developer, TL (1)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer, TL"}}],"Employees":"true (5)","_Igx_Hidden_Data_":{"OnPTO":true}}]';
176198
// eslint-disable-next-line max-len
177199
const groupedByPTOJobDescPID = '[{"CK":[{"CK":[{"CK":[{"ID":147,"ParentID":-1,"Name":"John Winchester","HireDate":null,"Age":55,"OnPTO":false,"JobTitle":"Director"},{"ID":19,"ParentID":-1,"Name":"Victoria Lincoln","HireDate":null,"Age":49,"OnPTO":false,"JobTitle":"Director"},{"ID":17,"ParentID":-1,"Name":"Yang Wang","HireDate":null,"Age":61,"OnPTO":false,"JobTitle":"Director"}],"Employees":"-1 (3)","_Igx_Hidden_Data_":{"ParentID":-1}},{"CK":[{"ID":12,"ParentID":17,"Name":"Pedro Afonso","HireDate":null,"Age":50,"OnPTO":false,"JobTitle":"Director"}],"Employees":"17 (1)","_Igx_Hidden_Data_":{"ParentID":17}}],"Employees":"Director (4)","_Igx_Hidden_Data_":{"JobTitle":"Director"}},{"CK":[{"CK":[{"ID":475,"ParentID":147,"Name":"Michael Langdon","HireDate":null,"Age":43,"OnPTO":false,"Employees":null,"JobTitle":"Software Developer"},{"ID":317,"ParentID":147,"Name":"Monica Reyes","HireDate":null,"Age":31,"OnPTO":false,"JobTitle":"Software Developer"}],"Employees":"147 (2)","_Igx_Hidden_Data_":{"ParentID":147}},{"CK":[{"ID":141,"ParentID":663,"Name":"Trevor Ashworth","HireDate":null,"OnPTO":false,"Age":39,"JobTitle":"Software Developer"}],"Employees":"663 (1)","_Igx_Hidden_Data_":{"ParentID":663}},{"CK":[{"ID":101,"ParentID":17,"Name":"Casey Harper","HireDate":null,"OnPTO":false,"Age":27,"JobTitle":"Software Developer"}],"Employees":"17 (1)","_Igx_Hidden_Data_":{"ParentID":17}}],"Employees":"Software Developer (4)","_Igx_Hidden_Data_":{"JobTitle":"Software Developer"}},{"CK":[{"CK":[{"ID":998,"ParentID":317,"Name":"Sven Ottlieb","HireDate":null,"Age":44,"OnPTO":false,"JobTitle":"Senior Software Developer"}],"Employees":"317 (1)","_Igx_Hidden_Data_":{"ParentID":317}}],"Employees":"Senior Software Developer (1)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer"}},{"CK":[{"CK":[{"ID":847,"ParentID":-1,"Name":"Ana Sanders","HireDate":null,"Age":42,"OnPTO":false,"JobTitle":"Vice President"}],"Employees":"-1 (1)","_Igx_Hidden_Data_":{"ParentID":-1}}],"Employees":"Vice President (1)","_Igx_Hidden_Data_":{"JobTitle":"Vice President"}},{"CK":[{"CK":[{"ID":663,"ParentID":847,"Name":"Elizabeth Richards","HireDate":null,"Age":25,"OnPTO":false,"JobTitle":"Associate Software Developer"}],"Employees":"847 (1)","_Igx_Hidden_Data_":{"ParentID":847}},{"CK":[{"ID":109,"ParentID":12,"Name":"Patricio Simpson","HireDate":null,"Age":25,"OnPTO":false,"Employees":[],"JobTitle":"Associate Software Developer"},{"ID":299,"ParentID":12,"Name":"Peter Lewis","HireDate":null,"OnPTO":false,"Age":25,"JobTitle":"Associate Software Developer"}],"Employees":"12 (2)","_Igx_Hidden_Data_":{"ParentID":12}}],"Employees":"Associate Software Developer (3)","_Igx_Hidden_Data_":{"JobTitle":"Associate Software Developer"}}],"Employees":"false (13)","_Igx_Hidden_Data_":{"OnPTO":false}},{"CK":[{"CK":[{"CK":[{"ID":957,"ParentID":147,"Name":"Thomas Hardy","HireDate":null,"Age":29,"OnPTO":true,"JobTitle":"Associate Software Developer"}],"Employees":"147 (1)","_Igx_Hidden_Data_":{"ParentID":147}}],"Employees":"Associate Software Developer (1)","_Igx_Hidden_Data_":{"JobTitle":"Associate Software Developer"}},{"CK":[{"CK":[{"ID":711,"ParentID":317,"Name":"Roland Mendel","HireDate":null,"Age":35,"OnPTO":true,"JobTitle":"Software Developer"}],"Employees":"317 (1)","_Igx_Hidden_Data_":{"ParentID":317}}],"Employees":"Software Developer (1)","_Igx_Hidden_Data_":{"JobTitle":"Software Developer"}},{"CK":[{"CK":[{"ID":225,"ParentID":847,"Name":"Laurence Johnson","HireDate":null,"OnPTO":true,"Age":44,"JobTitle":"Senior Software Developer"}],"Employees":"847 (1)","_Igx_Hidden_Data_":{"ParentID":847}},{"CK":[{"ID":99,"ParentID":12,"Name":"Francisco Chang","HireDate":null,"OnPTO":true,"Age":39,"JobTitle":"Senior Software Developer"}],"Employees":"12 (1)","_Igx_Hidden_Data_":{"ParentID":12}}],"Employees":"Senior Software Developer (2)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer"}},{"CK":[{"CK":[{"ID":15,"ParentID":19,"Name":"Antonio Moreno","HireDate":null,"Age":44,"OnPTO":true,"Employees":[],"JobTitle":"Senior Software Developer, TL"}],"Employees":"19 (1)","_Igx_Hidden_Data_":{"ParentID":19}}],"Employees":"Senior Software Developer, TL (1)","_Igx_Hidden_Data_":{"JobTitle":"Senior Software Developer, TL"}}],"Employees":"true (5)","_Igx_Hidden_Data_":{"OnPTO":true}}]';

projects/igniteui-angular/src/lib/grids/tree-grid/tree-grid.grouping.pipe.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,16 +121,20 @@ export class IgxTreeGridGroupingPipe implements PipeTransform {
121121
? formatDate(record[key], column.pipeArgs.format, this.grid.locale)
122122
: record[key];
123123

124+
let valueCase = value;
124125
let groupByRecord: GroupByRecord;
125126

126-
if (map.has(value)) {
127-
groupByRecord = map.get(value);
127+
if (groupingExpression.ignoreCase) {
128+
valueCase = value?.toString().toLowerCase();
129+
}
130+
if (map.has(valueCase)) {
131+
groupByRecord = map.get(valueCase);
128132
} else {
129133
groupByRecord = new GroupByRecord();
130134
groupByRecord.key = key;
131135
groupByRecord.value = value;
132136
groupByRecord.records = [];
133-
map.set(value, groupByRecord);
137+
map.set(valueCase, groupByRecord);
134138
}
135139

136140
groupByRecord.records.push(record);

projects/igniteui-angular/src/lib/tabs/tabs.directive.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
import { Subscription } from 'rxjs';
77
import { Direction, IgxCarouselComponentBase } from '../carousel/carousel-base';
88
import { IBaseEventArgs } from '../core/utils';
9+
import { IgxDirectionality } from '../services/direction/directionality';
910
import { IgxTabItemDirective } from './tab-item.directive';
1011
import { IgxTabContentBase, IgxTabsBase } from './tabs.base';
1112

@@ -119,7 +120,7 @@ export abstract class IgxTabsDirective extends IgxCarouselComponentBase implemen
119120
private _itemChanges$: Subscription;
120121

121122
/** @hidden */
122-
constructor(builder: AnimationBuilder, cdr: ChangeDetectorRef) {
123+
constructor(builder: AnimationBuilder, cdr: ChangeDetectorRef, public dir: IgxDirectionality) {
123124
super(builder, cdr);
124125
}
125126

@@ -293,7 +294,9 @@ export abstract class IgxTabsDirective extends IgxCarouselComponentBase implemen
293294
this.hasPanels &&
294295
this.currentItem &&
295296
!this.currentItem.selected) {
296-
item.direction = this._selectedIndex > oldSelectedIndex ? Direction.NEXT : Direction.PREV;
297+
item.direction = (!this.dir.rtl && this._selectedIndex > oldSelectedIndex) ||
298+
(this.dir.rtl && this._selectedIndex < oldSelectedIndex)
299+
? Direction.NEXT : Direction.PREV;
297300

298301
if (this.previousItem && this.previousItem.previous) {
299302
this.previousItem.previous = false;

0 commit comments

Comments
 (0)