Skip to content

Commit 6ab6bc4

Browse files
authored
Merge branch 'master' into skrastev/fix-9158
2 parents e793416 + f352655 commit 6ab6bc4

Some content is hidden

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

47 files changed

+887
-874
lines changed

projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component.spec.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ describe('igxGridEditingActions #grid ', () => {
5656
expect(editIcon.nativeElement.innerText).toBe('edit');
5757
editIcon.parent.triggerEventHandler('click', new Event('click'));
5858
fixture.detectChanges();
59-
expect(grid.rowInEditMode).not.toBeNull();
59+
expect(grid.gridAPI.crudService.rowInEditMode).not.toBeNull();
6060
expect(grid.rowList.first.inEditMode).toBe(true);
6161

6262
expect(grid.rowList.first.rowData['ID']).toBe('ALFKI');
@@ -66,7 +66,7 @@ describe('igxGridEditingActions #grid ', () => {
6666
deleteIcon = fixture.debugElement.queryAll(By.css(`igx-grid-editing-actions igx-icon`))[1];
6767
// grid actions should not showing when the row is in edit mode #
6868
expect(deleteIcon).toBeUndefined();
69-
grid.endEdit();
69+
grid.gridAPI.crudService.endEdit();
7070
actionStrip.show(grid.rowList.first);
7171
fixture.detectChanges();
7272
deleteIcon = fixture.debugElement.queryAll(By.css(`igx-grid-editing-actions igx-icon`))[1];
@@ -102,7 +102,7 @@ describe('igxGridEditingActions #grid ', () => {
102102

103103
expect(row.inEditMode).toBeTrue();
104104

105-
grid.endEdit();
105+
grid.gridAPI.crudService.endEdit();
106106
fixture.detectChanges();
107107
actionStrip.menu.open();
108108
fixture.detectChanges();

projects/igniteui-angular/src/lib/action-strip/grid-actions/grid-editing-actions.component.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ export class IgxGridEditingActionsComponent extends IgxGridActionsBaseDirective
104104
}
105105
// be sure row is in view
106106
if (grid.rowList.filter(r => r === row).length !== 0) {
107-
grid.crudService.enterEditMode(firstEditable, event);
107+
grid.gridAPI.crudService.enterEditMode(firstEditable, event);
108108
}
109109
this.strip.hide();
110110
}

projects/igniteui-angular/src/lib/grids/api.service.ts

Lines changed: 23 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { IgxRowDirective } from './row.directive';
1010
import { IFilteringOperation } from '../data-operations/filtering-condition';
1111
import { IFilteringExpressionsTree, FilteringExpressionsTree } from '../data-operations/filtering-expressions-tree';
1212
import { Transaction, TransactionType, State } from '../services/transaction/transaction';
13-
import { IgxCell, IgxRow } from './selection/selection.service';
13+
import { IgxCell, IgxGridCRUDService, IgxRow } from './common/crud.service';
1414
import { GridType } from './common/grid.interface';
1515
import { ColumnType } from './common/column.interface';
1616
import { IGridEditEventArgs, IRowToggleEventArgs } from './common/events';
@@ -21,9 +21,12 @@ import { IGridEditEventArgs, IRowToggleEventArgs } from './common/events';
2121
@Injectable()
2222
export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
2323

24-
grid: T;
24+
25+
public grid: T;
2526
protected destroyMap: Map<string, Subject<boolean>> = new Map<string, Subject<boolean>>();
2627

28+
constructor(public crudService: IgxGridCRUDService) { }
29+
2730
public get_column_by_name(name: string): ColumnType {
2831
return this.grid.columnList.find((col: ColumnType) => col.field === name);
2932
}
@@ -114,26 +117,26 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
114117
}
115118

116119
public submit_value(event?: Event) {
117-
const cell = this.grid.crudService.cell;
120+
const cell = this.crudService.cell;
118121
if (cell) {
119122
const args = this.update_cell(cell, cell.editValue, event);
120-
this.grid.crudService.cellEditingBlocked = args.cancel;
123+
this.crudService.cellEditingBlocked = args.cancel;
121124
if (args.cancel) {
122125
return args.cancel;
123126
}
124-
this.grid.crudService.exitCellEdit(event);
127+
this.crudService.exitCellEdit(event);
125128
}
126129
}
127130

128131
public submit_add_value(event?: Event) {
129-
const cell = this.grid.crudService.cell;
132+
const cell = this.crudService.cell;
130133
if (cell) {
131134
const args = this.update_add_cell(cell, cell.editValue, event);
132135
if (args.cancel) {
133-
this.grid.endAddRow();
136+
this.crudService.endAddRow();
134137
return args.cancel;
135138
}
136-
return this.grid.crudService.exitCellEdit(event);
139+
return this.crudService.exitCellEdit(event);
137140
}
138141
}
139142

@@ -147,7 +150,7 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
147150
}
148151

149152
this.grid.cellEdit.emit(args);
150-
this.grid.crudService.cellEditingBlocked = args.cancel;
153+
this.crudService.cellEditingBlocked = args.cancel;
151154
if (args.cancel) {
152155
return args;
153156
}
@@ -158,7 +161,7 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
158161
} else {
159162
data[cell.column.field] = args.newValue;
160163
}
161-
this.grid.crudService.row.data = data;
164+
this.crudService.row.data = data;
162165
const doneArgs = cell.createDoneEditEventArgs(args.newValue, event);
163166
doneArgs.rowData = data;
164167
this.grid.cellEditDone.emit(doneArgs);
@@ -174,7 +177,7 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
174177
}
175178

176179
this.grid.cellEdit.emit(args);
177-
this.grid.crudService.cellEditingBlocked = args.cancel;
180+
this.crudService.cellEditingBlocked = args.cancel;
178181
if (args.cancel) {
179182
return args;
180183
}
@@ -192,8 +195,8 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
192195
this.grid.summaryService.removeSummaries(cell.id.rowID);
193196
}
194197
}
195-
if (!this.grid.rowEditable || !this.grid.crudService.row ||
196-
this.grid.crudService.row.id !== cell.id.rowID || !this.grid.transactions.enabled) {
198+
if (!this.grid.rowEditable || !this.crudService.row ||
199+
this.crudService.row.id !== cell.id.rowID || !this.grid.transactions.enabled) {
197200
this.grid.summaryService.clearSummaryCache(args);
198201
this.grid.pipeTrigger++;
199202
}
@@ -206,7 +209,7 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
206209
public update_row(row: IgxRow, value: any, event?: Event) {
207210
const grid = this.grid;
208211
const selected = grid.selectionService.isRowSelected(row.id);
209-
const rowInEditMode = grid.crudService.row;
212+
const rowInEditMode = this.crudService.row;
210213
const data = this.get_all_data(grid.transactions.enabled);
211214
const index = this.get_row_index_in_data(row.id, data);
212215
const hasSummarized = grid.hasSummarizedColumns;
@@ -286,7 +289,7 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
286289
ignoreCase: boolean) {
287290
const grid = this.grid;
288291
const filteringTree = grid.filteringExpressionsTree;
289-
this.grid.endEdit(false);
292+
this.crudService.endEdit(false);
290293

291294
if (grid.paging) {
292295
grid.page = 0;
@@ -308,7 +311,7 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
308311

309312
const grid = this.grid;
310313
const filteringTree = grid.filteringExpressionsTree;
311-
grid.endEdit(false);
314+
this.crudService.endEdit(false);
312315
if (grid.paging) {
313316
grid.page = 0;
314317
}
@@ -324,7 +327,7 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
324327

325328
public clear_filter(fieldName: string) {
326329
const grid = this.grid;
327-
grid.endEdit(false);
330+
this.crudService.endEdit(false);
328331
const filteringState = grid.filteringExpressionsTree;
329332
const index = filteringState.findIndex(fieldName);
330333

@@ -417,7 +420,7 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
417420
// Otherwise just exit - there is nothing to delete
418421
if (index !== -1 || hasRowInNonDeletedState) {
419422
// Always exit edit when row is deleted
420-
grid.endEdit(true);
423+
this.crudService.endEdit(true);
421424
} else {
422425
return;
423426
}
@@ -499,7 +502,7 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
499502
expandedStates.set(rowID, expanded);
500503
grid.expansionStates = expandedStates;
501504
if (grid.rowEditable) {
502-
grid.endEdit(false);
505+
this.crudService.endEdit(false);
503506
}
504507
}
505508

@@ -640,7 +643,7 @@ export class GridBaseAPIService <T extends IgxGridBaseDirective & GridType> {
640643
private _update_row(row: IgxRow, value?: any) {
641644
const grid = this.grid;
642645

643-
const rowInEditMode = grid.crudService.row;
646+
const rowInEditMode = grid.gridAPI.crudService.row;
644647
row.newData = value ?? rowInEditMode.transactionState;
645648

646649

projects/igniteui-angular/src/lib/grids/cell.component.html

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,12 @@
9090
</igx-input-group>
9191
</ng-container>
9292
<ng-container *ngIf="column.dataType === 'boolean'">
93+
<!-- The additional [checked] binding is needed as after the initial call of the checked getter
94+
it is never called again as no change detection is triggered in the grid after that, resulting in wrong
95+
rendered state of the checkbox. -->
9396
<igx-checkbox
9497
[(ngModel)]="editValue"
98+
[checked]="editValue"
9599
[igxFocus]="true"
96100
[disableRipple]="true"
97101
></igx-checkbox>

projects/igniteui-angular/src/lib/grids/cell.component.ts

Lines changed: 20 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { IgxTextHighlightDirective } from '../directives/text-highlight/text-hig
1818
import { GridBaseAPIService } from './api.service';
1919
import { getNodeSizeViaRange, isIE, isLeftClick, PlatformUtil } from '../core/utils';
2020
import { IgxGridBaseDirective } from './grid-base.directive';
21-
import { IgxGridSelectionService, ISelectionNode, IgxGridCRUDService } from './selection/selection.service';
21+
import { IgxGridSelectionService, ISelectionNode } from './selection/selection.service';
2222
import { DeprecateMethod } from '../core/deprecateDecorators';
2323
import { HammerGesturesManager } from '../core/touch';
2424
import { ColumnType } from './common/column.interface';
@@ -495,8 +495,8 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
495495
* @memberof IgxGridCellComponent
496496
*/
497497
public set editValue(value) {
498-
if (this.crudService.cellInEditMode) {
499-
this.crudService.cell.editValue = value;
498+
if (this.grid.crudService.cellInEditMode) {
499+
this.grid.crudService.cell.editValue = value;
500500
}
501501
}
502502

@@ -510,8 +510,8 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
510510
* @memberof IgxGridCellComponent
511511
*/
512512
public get editValue() {
513-
if (this.crudService.cellInEditMode) {
514-
return this.crudService.cell.editValue;
513+
if (this.grid.crudService.cellInEditMode) {
514+
return this.grid.crudService.cell.editValue;
515515
}
516516
}
517517

@@ -632,7 +632,6 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
632632

633633
constructor(
634634
protected selectionService: IgxGridSelectionService,
635-
protected crudService: IgxGridCRUDService,
636635
public gridAPI: GridBaseAPIService<IgxGridBaseDirective & GridType>,
637636
public cdr: ChangeDetectorRef,
638637
private element: ElementRef,
@@ -664,10 +663,10 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
664663
(event as HammerInput).preventDefault();
665664
}
666665
if (this.grid.rowEditable && this.row.addRow) {
667-
this.crudService.enterEditMode(this, event as Event);
666+
this.grid.crudService.enterEditMode(this, event as Event);
668667
}
669-
if (this.editable && !this.editMode && !this.row.deleted && !this.crudService.rowEditingBlocked) {
670-
this.crudService.enterEditMode(this, event as Event);
668+
if (this.editable && !this.editMode && !this.row.deleted && !this.grid.crudService.rowEditingBlocked) {
669+
this.grid.crudService.enterEditMode(this, event as Event);
671670
}
672671

673672
this.grid.onDoubleClick.emit({
@@ -710,8 +709,8 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
710709
this.addPointerListeners(this.cellSelectionMode);
711710
// IE 11 workarounds
712711
if (this.platformUtil.isBrowser && isIE()) { // TODO: Move isIE to platformUtil
713-
this.compositionStartHandler = () => this.crudService.isInCompositionMode = true;
714-
this.compositionEndHandler = () => this.crudService.isInCompositionMode = false;
712+
this.compositionStartHandler = () => this.grid.crudService.isInCompositionMode = true;
713+
this.compositionEndHandler = () => this.grid.crudService.isInCompositionMode = false;
715714
// Hitting Enter with IME submits and exits from edit mode instead of first closing the IME dialog
716715
this.nativeElement.addEventListener('compositionstart', this.compositionStartHandler);
717716
this.nativeElement.addEventListener('compositionend', this.compositionEndHandler);
@@ -767,7 +766,7 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
767766
}
768767
if (this.editable && value) {
769768
this.gridAPI.submit_value();
770-
this.crudService.enterEditMode(this);
769+
this.grid.crudService.enterEditMode(this);
771770
} else {
772771
this.grid.crudService.exitCellEdit();
773772
}
@@ -787,9 +786,9 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
787786
if (this.row.deleted) {
788787
return;
789788
}
790-
const cell = this.crudService.createCell(this);
789+
const cell = this.grid.crudService.createCell(this);
791790
const args = this.gridAPI.update_cell(cell, val);
792-
if (this.crudService.cell && this.crudService.sameCell(cell)) {
791+
if (this.grid.crudService.cell && this.grid.crudService.sameCell(cell)) {
793792
if (args.cancel) {
794793
return;
795794
}
@@ -874,15 +873,15 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
874873

875874
const activeElement = this.selectionService.activeElement;
876875
const row = activeElement ? this.gridAPI.get_row_by_index(activeElement.row) : null;
877-
if ((this.crudService.rowEditingBlocked && row && this.row.rowID !== row.rowID) ||
878-
(this.crudService.cell && this.crudService.cellEditingBlocked)) {
876+
if ((this.grid.crudService.rowEditingBlocked && row && this.row.rowID !== row.rowID) ||
877+
(this.grid.crudService.cell && this.grid.crudService.cellEditingBlocked)) {
879878
return;
880879
}
881880

882881
this.selectionService.activeElement = node;
883882
} else {
884883
this.selectionService.activeElement = null;
885-
if (this.crudService.cellInEditMode && !this.editMode) {
884+
if (this.grid.crudService.cellInEditMode && !this.editMode) {
886885
this.gridAPI.submit_value(event);
887886
}
888887
}
@@ -953,8 +952,8 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
953952
return;
954953
}
955954

956-
const crud = this.crudService;
957-
const editableCell = this.crudService.cell;
955+
const crud = this.grid.crudService;
956+
const editableCell = this.grid.crudService.cell;
958957
const editMode = !!(crud.row || crud.cell);
959958

960959
if (this.editable && editMode && !this.row.deleted) {
@@ -976,7 +975,7 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
976975
this.grid.cdr.detectChanges();
977976
}
978977

979-
if (this.crudService.cellEditingBlocked) {
978+
if (this.grid.crudService.cellEditingBlocked) {
980979
return true;
981980
}
982981

@@ -996,7 +995,7 @@ export class IgxGridCellComponent implements OnInit, OnChanges, OnDestroy {
996995
this.gridAPI.submit_value(event);
997996
}
998997
} else if (editMode && !crud.sameRow(this.cellID.rowID)) {
999-
this.grid.endEdit(true, event);
998+
this.grid.crudService.endEdit(true, event);
1000999
}
10011000
}
10021001

projects/igniteui-angular/src/lib/grids/columns/column.component.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -331,7 +331,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
331331
return;
332332
}
333333
if (this.grid) {
334-
this.grid.endEdit(false);
334+
this.grid.crudService.endEdit(false);
335335
this.grid.summaryService.resetSummaryHeight();
336336
this.grid.filteringService.refreshExpressions();
337337
this.grid.filteringService.hideFilteringRowOnColumnVisibilityChange(this);
@@ -1842,7 +1842,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
18421842
return;
18431843
}
18441844

1845-
grid.endEdit(false);
1845+
this.grid.crudService.endEdit(false);
18461846

18471847
this._pinned = true;
18481848
this.pinnedChange.emit(this._pinned);
@@ -1933,7 +1933,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
19331933
return;
19341934
}
19351935

1936-
this.grid.endEdit(false);
1936+
this.grid.crudService.endEdit(false);
19371937

19381938
this._pinned = false;
19391939
this.pinnedChange.emit(this._pinned);

0 commit comments

Comments
 (0)