// // Copyright (C) Stanislaw Adaszewski, 2020 // Contact: s.adaszewski@gmail.com // Website: https://adared.ch/wba // License: GNU Affero General Public License, Version 3 // import { h, Component } from 'preact'; import { route } from 'preact-router'; import makeArvadosRequest from 'make-arvados-request'; import WBTable from 'wb-table'; import WBPagination from 'wb-pagination'; import WBNameAndUuid from 'wb-name-and-uuid'; import urlForObject from 'url-for-object'; class WBProjectListing extends Component { constructor(...args) { super(...args); this.state.rows = []; this.state.numPages = 0; } componentDidMount() { this.fetchItems(); } prepareRows(items) { const { app, renderRenameLink, renderDeleteButton, renderSelectionCell, renderSharingButton, renderEditDescription } = this.props; return items.map(item => [ renderSelectionCell(item), (
{ item['name'] } { renderRenameLink(item, () => this.fetchItems()) }
{ item['uuid'] }
), (
{ item['description'] } { renderEditDescription(item, () => this.fetchItems()) }
), ( ), (
{ renderDeleteButton(item, () => this.fetchItems()) } { renderSharingButton(item) }
) ]); } fetchItems() { let { activePage, mode, itemsPerPage, ownerUuid, app, textSearch } = this.props; let { arvHost, arvToken } = app.state; let filters = [ [ 'group_class', '=', 'project' ] ]; if (ownerUuid) filters.push([ 'owner_uuid', '=', ownerUuid ]); if (textSearch) filters.push([ 'any', 'ilike', '%' + textSearch + '%' ]); let prom = makeArvadosRequest(arvHost, arvToken, '/arvados/v1/groups' + (mode === 'shared-with-me' ? '/shared' : '') + '?filters=' + encodeURIComponent(JSON.stringify(filters)) + '&limit=' + itemsPerPage + '&offset=' + (itemsPerPage * activePage)); prom = prom.then(xhr => this.setState({ 'numPages': Math.ceil(xhr.response['items_available'] / xhr.response['limit']), 'rows': this.prepareRows(xhr.response['items']) })); } componentWillReceiveProps(nextProps, nextState) { // this.setState({ 'rows': [] }); // .rows = []; this.props = nextProps; this.fetchItems(); } render({ arvHost, arvToken, ownerUuid, activePage, getPageUrl }, { rows, numPages }) { return (
); } } WBProjectListing.defaultProps = { 'itemsPerPage': 100, 'ownerUuid': null, 'renderRenameLink': () => null, 'renderDeleteButton': () => null, 'renderSelectionCell': () => null, 'renderEditDescription': () => null }; export default WBProjectListing;