=== modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-pivot/scripts/app.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-pivot/scripts/app.js 2015-04-16 08:51:08 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-pivot/scripts/app.js 2015-04-22 12:10:13 +0000 @@ -4984,50 +4984,89 @@ this.isPending = false; dataSearch.hideFilter(); }, + storage: {}, + addToStorage: function(dimensionId, filter, data) { + filter = 'cache_' + (Ext.isString(filter) || Ext.isNumber(filter) ? filter : ''); + + if (!dimensionId) { + return; + } + + if (!this.storage.hasOwnProperty(dimensionId)) { + this.storage[dimensionId] = {}; + } + + if (!this.storage[dimensionId][filter]) { + this.storage[dimensionId][filter] = data; + } + }, + getFromStorage: function(dimensionId, filter) { + filter = 'cache_' + (Ext.isString(filter) || Ext.isNumber(filter) ? filter : ''); + + if (this.storage.hasOwnProperty(dimensionId)) { + if (this.storage[dimensionId].hasOwnProperty(filter)) { + return this.storage[dimensionId][filter]; + } + } + + return; + }, loadPage: function(filter, append, noPaging, fn) { var store = this, params = {}, - path; + path, + cacheData; filter = filter || indicatorFilter.getValue() || null; - if (!append) { - this.lastPage = null; - this.nextPage = 1; - } - - if (store.nextPage === store.lastPage) { - return; - } - - path = '/dimensions/' + dimension.id + '/items.json' + (filter ? '?filter=name:like:' + filter : ''); - - if (noPaging) { - params.paging = false; - } - else { - params.page = store.nextPage; - params.pageSize = 50; - } - - store.isPending = true; - ns.core.web.mask.show(available.boundList); - - Ext.Ajax.request({ - url: ns.core.init.contextPath + '/api' + path, - params: params, - success: function(r) { - var response = Ext.decode(r.responseText), - data = response.items || [], - pager = response.pager; - - store.loadStore(data, pager, append, fn); - }, - callback: function() { - store.isPending = false; - ns.core.web.mask.hide(available.boundList); - } - }); + // check session cache + cacheData = store.getFromStorage(dimension.id, filter); + + if (!append && cacheData) { + store.loadStore(cacheData, {}, append, fn); + } + else { + if (!append) { + this.lastPage = null; + this.nextPage = 1; + } + + if (store.nextPage === store.lastPage) { + return; + } + + path = '/dimensions/' + dimension.id + '/items.json' + (filter ? '?filter=name:like:' + filter : ''); + + if (noPaging) { + params.paging = false; + } + else { + params.page = store.nextPage; + params.pageSize = 50; + } + + store.isPending = true; + ns.core.web.mask.show(available.boundList); + + Ext.Ajax.request({ + url: ns.core.init.contextPath + '/api' + path, + params: params, + success: function(r) { + var response = Ext.decode(r.responseText), + data = response.items || [], + pager = response.pager; + + // add to session cache + store.addToStorage(dimension.id, filter, data); + + store.loadStore(data, pager, append, fn); + }, + callback: function() { + store.isPending = false; + ns.core.web.mask.hide(available.boundList); + } + }); + } }, loadStore: function(data, pager, append, fn) { pager = pager || {}; === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-visualizer/scripts/app.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-visualizer/scripts/app.js 2015-04-12 20:00:37 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-visualizer/scripts/app.js 2015-04-22 12:10:13 +0000 @@ -5162,52 +5162,91 @@ this.lastPage = null; this.nextPage = 1; this.isPending = false; - //indicatorSearch.hideFilter(); + dataSearch.hideFilter(); }, + storage: {}, + addToStorage: function(dimensionId, filter, data) { + filter = 'cache_' + (Ext.isString(filter) || Ext.isNumber(filter) ? filter : ''); + + if (!dimensionId) { + return; + } + + if (!this.storage.hasOwnProperty(dimensionId)) { + this.storage[dimensionId] = {}; + } + + if (!this.storage[dimensionId][filter]) { + this.storage[dimensionId][filter] = data; + } + }, + getFromStorage: function(dimensionId, filter) { + filter = 'cache_' + (Ext.isString(filter) || Ext.isNumber(filter) ? filter : ''); + + if (this.storage.hasOwnProperty(dimensionId)) { + if (this.storage[dimensionId].hasOwnProperty(filter)) { + return this.storage[dimensionId][filter]; + } + } + + return; + }, loadPage: function(filter, append, noPaging, fn) { var store = this, params = {}, - path; + path, + cacheData; filter = filter || indicatorFilter.getValue() || null; - if (!append) { - this.lastPage = null; - this.nextPage = 1; - } - - if (store.nextPage === store.lastPage) { - return; - } - - path = '/dimensions/' + dimension.id + '/items.json' + (filter ? '?filter=name:like:' + filter : ''); - - if (noPaging) { - params.paging = false; - } - else { - params.page = store.nextPage; - params.pageSize = 50; - } - - store.isPending = true; - ns.core.web.mask.show(available.boundList); - - Ext.Ajax.request({ - url: ns.core.init.contextPath + '/api' + path, - params: params, - success: function(r) { - var response = Ext.decode(r.responseText), - data = response.items || [], - pager = response.pager; - - store.loadStore(data, pager, append, fn); - }, - callback: function() { - store.isPending = false; - ns.core.web.mask.hide(available.boundList); - } - }); + // check session cache + cacheData = store.getFromStorage(dimension.id, filter); + + if (!append && cacheData) { + store.loadStore(cacheData, {}, append, fn); + } + else { + if (!append) { + this.lastPage = null; + this.nextPage = 1; + } + + if (store.nextPage === store.lastPage) { + return; + } + + path = '/dimensions/' + dimension.id + '/items.json' + (filter ? '?filter=name:like:' + filter : ''); + + if (noPaging) { + params.paging = false; + } + else { + params.page = store.nextPage; + params.pageSize = 50; + } + + store.isPending = true; + ns.core.web.mask.show(available.boundList); + + Ext.Ajax.request({ + url: ns.core.init.contextPath + '/api' + path, + params: params, + success: function(r) { + var response = Ext.decode(r.responseText), + data = response.items || [], + pager = response.pager; + + // add to session cache + store.addToStorage(dimension.id, filter, data); + + store.loadStore(data, pager, append, fn); + }, + callback: function() { + store.isPending = false; + ns.core.web.mask.hide(available.boundList); + } + }); + } }, loadStore: function(data, pager, append, fn) { pager = pager || {}; === modified file 'dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-visualizer/scripts/core.js' --- dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-visualizer/scripts/core.js 2015-04-22 09:10:45 +0000 +++ dhis-2/dhis-web/dhis-web-apps/src/main/webapp/dhis-web-visualizer/scripts/core.js 2015-04-22 12:10:13 +0000 @@ -1370,7 +1370,7 @@ support.prototype.number.prettyPrint = function(number, separator) { separator = separator || 'space'; - if (!number) { + if (!(Ext.isNumber(number) || Ext.isString(number))) { return; } @@ -1540,18 +1540,18 @@ dimensionNameIdsMap: {}, // for param string - dimensionNameSortedIdsMap: {} + dimensionNameSortedIdsMap: {}, // sort table by column //sortableIdObjects: [] + + dimensionNameAxisMap: {} }; Ext.applyIf(xLayout, layout); // columns, rows, filters if (layout.columns) { - //layout.columns = support.prototype.array.uniqueByProperty(layout.columns, 'dimension'); - for (var i = 0, dim, items, xDim; i < layout.columns.length; i++) { dim = layout.columns[i]; items = dim.items; @@ -1559,13 +1559,11 @@ xDim.dimension = dim.dimension; xDim.objectName = dim.dimension; - xDim.dimensionName = dimConf.objectNameMap.hasOwnProperty(dim.dimension) ? dimConf.objectNameMap[dim.dimension].dimensionName || dim.dimension : dim.dimension; - - xDim.items = []; - xDim.ids = []; + xDim.dimensionName = dimConf.objectNameMap[dim.dimension].dimensionName; if (items) { xDim.items = items; + xDim.ids = []; for (var j = 0; j < items.length; j++) { xDim.ids.push(items[j].id); @@ -1579,17 +1577,17 @@ xLayout.axisDimensions.push(xDim); xLayout.axisObjectNames.push(xDim.objectName); - xLayout.axisDimensionNames.push(dimConf.objectNameMap.hasOwnProperty(xDim.objectName) ? dimConf.objectNameMap[xDim.objectName].dimensionName || xDim.objectName : xDim.objectName); + xLayout.axisDimensionNames.push(dimConf.objectNameMap[xDim.objectName].dimensionName); xLayout.objectNameDimensionsMap[xDim.objectName] = xDim; xLayout.objectNameItemsMap[xDim.objectName] = xDim.items; xLayout.objectNameIdsMap[xDim.objectName] = xDim.ids; + + xLayout.dimensionNameAxisMap[xDim.dimensionName] = xLayout.columns; } } if (layout.rows) { - //layout.rows = support.prototype.array.uniqueByProperty(layout.rows, 'dimension'); - for (var i = 0, dim, items, xDim; i < layout.rows.length; i++) { dim = Ext.clone(layout.rows[i]); items = dim.items; @@ -1597,13 +1595,11 @@ xDim.dimension = dim.dimension; xDim.objectName = dim.dimension; - xDim.dimensionName = dimConf.objectNameMap.hasOwnProperty(dim.dimension) ? dimConf.objectNameMap[dim.dimension].dimensionName || dim.dimension : dim.dimension; - - xDim.items = []; - xDim.ids = []; + xDim.dimensionName = dimConf.objectNameMap[dim.dimension].dimensionName; if (items) { xDim.items = items; + xDim.ids = []; for (var j = 0; j < items.length; j++) { xDim.ids.push(items[j].id); @@ -1617,17 +1613,17 @@ xLayout.axisDimensions.push(xDim); xLayout.axisObjectNames.push(xDim.objectName); - xLayout.axisDimensionNames.push(dimConf.objectNameMap.hasOwnProperty(xDim.objectName) ? dimConf.objectNameMap[xDim.objectName].dimensionName || xDim.objectName : xDim.objectName); + xLayout.axisDimensionNames.push(dimConf.objectNameMap[xDim.objectName].dimensionName); xLayout.objectNameDimensionsMap[xDim.objectName] = xDim; xLayout.objectNameItemsMap[xDim.objectName] = xDim.items; xLayout.objectNameIdsMap[xDim.objectName] = xDim.ids; + + xLayout.dimensionNameAxisMap[xDim.dimensionName] = xLayout.rows; } } if (layout.filters) { - //layout.filters = support.prototype.array.uniqueByProperty(layout.filters, 'dimension'); - for (var i = 0, dim, items, xDim; i < layout.filters.length; i++) { dim = layout.filters[i]; items = dim.items; @@ -1635,13 +1631,11 @@ xDim.dimension = dim.dimension; xDim.objectName = dim.dimension; - xDim.dimensionName = dimConf.objectNameMap.hasOwnProperty(dim.dimension) ? dimConf.objectNameMap[dim.dimension].dimensionName || dim.dimension : dim.dimension; - - xDim.items = []; - xDim.ids = []; + xDim.dimensionName = dimConf.objectNameMap[dim.dimension].dimensionName; if (items) { xDim.items = items; + xDim.ids = []; for (var j = 0; j < items.length; j++) { xDim.ids.push(items[j].id); @@ -1652,11 +1646,13 @@ xLayout.filterDimensions.push(xDim); xLayout.filterObjectNames.push(xDim.objectName); - xLayout.filterDimensionNames.push(dimConf.objectNameMap.hasOwnProperty(xDim.objectName) ? dimConf.objectNameMap[xDim.objectName].dimensionName || xDim.objectName : xDim.objectName); + xLayout.filterDimensionNames.push(dimConf.objectNameMap[xDim.objectName].dimensionName); xLayout.objectNameDimensionsMap[xDim.objectName] = xDim; xLayout.objectNameItemsMap[xDim.objectName] = xDim.items; xLayout.objectNameIdsMap[xDim.objectName] = xDim.ids; + + xLayout.dimensionNameAxisMap[xDim.dimensionName] = xLayout.filters; } } @@ -2117,7 +2113,9 @@ idIndexOrder = []; // idIndexOrder - for (var i = 0; i < axisDimensionNames.length; i++) { + for (var i = 0, dimName, index; i < axisDimensionNames.length; i++) { + dimName = axisDimensionNames[i]; + //index = response.nameHeaderMap.hasOwnProperty( idIndexOrder.push(response.nameHeaderMap[axisDimensionNames[i]].index); // If co exists in response and is not added in layout, add co after dx