From e425b631a9a358ad6bad107111b31eed0e45c53a Mon Sep 17 00:00:00 2001 From: Stanislaw Adaszewski Date: Tue, 11 Feb 2020 15:13:37 +0100 Subject: [PATCH] Clumsy attempt at fetchSharedWithMe(). --- .../dialog/wb-browse-dialog-project-list.js | 71 ++++++++++++++++++- frontend/src/js/dialog/wb-browse-dialog.js | 12 +++- 2 files changed, 78 insertions(+), 5 deletions(-) diff --git a/frontend/src/js/dialog/wb-browse-dialog-project-list.js b/frontend/src/js/dialog/wb-browse-dialog-project-list.js index 3333c31..cc00828 100644 --- a/frontend/src/js/dialog/wb-browse-dialog-project-list.js +++ b/frontend/src/js/dialog/wb-browse-dialog-project-list.js @@ -33,7 +33,74 @@ class WBBrowseDialogProjectList extends Component { } fetchSharedWithMe() { - + const { arvHost, arvToken, currentUser } = this.props.app.state; + /*const filters = [ + [ '' ] + ];*/ + const filters = [ + [ 'tail_uuid', '=', currentUser.uuid ], + [ 'link_class', '=', 'permission' ], + [ 'head_uuid', 'is_a', 'arvados#group'] + ]; + let prom = makeArvadosRequest(arvHost, arvToken, + '/arvados/v1/links?filters=' + + encodeURIComponent(JSON.stringify(filters))); + const uuids = {}; + prom = prom.then(xhr => { + let prom_1 = new Promise(accept => accept()); + const { items_available, limit } = xhr.response; + for (let i = 0; i < items_available; i += limit) { + prom_1 = prom_1.then(() => makeArvadosRequest(arvHost, arvToken, + '/arvados/v1/links?filters=' + + encodeURIComponent(JSON.stringify(filters)) + + '&limit=' + limit + + '&offset=' + i)); + prom_1 = prom_1.then(xhr => + xhr.response.items.map(it => (uuids[it.head_uuid] = true))); + } + return prom_1; + }); + prom = prom.then(() => { + const filters_1 = [ + ['uuid', 'in', Object.keys(uuids)], + ['group_class', '=', 'project'] + ]; + return makeArvadosRequest(arvHost, arvToken, + '/arvados/v1/groups?filters=' + + encodeURIComponent(JSON.stringify(filters_1))); + }); + let res = []; + prom = prom.then(xhr => { + const filters_1 = [ + ['uuid', 'in', Object.keys(uuids)], + ['group_class', '=', 'project'] + ]; + let prom_1 = new Promise(accept => accept()); + const { items_available, limit } = xhr.response; + for (let i = 0; i < items_available; i += limit) { + prom_1 = prom_1.then(() => makeArvadosRequest(arvHost, arvToken, + '/arvados/v1/groups?filters=' + + encodeURIComponent(JSON.stringify(filters_1)) + + '&limit=' + limit + + '&offset=' + i)); + prom_1 = prom_1.then(xhr => (res = res.concat(xhr.response.items))); + } + return prom_1; + }); + const { page, itemsPerPage } = this.props; + prom = prom.then(() => { + res.sort((a, b) => a.name.localeCompare(b.name)); + return { + 'response': { + 'items': res.slice(page * itemsPerPage, + page * itemsPerPage + itemsPerPage), + 'items_available': res.length + } + }; + }); + return prom; + // prom = prom.then(xhr => xhr.items.filter(it => (it.group_class === 'project'))); + // prom = prom.then(items => ) } fetchOwned() { @@ -71,7 +138,7 @@ class WBBrowseDialogProjectList extends Component { return prom; } - render({ app, navigate }, { ownerUuid, textSearch, page, numPages, rows }) { + render({ app, navigate, page }, { numPages, rows }) { return (
{ e.preventDefault(); this.navigate('/browse-dialog/browse/' + app.state.currentUser.uuid); } }>Home - All Projects - All Users - Shared with Me + { e.preventDefault(); + this.navigate('/browse-dialog/browse'); } }>All Projects + { e.preventDefault(); + this.navigate('/browse-dialog/users'); } }>All Users + { e.preventDefault(); + this.navigate('/browse-dialog/shared-with-me'); } }>Shared with Me