From f4c4b7e786c8b14b22da2bc32d53c0f4853fb0e2 Mon Sep 17 00:00:00 2001 From: MuK IT GmbH Date: Sat, 30 Mar 2019 19:20:51 +0000 Subject: [PATCH] publish muk_web_searchpanel - 12.0 --- muk_web_searchpanel/__manifest__.py | 2 +- muk_web_searchpanel/doc/changelog.rst | 7 ++ .../static/src/js/kanban_searchpanel.js | 106 ++++++++++++------ .../static/src/scss/kanban_view.scss | 14 +++ 4 files changed, 95 insertions(+), 34 deletions(-) diff --git a/muk_web_searchpanel/__manifest__.py b/muk_web_searchpanel/__manifest__.py index 875d17d..0bdc7a7 100644 --- a/muk_web_searchpanel/__manifest__.py +++ b/muk_web_searchpanel/__manifest__.py @@ -20,7 +20,7 @@ { 'name': 'MuK Search Panel', 'summary': 'Kanban Search Panel', - 'version': '12.0.1.0.3', + 'version': '12.0.1.1.0', 'category': 'Extra Tools', 'license': 'AGPL-3', 'author': 'MuK IT', diff --git a/muk_web_searchpanel/doc/changelog.rst b/muk_web_searchpanel/doc/changelog.rst index 00e5b61..54c9a20 100644 --- a/muk_web_searchpanel/doc/changelog.rst +++ b/muk_web_searchpanel/doc/changelog.rst @@ -1,3 +1,10 @@ +`1.1.0` +------- + +- Lazy Loading on long requests + +`1.0.0` ------- - Init version + diff --git a/muk_web_searchpanel/static/src/js/kanban_searchpanel.js b/muk_web_searchpanel/static/src/js/kanban_searchpanel.js index 9f9abf2..410bc25 100644 --- a/muk_web_searchpanel/static/src/js/kanban_searchpanel.js +++ b/muk_web_searchpanel/static/src/js/kanban_searchpanel.js @@ -60,16 +60,41 @@ var SearchPanel = Widget.extend({ this.fields = params.fields; this.model = params.model; this.searchDomain = params.searchDomain; + + this.loadProm = $.Deferred(); + this.loadPromLazy = true; }, willStart: function () { var self = this; - var loadProm = this._fetchCategories().then(function () { - return self._fetchFilters(); + var loading = $.Deferred(); + var loadPromTimer = setTimeout(function () { + if(loading.state() !== 'resolved') { + loading.resolve(); + } + }, this.loadPromMaxTime || 250); + this._fetchCategories().then(function () { + self._fetchFilters().then(function () { + if(loading.state() !== 'resolved') { + clearTimeout(loadPromTimer); + self.loadPromLazy = false; + loading.resolve(); + } + self.loadProm.resolve(); + }); }); - return $.when(loadProm, this._super.apply(this, arguments)); + return $.when(loading, this._super.apply(this, arguments)); }, start: function () { - this._render(); + var self = this; + if(this.loadProm.state() !== 'resolved') { + this.$el.html($("
", { + 'class': "o_search_panel_loading", + 'html': "" + })); + } + this.loadProm.then(function() { + self._render(); + }); return this._super.apply(this, arguments); }, @@ -93,15 +118,18 @@ var SearchPanel = Widget.extend({ * @returns {$.Promise} */ update: function (params) { - var currentSearchDomainStr = JSON.stringify(this.searchDomain); - var newSearchDomainStr = JSON.stringify(params.searchDomain); - var def; - if (this.needReload || (currentSearchDomainStr !== newSearchDomainStr)) { - this.needReload = false; - this.searchDomain = params.searchDomain; - def = this._fetchFilters(); + if(this.loadProm.state() === 'resolved') { + var newSearchDomainStr = JSON.stringify(params.searchDomain); + var currentSearchDomainStr = JSON.stringify(this.searchDomain); + if (this.needReload || (currentSearchDomainStr !== newSearchDomainStr)) { + this.needReload = false; + this.searchDomain = params.searchDomain; + this._fetchFilters().then(this._render.bind(this)); + } else { + this._render(); + } } - return $.when(def).then(this._render.bind(this)); + return $.when(); }, //-------------------------------------------------------------------------- @@ -138,26 +166,30 @@ var SearchPanel = Widget.extend({ var value = category.values[valueId]; return value.parentId === false; }); - - // set active value - var validValues = _.pluck(category.values, 'id').concat([false]); - // set active value from context - var value = this.defaultCategoryValues[category.fieldName]; - // if not set in context, or set to an unknown value, set active value - // from localStorage - if (!_.contains(validValues, value)) { - var storageKey = this._getLocalStorageKey(category); - value = this.call('local_storage', 'getItem', storageKey); - } - // if not set in localStorage either, select 'All' - category.activeValueId = _.contains(validValues, value) ? value : false; - - // unfold ancestor values of active value to make it is visible - if (category.activeValueId) { - var parentValueIds = this._getAncestorValueIds(category, category.activeValueId); - parentValueIds.forEach(function (parentValue) { - category.values[parentValue].folded = false; - }); + category.activeValueId = false; + + if(!this.loadPromLazy) { + // set active value + var validValues = _.pluck(category.values, 'id').concat([false]); + // set active value from context + var value = this.defaultCategoryValues[category.fieldName]; + // if not set in context, or set to an unknown value, set active value + // from localStorage + if (!_.contains(validValues, value)) { + var storageKey = this._getLocalStorageKey(category); + value = this.call('local_storage', 'getItem', storageKey); + } + + // if not set in localStorage either, select 'All' + category.activeValueId = _.contains(validValues, value) ? value : false; + + // unfold ancestor values of active value to make it is visible + if (category.activeValueId) { + var parentValueIds = this._getAncestorValueIds(category, category.activeValueId); + parentValueIds.forEach(function (parentValue) { + category.values[parentValue].folded = false; + }); + } } }, /** @@ -246,6 +278,8 @@ var SearchPanel = Widget.extend({ filter_domain: filterDomain, search_domain: self.searchDomain, }, + }, { + shadow: true, }).then(function (result) { category.parentField = result.parent_field; return result.values; @@ -287,6 +321,8 @@ var SearchPanel = Widget.extend({ group_by: filter.groupBy || false, search_domain: self.searchDomain, }, + }, { + shadow: true, }).then(function (values) { self._createFilterTree(filterId, values); }); @@ -305,6 +341,11 @@ var SearchPanel = Widget.extend({ var category = self.categories[categoryId]; if (category.activeValueId) { domain.push([category.fieldName, '=', category.activeValueId]); + } else if(self.loadPromLazy && self.loadProm.state() !== 'resolved') { + var value = self.defaultCategoryValues[category.fieldName]; + if (value) { + domain.push([category.fieldName, '=', value]); + } } return domain; } @@ -447,7 +488,6 @@ var SearchPanel = Widget.extend({ */ _notifyDomainUpdated: function () { this.needReload = true; - console.log(this) this.trigger_up('search_panel_domain_updated', { domain: this.getDomain(), }); diff --git a/muk_web_searchpanel/static/src/scss/kanban_view.scss b/muk_web_searchpanel/static/src/scss/kanban_view.scss index 53c8084..a614226 100644 --- a/muk_web_searchpanel/static/src/scss/kanban_view.scss +++ b/muk_web_searchpanel/static/src/scss/kanban_view.scss @@ -37,6 +37,20 @@ padding: $o-searchpanel-p-small $o-searchpanel-p-small $o-searchpanel-p*2 $o-searchpanel-p; border-right: 1px solid $gray-300; background-color: white; + position: relative; + + .o_search_panel_loading { + position: absolute; + margin-top: -30px; + margin-left: -30px; + margin-bottom: 0; + margin-right: 0; + font-size: 60px; + height: 60px; + width: 60px; + left: 50%; + top: 50%; + } .o_search_panel_category .o_search_panel_section_icon { color: $o-searchpanel-category-default-color;