| @@ -6,6 +6,7 @@ import WBPagination from 'wb-pagination'; | |||
| import urlForObject from 'url-for-object'; | |||
| import arvadosTypeName from 'arvados-type-name'; | |||
| import arvadosObjectName from 'arvados-object-name'; | |||
| import WBCheckboxes from 'wb-checkboxes'; | |||
| class WBCollectionListing extends Component { | |||
| @@ -14,6 +15,8 @@ class WBCollectionListing extends Component { | |||
| this.state.rows = []; | |||
| this.state.numPages = 0; | |||
| this.state.orderStream = uuid.v4(); | |||
| this.state.collectionTypes = [ 'Intermediate', 'Output', 'Log', 'Other' ]; | |||
| this.state.collectionTypeMask = [ true, true, true, true ]; | |||
| } | |||
| componentDidMount() { | |||
| @@ -64,9 +67,9 @@ class WBCollectionListing extends Component { | |||
| } | |||
| fetchItems() { | |||
| let { arvHost, arvToken } = this.props.app.state; | |||
| let { activePage, itemsPerPage, ownerUuid, textSearch } = this.props; | |||
| const { arvHost, arvToken } = this.props.app.state; | |||
| const { activePage, itemsPerPage, ownerUuid, textSearch } = this.props; | |||
| const { collectionTypes, collectionTypeMask } = this.state; | |||
| let filters = []; | |||
| @@ -76,6 +79,17 @@ class WBCollectionListing extends Component { | |||
| if (textSearch) | |||
| filters.push([ 'any', 'ilike', '%' + textSearch + '%' ]); | |||
| if (collectionTypeMask.filter(a => (!a)).length != 0) { | |||
| if (collectionTypeMask[3]) { | |||
| for (let i = 0; i < 3; i++) | |||
| if (!collectionTypeMask[i]) | |||
| filters.push([ 'properties.type', '!=', collectionTypes[i].toLowerCase() ]); | |||
| } else { | |||
| filters.push([ 'properties.type', 'in', | |||
| collectionTypes.filter((_, k) => collectionTypeMask[k]).map(a => a.toLowerCase()) ]); | |||
| } | |||
| } | |||
| let prom = makeArvadosRequest(arvHost, arvToken, | |||
| '/arvados/v1/collections?filters=' + encodeURIComponent(JSON.stringify(filters)) + | |||
| '&limit=' + encodeURIComponent(itemsPerPage) + | |||
| @@ -135,13 +149,19 @@ class WBCollectionListing extends Component { | |||
| this.fetchItems(); | |||
| } | |||
| render({ app, ownerUuid, activePage, getPageUrl }, { rows, numPages, error }) { | |||
| render({ app, ownerUuid, activePage, getPageUrl }, { rows, numPages, error, | |||
| collectionTypes, collectionTypeMask }) { | |||
| return ( | |||
| <div> | |||
| { error ? (<div class="alert alert-danger" role="alert"> | |||
| { error } | |||
| </div>) : null } | |||
| <WBCheckboxes items={ collectionTypes } checked={ collectionTypeMask } | |||
| cssClass="float-left mx-2 my-2" title="Collection Type: " | |||
| onChange={ () => route(getPageUrl(0)) } /> | |||
| <WBTable columns={ [ '', 'Name', 'Description', 'Owner', 'File Count', 'Total Size', 'Actions' ] } | |||
| headerClasses={ [ 'w-1'] } | |||
| rows={ rows } /> | |||