diff --git a/frontend/src/js/component/wb-collection-content.js b/frontend/src/js/component/wb-collection-content.js index 0da5890..8bd1b10 100644 --- a/frontend/src/js/component/wb-collection-content.js +++ b/frontend/src/js/component/wb-collection-content.js @@ -2,6 +2,7 @@ import { h, Component } from 'preact'; import WBTable from 'wb-table'; import WBBreadcrumbs from 'wb-breadcrumbs'; import { WBManifestReader } from 'wb-collection-manifest'; +import WBPagination from 'wb-pagination'; import makeArvadosRequest from 'make-arvados-request'; import wbDownloadFile from 'wb-download-file'; @@ -10,13 +11,15 @@ class WBCollectionContent extends Component { super(...args); this.state.rows = []; this.state.manifestReader = null; + this.state.loaded = 0; + this.state.total = 0; } getUrl(params) { let res = '/collection-browse/' + - (params.uuid || this.props.uuid) + '/' + - encodeURIComponent(params.collectionPath || this.props.collectionPath) + '/' + - (params.page || this.props.page); + ('uuid' in params ? params.uuid : this.props.uuid) + '/' + + encodeURIComponent('collectionPath' in params ? params.collectionPath : this.props.collectionPath) + '/' + + ('page' in params ? params.page : this.props.page); return res; } @@ -27,7 +30,10 @@ class WBCollectionContent extends Component { let select = [ 'manifest_text' ]; let prom = makeArvadosRequest(arvHost, arvToken, '/arvados/v1/collections/' + uuid + - '?select=' + encodeURIComponent(JSON.stringify(select))); + '?select=' + encodeURIComponent(JSON.stringify(select)), + { 'onProgress': e => { + this.setState({ 'loaded': e.loaded, 'total': e.total }); + } }); prom = prom.then(xhr => { this.state.manifestReader = new WBManifestReader(xhr.response.manifest_text); this.prepareRows(); @@ -41,23 +47,27 @@ class WBCollectionContent extends Component { prepareRows() { let { manifestReader } = this.state; - let { collectionPath } = this.props; + let { collectionPath, page, itemsPerPage } = this.props; let { arvHost, arvToken } = this.props.app.state; //path = path.split('/'); //path = [ '.' ].concat(path); - let listing = manifestReader.listDirectory('.' + collectionPath); + let listing = manifestReader.listDirectory('.' + collectionPath) + const numPages = Math.ceil(listing.length / itemsPerPage); + listing = listing.slice(page * itemsPerPage, + page * itemsPerPage + itemsPerPage); this.setState({ + 'numPages': numPages, 'rows': listing.map(item => ( (item[0] === 'd') ? [ - ({ item[1] }/), + ({ item[1] }/), 'Directory', null, (
) ] : [ - ({ item[1] }), + ({ item[1] }), 'File', filesize(item[2]), (