Skip to content

Commit 20247e8

Browse files
authored
Merge branch 'master' into ibarakov/fix-8247-master
2 parents 276ac3d + 0ff35ff commit 20247e8

22 files changed

+379
-150
lines changed

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@ export class Logger implements ts.server.Logger {
2323
}
2424

2525
public msg(s: string, type: ts.server.Msg = ts.server.Msg.Err) {
26+
if (!this.traceToConsole) { return; }
2627
if (type === ts.server.Msg.Info) {
27-
// TODO: Info ignored for now, hook into context in the future
28-
// console.log(s);
28+
console.log(s);
2929
}
3030
if (type === ts.server.Msg.Err) {
3131
console.error(s);

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ <h2 class="igx-calendar__header-date">
2323
</div>
2424

2525
<div *ngIf="isDefaultView" class="igx-calendar__body" [@animateView]="activeView" (@animateView.done)="viewRendered($event)" (swiperight)="previousMonth()"
26-
(swipeleft)="nextMonth()">
26+
(swipeleft)="nextMonth()" (pointerdown)="suppressBlur()">
2727
<div class="igx-calendar-picker">
2828
<div tabindex="0" class="igx-calendar-picker__prev" #prevMonthBtn
2929
igxCalendarScrollMonth [startScroll]="startPrevMonthScroll" [stopScroll]="stopMonthScroll" [ngStyle]="{

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

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -419,7 +419,6 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
419419
* @internal
420420
*/
421421
private _monthsViewNumber = 1;
422-
423422
/**
424423
* @hidden
425424
* @internal
@@ -481,6 +480,11 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
481480
this.isKeydownTrigger = isKeydownTrigger;
482481
}
483482

483+
public suppressBlur() {
484+
this.monthViews?.forEach(d => d.shouldResetDate = false);
485+
if (this.daysView) { this.daysView.shouldResetDate = false; }
486+
}
487+
484488
/**
485489
* Change to next month
486490
*
@@ -540,6 +544,9 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
540544
} else if (this.monthScrollDirection === ScrollMonth.NEXT) {
541545
this.nextMonthBtn.nativeElement.focus();
542546
}
547+
if (event.key === KEYS.SPACE || event.key === KEYS.SPACE_IE || event.key === KEYS.ENTER) {
548+
this.resetActiveDate();
549+
}
543550

544551
this.monthScrollDirection = ScrollMonth.NONE;
545552
}
@@ -765,6 +772,7 @@ export class IgxCalendarComponent extends IgxMonthPickerBaseDirective implements
765772
public viewRendered(event) {
766773
if (event.fromState !== 'void') {
767774
this.activeViewChanged.emit(this.activeView);
775+
if (this.activeView === 0) { this.resetActiveDate(); }
768776
}
769777
}
770778

projects/igniteui-angular/src/lib/calendar/days-view/days-view.component.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -119,12 +119,12 @@ export class IgxDaysViewComponent extends IgxCalendarBaseDirective implements Do
119119
*/
120120
public nextMonthView: IgxDaysViewComponent;
121121

122-
/**
123-
* @hidden
124-
*/
122+
/** @hidden */
125123
public prevMonthView: IgxDaysViewComponent;
126-
public _activeDate;
127-
private shouldResetDate = true;
124+
/** @hidden */
125+
public shouldResetDate = true;
126+
private _activeDate;
127+
128128

129129
/**
130130
* The default css class applied to the component.

projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-component.scss

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,14 @@
212212
@extend %igx-grid__tr--edit !optional;
213213
}
214214

215+
@include e(tr, $m: add-animate) {
216+
@extend %igx-grid__tr--add-animate !optional;
217+
}
218+
219+
@include e(tr, $m: inner) {
220+
@extend %igx-grid__tr--inner !optional;
221+
}
222+
215223
@include e(tr, $m: group) {
216224
@extend %grid-row--group !optional;
217225
}

projects/igniteui-angular/src/lib/core/styles/components/grid/_grid-theme.scss

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,6 +583,8 @@
583583
@mixin igx-grid($theme) {
584584
@include igx-root-css-vars($theme);
585585

586+
@include scale-in-ver-center();
587+
586588
$palette: map-get($theme, 'palette');
587589

588590
$variant: map-get($theme, variant);
@@ -1195,6 +1197,14 @@
11951197
}
11961198
}
11971199

1200+
%igx-grid__tr--inner {
1201+
display: flex;
1202+
}
1203+
1204+
%igx-grid__tr--add-animate {
1205+
@include animation(scale-in-ver-center .2s $ease-in-out-quad);
1206+
}
1207+
11981208
%grid-row--edit-mrl {
11991209
&:first-of-type::after {
12001210
top: 0;

projects/igniteui-angular/src/lib/grids/filtering/excel-style/excel-style-conditional-filter.component.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,14 @@ export class IgxExcelStyleConditionalFilterComponent implements OnDestroy {
5353
constructor(public esf: IgxGridExcelStyleFilteringComponent) {
5454
this.esf.columnChange.pipe(takeUntil(this.destroy$)).subscribe(() => {
5555
if (this.esf.grid) {
56-
this._subMenuOverlaySettings.outlet = (this.esf.grid as any).outlet;
56+
this._subMenuOverlaySettings.outlet = this.esf.grid.outlet;
5757
}
5858
});
59-
}
59+
60+
if (this.esf.grid) {
61+
this._subMenuOverlaySettings.outlet = this.esf.grid.outlet;
62+
}
63+
}
6064

6165
ngOnDestroy(): void {
6266
this.destroy$.next(true);
@@ -147,7 +151,7 @@ export class IgxExcelStyleConditionalFilterComponent implements OnDestroy {
147151
const exprTree = this.esf.column.filteringExpressionsTree;
148152
return exprTree && exprTree.filteringOperands && exprTree.filteringOperands.length &&
149153
!((exprTree.filteringOperands[0] as IFilteringExpression).condition &&
150-
(exprTree.filteringOperands[0] as IFilteringExpression).condition.name === 'in');
154+
(exprTree.filteringOperands[0] as IFilteringExpression).condition.name === 'in');
151155
}
152156

153157
/**

projects/igniteui-angular/src/lib/grids/filtering/excel-style/grid.excel-style-filtering.component.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -500,7 +500,15 @@ export class IgxGridExcelStyleFilteringComponent implements OnDestroy {
500500
}
501501

502502
private generateUniqueValues(columnValues: any[]) {
503-
this.uniqueValues = Array.from(new Set(columnValues));
503+
if (this.column.dataType === DataType.String && this.column.filteringIgnoreCase) {
504+
const filteredUniqueValues = columnValues.map(s => s?.toLowerCase())
505+
.reduce((map, val, i) => map.get(val) ? map : map.set(val, columnValues[i]),
506+
new Map);
507+
508+
this.uniqueValues = Array.from(filteredUniqueValues.values());
509+
} else {
510+
this.uniqueValues = Array.from(new Set(columnValues));
511+
}
504512
}
505513

506514
private generateFilterValues(isDateColumn: boolean = false) {

projects/igniteui-angular/src/lib/grids/filtering/grid-filtering.service.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import { FilteringExpressionsTree, IFilteringExpressionsTree } from '../../data-
33
import { IgxGridBaseDirective } from '../grid-base.directive';
44
import { IFilteringExpression, FilteringLogic } from '../../data-operations/filtering-expression.interface';
55
import { Subject } from 'rxjs';
6-
import { takeUntil, filter } from 'rxjs/operators';
6+
import { takeUntil, first } from 'rxjs/operators';
77
import { IForOfState } from '../../directives/for-of/for_of.directive';
88
import { IgxColumnComponent } from '../columns/column.component';
99
import { IFilteringOperation } from '../../data-operations/filtering-condition';
@@ -65,7 +65,8 @@ export class IgxFilteringService implements OnDestroy {
6565
}
6666

6767
public toggleFilterDropdown(element, column, classRef) {
68-
if (!this._componentOverlayId || (this.column && this.column.field !== column.field)) {
68+
if (!this._componentOverlayId || (this.column && this.column.field !== column.field)) {
69+
this.initFilteringSettings();
6970
this.column = column;
7071
const filterIcon = this.column.filteringExpressionsTree ? 'igx-excel-filter__icon--filtered' : 'igx-excel-filter__icon';
7172
const filterIconTarget = element.querySelector('.' + filterIcon);
@@ -97,8 +98,9 @@ export class IgxFilteringService implements OnDestroy {
9798
positionStrategy: new ExcelStylePositionStrategy(this._filterMenuPositionSettings),
9899
scrollStrategy: new AbsoluteScrollStrategy()
99100
};
101+
100102
this._overlayService.onOpening.pipe(
101-
filter((overlay) => overlay.id === this._componentOverlayId),
103+
first((overlay) => overlay.id === this._componentOverlayId),
102104
takeUntil(this.destroy$)).subscribe((eventArgs) => {
103105
const instance = this.grid.excelStyleFilteringComponent ?
104106
this.grid.excelStyleFilteringComponent :
@@ -111,7 +113,7 @@ export class IgxFilteringService implements OnDestroy {
111113
});
112114

113115
this._overlayService.onClosed.pipe(
114-
filter(overlay => overlay.id === this._componentOverlayId),
116+
first((overlay) => overlay.id === this._componentOverlayId),
115117
takeUntil(this.destroy$)).subscribe((eventArgs) => {
116118
const instance = this.grid.excelStyleFilteringComponent ?
117119
this.grid.excelStyleFilteringComponent :
@@ -354,7 +356,7 @@ export class IgxFilteringService implements OnDestroy {
354356
}
355357

356358
if ((currExpressionUI.beforeOperator === undefined || currExpressionUI.beforeOperator === null ||
357-
currExpressionUI.beforeOperator === FilteringLogic.Or) &&
359+
currExpressionUI.beforeOperator === FilteringLogic.Or) &&
358360
currExpressionUI.afterOperator === FilteringLogic.And) {
359361

360362
currAndBranch = new FilteringExpressionsTree(FilteringLogic.And, columnId);
@@ -481,8 +483,8 @@ export class IgxFilteringService implements OnDestroy {
481483
}
482484

483485
private generateExpressionsListRecursive(expressions: IFilteringExpressionsTree | IFilteringExpression,
484-
operator: FilteringLogic,
485-
expressionsUIs: ExpressionUI[]): void {
486+
operator: FilteringLogic,
487+
expressionsUIs: ExpressionUI[]): void {
486488
if (!expressions) {
487489
return;
488490
}

projects/igniteui-angular/src/lib/grids/grid-base.directive.ts

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4144,11 +4144,15 @@ export abstract class IgxGridBaseDirective extends DisplayDensityBase implements
41444144
this.navigateTo(newRowIndex, -1);
41454145
}
41464146
const row = this.getRowByIndex(index + 1);
4147-
const cell = row.cells.find(c => c.editable);
4148-
if (cell) {
4149-
cell.setEditMode(true);
4150-
cell.activate();
4151-
}
4147+
row.animateAdd = true;
4148+
row.onAnimationEnd.pipe(first()).subscribe(() => {
4149+
row.animateAdd = false;
4150+
const cell = row.cells.find(c => c.editable);
4151+
if (cell) {
4152+
cell.setEditMode(true);
4153+
cell.activate();
4154+
}
4155+
});
41524156
}
41534157

41544158
/**

0 commit comments

Comments
 (0)