Skip to content

Commit 4b065c9

Browse files
authored
DataGrid - Performance drops on adding a large number of rows via editing.changes (T1251098) (#28371)
1 parent 269ce89 commit 4b065c9

File tree

1 file changed

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

1 file changed

+7
-14
lines changed

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

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ 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+
import { equalByValue, getKeyHash } from '@js/core/utils/common';
99
import type { DeferredObj } from '@js/core/utils/deferred';
1010
// @ts-expect-error
1111
import { Deferred, fromPromise, when } from '@js/core/utils/deferred';
@@ -131,7 +131,7 @@ class EditingControllerImpl extends modules.ViewController {
131131

132132
protected _saveEditorHandler: any;
133133

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

136136
protected _refocusEditCell: any;
137137

@@ -193,7 +193,7 @@ class EditingControllerImpl extends modules.ViewController {
193193
this._updateEditButtons();
194194

195195
if (!this._internalState) {
196-
this._internalState = [];
196+
this._internalState = new Map();
197197
}
198198

199199
this.component._optionsByReference[EDITING_EDITROWKEY_OPTION_NAME] = true;
@@ -272,7 +272,7 @@ class EditingControllerImpl extends modules.ViewController {
272272
}
273273

274274
private _getInternalData(key) {
275-
return this._internalState.filter((item) => equalByValue(item.key, key))[0];
275+
return this._internalState.get(getKeyHash(key));
276276
}
277277

278278
public _addInternalData(params) {
@@ -282,7 +282,7 @@ class EditingControllerImpl extends modules.ViewController {
282282
return extend(internalData, params);
283283
}
284284

285-
this._internalState.push(params);
285+
this._internalState.set(getKeyHash(params.key), params);
286286
return params;
287287
}
288288

@@ -1329,12 +1329,7 @@ class EditingControllerImpl extends modules.ViewController {
13291329
}
13301330

13311331
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-
}
1332+
this._internalState.delete(getKeyHash(key));
13381333
}
13391334

13401335
private _updateInsertAfterOrBeforeKeys(changes, index) {
@@ -1770,8 +1765,7 @@ class EditingControllerImpl extends modules.ViewController {
17701765
return deferred.promise();
17711766
}
17721767

1773-
// @ts-expect-error
1774-
private _resolveAfterSave(deferred, { cancel, error } = {}) {
1768+
private _resolveAfterSave(deferred, { cancel = undefined, error = undefined } = {}) {
17751769
// @ts-expect-error
17761770
when(this._afterSaveEditData(cancel)).done(() => {
17771771
deferred.resolve(error);
@@ -1860,7 +1854,6 @@ class EditingControllerImpl extends modules.ViewController {
18601854
}).done(() => {
18611855
this._resolveAfterSave(deferred);
18621856
}).fail((error) => {
1863-
// @ts-expect-error
18641857
this._resolveAfterSave(deferred, { error });
18651858
});
18661859
}

0 commit comments

Comments
 (0)