Skip to content

Commit a17522b

Browse files
author
Denys Rul
committed
MAGETWO-45702: [JS] Caching server requests for UI Listing component
- Decrease update delay - Fix wrong request parameters issue
1 parent 0c8b13d commit a17522b

File tree

1 file changed

+26
-20
lines changed

1 file changed

+26
-20
lines changed

app/code/Magento/Ui/view/base/web/js/grid/data-storage.js

Lines changed: 26 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ define([
1313
return Class.extend({
1414
defaults: {
1515
cacheRequests: true,
16-
cachedRequestDelay: 500,
16+
cachedRequestDelay: 50,
1717
indexField: 'entity_id',
1818
data: {}
1919
},
@@ -61,24 +61,23 @@ define([
6161
getIds: function (data) {
6262
data = data || this.data;
6363

64-
return _.map(data, function (item) {
65-
return item[this.indexField];
66-
}, this);
64+
return _.pluck(data, this.indexField);
6765
},
6866

6967
/**
68+
* Extracts data which matches specified parameters.
7069
*
71-
* @param {Object} params
70+
* @param {Object} params - Request parameters.
7271
* @param {Object} [options={}]
7372
* @returns {jQueryPromise}
7473
*/
7574
getData: function (params, options) {
76-
var cachedRequest = this.getCachedRequest(params);
75+
var cachedRequest = this.getRequest(params);
7776

7877
options = options || {};
7978

8079
return !options.refresh && cachedRequest ?
81-
this.getCachedRequestData(cachedRequest) :
80+
this.getRequestData(cachedRequest) :
8281
this.requestData(params);
8382
},
8483

@@ -104,13 +103,14 @@ define([
104103
* @returns {jQueryPromise}
105104
*/
106105
requestData: function (params) {
107-
var handler = this.onRequestComplete.bind(this, params),
106+
var query = utils.copy(params),
107+
handler = this.onRequestComplete.bind(this, query),
108108
request;
109109

110110
request = $.ajax({
111111
url: this.updateUrl,
112112
method: 'GET',
113-
data: params,
113+
data: query,
114114
dataType: 'json'
115115
}).done(handler);
116116

@@ -124,19 +124,19 @@ define([
124124
* @param {Object} params - Request parameters.
125125
* @returns {Object} Instance of request.
126126
*/
127-
getCachedRequest: function (params) {
127+
getRequest: function (params) {
128128
return _.find(this._requests, function (request) {
129129
return _.isEqual(params, request.params);
130130
}, this);
131131
},
132132

133133
/**
134-
* Forms data object associated with a provided request.
134+
* Forms data object associated with provided request.
135135
*
136136
* @param {Object} request - Request object.
137137
* @returns {jQueryPromise}
138138
*/
139-
getCachedRequestData: function (request) {
139+
getRequestData: function (request) {
140140
var defer = $.Deferred(),
141141
resolve = defer.resolve.bind(defer),
142142
delay = this.cachedRequestDelay,
@@ -155,19 +155,25 @@ define([
155155
},
156156

157157
/**
158+
* Caches requests object with provdided parameters
159+
* and data object associated with it.
158160
*
159161
* @param {Object} data - Data associated with request.
160162
* @param {Object} params - Request parameters.
161163
* @returns {DataStorage} Chainable.
162164
*/
163165
cacheRequest: function (data, params) {
164-
var request = {
166+
var cached = this.getRequest(params);
167+
168+
if (cached) {
169+
this.removeRequest(cached);
170+
}
171+
172+
this._requests.push({
165173
ids: this.getIds(data.items),
166-
params: utils.copy(params),
174+
params: params,
167175
totalRecords: data.totalRecords
168-
};
169-
170-
this._requests.push(request);
176+
});
171177

172178
return this;
173179
},
@@ -177,7 +183,7 @@ define([
177183
*
178184
* @returns {DataStorage} Chainable.
179185
*/
180-
clearCachedRequests: function () {
186+
clearRequests: function () {
181187
this._requests.splice(0);
182188

183189
return this;
@@ -189,7 +195,7 @@ define([
189195
* @param {Object} request - Request object.
190196
* @returns {DataStorage} Chainable.
191197
*/
192-
removeCachedRequest: function (request) {
198+
removeRequest: function (request) {
193199
var requests = this._requests,
194200
index = requests.indexOf(request);
195201

@@ -207,7 +213,7 @@ define([
207213
* @returns {Boolean}
208214
*/
209215
wasRequested: function (params) {
210-
return !!this.getCachedRequest(params);
216+
return !!this.getRequest(params);
211217
},
212218

213219
/**

0 commit comments

Comments
 (0)