Merge branch 'winh-ajax-filter-cache' into 'master'
Use AjaxCache in Droplab AjaxFilter See merge request !11643
This commit is contained in:
commit
54fe9a1e7d
|
@ -1,4 +1,5 @@
|
||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
import AjaxCache from '../../lib/utils/ajax_cache';
|
||||||
|
|
||||||
const AjaxFilter = {
|
const AjaxFilter = {
|
||||||
init: function(hook) {
|
init: function(hook) {
|
||||||
|
@ -58,50 +59,24 @@ const AjaxFilter = {
|
||||||
this.loading = true;
|
this.loading = true;
|
||||||
var params = config.params || {};
|
var params = config.params || {};
|
||||||
params[config.searchKey] = searchValue;
|
params[config.searchKey] = searchValue;
|
||||||
var self = this;
|
|
||||||
self.cache = self.cache || {};
|
|
||||||
var url = config.endpoint + this.buildParams(params);
|
var url = config.endpoint + this.buildParams(params);
|
||||||
var urlCachedData = self.cache[url];
|
return AjaxCache.retrieve(url)
|
||||||
if (urlCachedData) {
|
.then((data) => {
|
||||||
self._loadData(urlCachedData, config, self);
|
this._loadData(data, config);
|
||||||
} else {
|
})
|
||||||
this._loadUrlData(url)
|
.catch(config.onError);
|
||||||
.then(function(data) {
|
|
||||||
self._loadData(data, config, self);
|
|
||||||
}, config.onError).catch(config.onError);
|
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_loadUrlData: function _loadUrlData(url) {
|
_loadData(data, config) {
|
||||||
var self = this;
|
const list = this.hook.list;
|
||||||
return new Promise(function(resolve, reject) {
|
|
||||||
var xhr = new XMLHttpRequest;
|
|
||||||
xhr.open('GET', url, true);
|
|
||||||
xhr.onreadystatechange = function () {
|
|
||||||
if(xhr.readyState === XMLHttpRequest.DONE) {
|
|
||||||
if (xhr.status === 200) {
|
|
||||||
var data = JSON.parse(xhr.responseText);
|
|
||||||
self.cache[url] = data;
|
|
||||||
return resolve(data);
|
|
||||||
} else {
|
|
||||||
return reject([xhr.responseText, xhr.status]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
xhr.send();
|
|
||||||
});
|
|
||||||
},
|
|
||||||
|
|
||||||
_loadData: function _loadData(data, config, self) {
|
|
||||||
const list = self.hook.list;
|
|
||||||
if (config.loadingTemplate && list.data === undefined ||
|
if (config.loadingTemplate && list.data === undefined ||
|
||||||
list.data.length === 0) {
|
list.data.length === 0) {
|
||||||
const dataLoadingTemplate = list.list.querySelector('[data-loading-template]');
|
const dataLoadingTemplate = list.list.querySelector('[data-loading-template]');
|
||||||
if (dataLoadingTemplate) {
|
if (dataLoadingTemplate) {
|
||||||
dataLoadingTemplate.outerHTML = self.listTemplate;
|
dataLoadingTemplate.outerHTML = this.listTemplate;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!self.destroyed) {
|
if (!this.destroyed) {
|
||||||
var hookListChildren = list.list.children;
|
var hookListChildren = list.list.children;
|
||||||
var onlyDynamicList = hookListChildren.length === 1 && hookListChildren[0].hasAttribute('data-dynamic');
|
var onlyDynamicList = hookListChildren.length === 1 && hookListChildren[0].hasAttribute('data-dynamic');
|
||||||
if (onlyDynamicList && data.length === 0) {
|
if (onlyDynamicList && data.length === 0) {
|
||||||
|
@ -109,7 +84,7 @@ const AjaxFilter = {
|
||||||
}
|
}
|
||||||
list.setData.call(list, data);
|
list.setData.call(list, data);
|
||||||
}
|
}
|
||||||
self.notLoading();
|
this.notLoading();
|
||||||
list.currentIndex = 0;
|
list.currentIndex = 0;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue