[ARVADOS] created: 1.1.0-139-g336973b
Git user
git at public.curoverse.com
Thu Nov 16 15:16:25 EST 2017
at 336973bf211f462aa826a1702991e056a30fd6ae (commit)
commit 336973bf211f462aa826a1702991e056a30fd6ae
Author: Lucas Di Pentima <ldipentima at veritasgenetics.com>
Date: Thu Nov 16 17:15:17 2017 -0300
12519: Added project search to multisite search
First draft, for approach validaton purposes.
Arvados-DCO-1.1-Signed-off-by: Lucas Di Pentima <ldipentima at veritasgenetics.com>
diff --git a/apps/workbench/app/assets/javascripts/components/collections.js b/apps/workbench/app/assets/javascripts/components/collections.js
index 591bf38..c514de8 100644
--- a/apps/workbench/app/assets/javascripts/components/collections.js
+++ b/apps/workbench/app/assets/javascripts/components/collections.js
@@ -50,8 +50,9 @@ window.CollectionsTable = {
m('td', [
item.workbenchBaseURL() &&
m('a.btn.btn-xs.btn-default', {
- href: item.workbenchBaseURL()+'collections/'+item.uuid,
- }, 'Show'),
+ title: 'Show '+item.objectType.description,
+ href: item.workbenchBaseURL()+'/'+item.objectType.wb_path+'/'+item.uuid,
+ }, item.objectType.label),
]),
m('td.arvados-uuid', item.uuid),
m('td', item.name || '(unnamed)'),
@@ -92,38 +93,72 @@ window.CollectionsSearch = {
vnode.state.searchActive.map(function(q) {
var sessions = vnode.state.sessionDB.loadActive()
vnode.state.loader = new MergingLoader({
- children: Object.keys(sessions).map(function(key) {
+ // For every session, search for every object type, and finally
+ // flatten the list of lists of MultipageLoaders
+ children: [].concat.apply([], Object.keys(sessions).map(function(key) {
var session = sessions[key]
var workbenchBaseURL = function() {
return vnode.state.sessionDB.workbenchBaseURL(session)
}
- return new MultipageLoader({
- sessionKey: key,
- loadFunc: function(filters) {
- var tsquery = to_tsquery(q)
- if (tsquery) {
- filters = filters.slice(0)
- filters.push(['any', '@@', tsquery])
- }
- return vnode.state.sessionDB.request(session, 'arvados/v1/collections', {
- data: {
- filters: JSON.stringify(filters),
- count: 'none',
- },
- }).then(function(resp) {
- resp.items.map(function(item) {
- item.workbenchBaseURL = workbenchBaseURL
- })
- return resp
- })
+ var searchable_objects = [
+ {
+ wb_path: 'groups',
+ api_path: 'arvados/v1/groups',
+ filters: [['group_class', '=', 'project']],
+ label: 'P',
+ description: 'Project',
+ },
+ {
+ wb_path: 'collections',
+ api_path: 'arvados/v1/collections',
+ filters: [],
+ label: 'C',
+ description: 'Collection',
},
+ ]
+ return searchable_objects.map(function(obj_type){
+ return new MultipageLoader({
+ sessionKey: key,
+ objectKind: obj_type.label,
+ loadFunc: function(filters) {
+ var tsquery = to_tsquery(q)
+ if (tsquery) {
+ filters = filters.slice(0)
+ filters.push(['any', '@@', tsquery])
+ }
+ // Apply additional type dependant filters, if any.
+ for (var f of obj_type.filters) {
+ filters.push(f)
+ }
+ return vnode.state.sessionDB.request(session, obj_type.api_path, {
+ data: {
+ filters: JSON.stringify(filters),
+ count: 'none',
+ },
+ }).then(function(resp) {
+ resp.items.map(function(item) {
+ item.workbenchBaseURL = workbenchBaseURL
+ item.objectType = obj_type
+ })
+ return resp
+ })
+ },
+ })
})
- })
+ }))
})
})
},
view: function(vnode) {
var sessions = vnode.state.sessionDB.loadAll()
+ var group_sessions = function(sessionList) {
+ var grouped = {}
+ for (session of sessionList) {
+ grouped[session.sessionKey] = grouped[session.sessionKey] || []
+ grouped[session.sessionKey].push(session)
+ }
+ return grouped
+ }
return m('form', {
onsubmit: function() {
vnode.state.searchActive(vnode.state.searchEntered())
@@ -154,10 +189,17 @@ window.CollectionsSearch = {
'Searching sites: ',
vnode.state.loader.children.length == 0
? m('span.label.label-xs.label-danger', 'none')
- : vnode.state.loader.children.map(function(child) {
- return [m('span.label.label-xs', {
- className: child.state == child.LOADING ? 'label-warning' : 'label-success',
- }, child.sessionKey), ' ']
+ : Object.entries(group_sessions(vnode.state.loader.children)).map(function(e) {
+ var key = e[0] // sessionKey (cluster id)
+ var childs = e[1] // Array of loader children
+ var labels = childs.map(function(child) {
+ return m('span.label.label-xs', {
+ className: child.state == child.LOADING ? 'label-warning' : 'label-success',
+ }, child.objectKind)
+ })
+ return [m('span.label.label-xs',
+ {className:'label-info'},
+ key)].concat(labels).concat(' ')
}),
' ',
m('a[href="/sessions"]', 'Add/remove sites'),
-----------------------------------------------------------------------
hooks/post-receive
--
More information about the arvados-commits
mailing list