From 9fa94ac1f91b1f0c69045495227f0a1acbe46795 Mon Sep 17 00:00:00 2001 From: Tom Clegg Date: Fri, 18 Aug 2017 15:28:29 -0400 Subject: [PATCH 1/1] 12033: Simplify loader interface. items() is ready immediately, and returns [] until the first results arrive. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- .../assets/javascripts/components/collections.js | 4 ++-- .../app/assets/javascripts/models/loader.js | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/apps/workbench/app/assets/javascripts/components/collections.js b/apps/workbench/app/assets/javascripts/components/collections.js index 097fda22b4..a2054c1a03 100644 --- a/apps/workbench/app/assets/javascripts/components/collections.js +++ b/apps/workbench/app/assets/javascripts/components/collections.js @@ -45,7 +45,7 @@ window.CollectionsTable = { m('th', 'last modified'), ])), m('tbody', [ - loader.items() && loader.items().map(function(item) { + loader.items().map(function(item) { return m('tr', [ m('td', m('a.btn.btn-xs.btn-default', {href: item.session.baseURL.replace('://', '://workbench.')+'collections/'+item.uuid}, 'Show')), m('td.arvados-uuid', item.uuid), @@ -145,7 +145,7 @@ window.CollectionsSearch = { ? m('span.label.label-xs.label-danger', 'none') : vnode.state.loader.children.map(function(child) { return [m('span.label.label-xs', { - className: child.items() ? 'label-success' : 'label-warning', + className: child.state == child.LOADING ? 'label-warning' : 'label-success', }, child.sessionKey), ' '] }), ' ', diff --git a/apps/workbench/app/assets/javascripts/models/loader.js b/apps/workbench/app/assets/javascripts/models/loader.js index c1205bc555..f9b82ce96e 100644 --- a/apps/workbench/app/assets/javascripts/models/loader.js +++ b/apps/workbench/app/assets/javascripts/models/loader.js @@ -26,7 +26,7 @@ window.MultipageLoader = function(config) { LOADING: 'loading', READY: 'ready', - items: m.stream(), + items: m.stream([]), thresholdItem: null, loadMore: function() { if (loader.state == loader.DONE || loader.state == loader.LOADING) @@ -37,7 +37,7 @@ window.MultipageLoader = function(config) { ] : [] loader.state = loader.LOADING loader.loadFunc(filters).then(function(resp) { - var items = loader.items() || [] + var items = loader.items() Array.prototype.push.apply(items, resp.items) if (resp.items.length == 0) { loader.state = loader.DONE @@ -65,7 +65,7 @@ window.MergingLoader = function(config) { var loader = this Object.assign(loader, config, { // Sorted items ready to display, merged from all children. - items: m.stream(), + items: m.stream([]), state: 'ready', DONE: 'done', LOADING: 'loading', @@ -100,14 +100,22 @@ window.MergingLoader = function(config) { // cutoff is the topmost (recent) of {bottom (oldest) entry of // any child that still has more pages left to fetch} var cutoff + var cutoffUnknown = false loader.children.forEach(function(child) { + if (child.state == child.DONE) + return var items = child.items() - if (items.length == 0 || child.state == child.DONE) + if (items.length == 0) { + // No idea what's coming in the next page. + cutoffUnknown = true return + } var last = items[items.length-1].modified_at if (!cutoff || cutoff < last) cutoff = last }) + if (cutoffUnknown) + return var combined = [] loader.children.forEach(function(child) { child.itemsDisplayed = 0 -- 2.30.2