Skip to content

Commit 2bdac98

Browse files
Crud centralization (#9173)
refactor(grid-crud): separate and clean-up the grid crud service Move relevant methods, checks and behaviors in the crud service itself. Operate with the methods through the crud service. Adjust unit tests to the new API. Co-authored-by: Radoslav Karaivanov <[email protected]>
1 parent 7208467 commit 2bdac98

Some content is hidden

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

45 files changed

+874
-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.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
@@ -313,7 +313,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
313313
return;
314314
}
315315
if (this.grid) {
316-
this.grid.endEdit(false);
316+
this.grid.crudService.endEdit(false);
317317
this.grid.summaryService.resetSummaryHeight();
318318
this.grid.filteringService.refreshExpressions();
319319
this.grid.filteringService.hideFilteringRowOnColumnVisibilityChange(this);
@@ -1824,7 +1824,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
18241824
return;
18251825
}
18261826

1827-
grid.endEdit(false);
1827+
this.grid.crudService.endEdit(false);
18281828

18291829
this._pinned = true;
18301830
this.pinnedChange.emit(this._pinned);
@@ -1915,7 +1915,7 @@ export class IgxColumnComponent implements AfterContentInit, OnDestroy {
19151915
return;
19161916
}
19171917

1918-
this.grid.endEdit(false);
1918+
this.grid.crudService.endEdit(false);
19191919

19201920
this._pinned = false;
19211921
this.pinnedChange.emit(this._pinned);

0 commit comments

Comments
 (0)