Skip to content

Commit 827fc37

Browse files
authored
DataGrid - Performance drops on adding a large number of rows via editing.changes (T1251098) (#28392)
1 parent 9502543 commit 827fc37

File tree

1 file changed

+8
-14
lines changed
  • packages/devextreme/js/__internal/grids/grid_core/editing

1 file changed

+8
-14
lines changed

packages/devextreme/js/__internal/grids/grid_core/editing/m_editing.ts

Lines changed: 8 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@ import domAdapter from '@js/core/dom_adapter';
55
import Guid from '@js/core/guid';
66
import type { dxElementWrapper } from '@js/core/renderer';
77
import $ from '@js/core/renderer';
8-
import { equalByValue } from '@js/core/utils/common';
8+
// @ts-expect-error
9+
import { equalByValue, getKeyHash } from '@js/core/utils/common';
910
import type { DeferredObj } from '@js/core/utils/deferred';
1011
// @ts-expect-error
1112
import { Deferred, fromPromise, when } from '@js/core/utils/deferred';
@@ -131,7 +132,7 @@ class EditingControllerImpl extends modules.ViewController {
131132

132133
protected _saveEditorHandler: any;
133134

134-
private _internalState: any;
135+
private _internalState!: Map<unknown, any>;
135136

136137
protected _refocusEditCell: any;
137138

@@ -193,7 +194,7 @@ class EditingControllerImpl extends modules.ViewController {
193194
this._updateEditButtons();
194195

195196
if (!this._internalState) {
196-
this._internalState = [];
197+
this._internalState = new Map();
197198
}
198199

199200
this.component._optionsByReference[EDITING_EDITROWKEY_OPTION_NAME] = true;
@@ -272,7 +273,7 @@ class EditingControllerImpl extends modules.ViewController {
272273
}
273274

274275
private _getInternalData(key) {
275-
return this._internalState.filter((item) => equalByValue(item.key, key))[0];
276+
return this._internalState.get(getKeyHash(key));
276277
}
277278

278279
public _addInternalData(params) {
@@ -282,7 +283,7 @@ class EditingControllerImpl extends modules.ViewController {
282283
return extend(internalData, params);
283284
}
284285

285-
this._internalState.push(params);
286+
this._internalState.set(getKeyHash(params.key), params);
286287
return params;
287288
}
288289

@@ -1329,12 +1330,7 @@ class EditingControllerImpl extends modules.ViewController {
13291330
}
13301331

13311332
private _removeInternalData(key) {
1332-
const internalData = this._getInternalData(key);
1333-
const index = this._internalState.indexOf(internalData);
1334-
1335-
if (index > -1) {
1336-
this._internalState.splice(index, 1);
1337-
}
1333+
this._internalState.delete(getKeyHash(key));
13381334
}
13391335

13401336
private _updateInsertAfterOrBeforeKeys(changes, index) {
@@ -1770,8 +1766,7 @@ class EditingControllerImpl extends modules.ViewController {
17701766
return deferred.promise();
17711767
}
17721768

1773-
// @ts-expect-error
1774-
private _resolveAfterSave(deferred, { cancel, error } = {}) {
1769+
private _resolveAfterSave(deferred, { cancel = undefined, error = undefined } = {}) {
17751770
// @ts-expect-error
17761771
when(this._afterSaveEditData(cancel)).done(() => {
17771772
deferred.resolve(error);
@@ -1860,7 +1855,6 @@ class EditingControllerImpl extends modules.ViewController {
18601855
}).done(() => {
18611856
this._resolveAfterSave(deferred);
18621857
}).fail((error) => {
1863-
// @ts-expect-error
18641858
this._resolveAfterSave(deferred, { error });
18651859
});
18661860
}

0 commit comments

Comments
 (0)