IF YOU WOULD LIKE TO GET AN ACCOUNT, please write an email to s dot adaszewski at gmail dot com. User accounts are meant only to report issues and/or generate pull requests. This is a purpose-specific Git hosting for ADARED projects. Thank you for your understanding!
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

127 lines
4.9KB

  1. import { h, Component, createRef } from 'preact';
  2. import { route } from 'preact-router';
  3. import WBNavbarCommon from 'wb-navbar-common';
  4. import WBProjectListing from 'wb-project-listing';
  5. import WBInlineSearch from 'wb-inline-search';
  6. import WBArvadosCrumbs from 'wb-arvados-crumbs';
  7. import WBTabs from 'wb-tabs';
  8. import WBProcessListing from 'wb-process-listing';
  9. import WBCollectionListing from 'wb-collection-listing';
  10. import WBWorkflowListing from 'wb-workflow-listing';
  11. import WBRenameDialog from 'wb-rename-dialog';
  12. import WBDeleteDialog from 'wb-delete-dialog';
  13. class WBBrowse extends Component {
  14. constructor(...args) {
  15. super(...args);
  16. this.renameDialogRef = createRef();
  17. this.deleteDialogRef = createRef();
  18. }
  19. getUrl(params) {
  20. let res = '/browse/' +
  21. ('ownerUuid' in params ? params.ownerUuid : (this.props.ownerUuid || '')) + '/' +
  22. ('activePage' in params ? params.activePage : (this.props.activePage || '')) + '/' +
  23. ('objTypeTab' in params ? params.objTypeTab : (this.props.objTypeTab || '')) + '/' +
  24. ('collectionPage' in params ? params.collectionPage : (this.props.collectionPage || '')) + '/' +
  25. ('processPage' in params ? params.processPage : (this.props.processPage || '')) + '/' +
  26. ('workflowPage' in params ? params.workflowPage : (this.props.workflowPage || ''));
  27. return res;
  28. }
  29. route(params) {
  30. route(this.getUrl(params));
  31. }
  32. renameDialog(item, callback) {
  33. // throw Error('Not implemented');
  34. this.renameDialogRef.current.show(item, callback);
  35. }
  36. renderRenameLink(item, callback) {
  37. return (
  38. <a href="#" title="Rename" onclick={ e => { e.preventDefault(); this.renameDialog(item, callback); } }>
  39. <i class="fas fa-edit text-secondary"></i>
  40. </a>
  41. );
  42. }
  43. renderDeleteButton(item, callback) {
  44. return (
  45. <button class="btn btn-outline-danger m-1" title="Delete"
  46. onclick={ () => this.deleteDialogRef.current.show(item, callback) }>
  47. <i class="fas fa-trash"></i>
  48. </button>
  49. );
  50. }
  51. render({ ownerUuid, activePage, appState, app,
  52. objTypeTab, collectionPage, processPage, workflowPage }) {
  53. return (
  54. <div>
  55. <WBRenameDialog app={ app } ref={ this.renameDialogRef } />
  56. <WBDeleteDialog app={ app } ref={ this.deleteDialogRef } />
  57. <WBNavbarCommon app={ app } activeItem={ !ownerUuid ? 'all-projects' :
  58. (ownerUuid === app.state.currentUser.uuid ? 'home' : null) } />
  59. <WBArvadosCrumbs uuid={ ownerUuid } app={ app } />
  60. <WBTabs tabs={ [ { 'name': 'Projects', 'isActive': true } ] } />
  61. <WBProjectListing app={ app }
  62. arvHost={ appState.arvHost }
  63. arvToken={ appState.arvToken }
  64. ownerUuid={ ownerUuid }
  65. itemsPerPage="5"
  66. activePage={ Number(activePage || 0) }
  67. onPageChanged={ i => route('/browse/' + (ownerUuid || '') + '/' + i) }
  68. renderRenameLink={ (it, cb) => this.renderRenameLink(it, cb) }
  69. renderDeleteButton={ (it, cb) => this.renderDeleteButton(it, cb) } />
  70. <WBTabs tabs={ [
  71. { 'id': 'collection', 'name': 'Collections', 'isActive': (!objTypeTab || objTypeTab === 'collection') },
  72. { 'id': 'process', 'name': 'Processes', 'isActive': (objTypeTab === 'process') },
  73. { 'id': 'workflow', 'name': 'Workflows', 'isActive': (objTypeTab === 'workflow') } ] }
  74. onTabChanged={ tab => this.route({ 'objTypeTab': tab['id'] }) } />
  75. {
  76. (!objTypeTab || objTypeTab === 'collection') ? (
  77. <WBCollectionListing app={ app }
  78. ownerUuid={ ownerUuid }
  79. itemsPerPage="20"
  80. activePage={ Number(collectionPage || 0) }
  81. getPageUrl={ i => this.getUrl({ 'collectionPage': i }) }
  82. renderRenameLink={ (it, cb) => this.renderRenameLink(it, cb) }
  83. renderDeleteButton={ (it, cb) => this.renderDeleteButton(it, cb) } />
  84. ) : (objTypeTab === 'process' ? (
  85. <WBProcessListing appState={ appState }
  86. ownerUuid={ ownerUuid }
  87. itemsPerPage="20"
  88. activePage={ Number(processPage || 0) }
  89. onPageChanged={ i => this.route({ 'processPage': i }) }
  90. renderRenameLink={ (it, cb) => this.renderRenameLink(it, cb) }
  91. renderDeleteButton={ (it, cb) => this.renderDeleteButton(it, cb) } />
  92. ) : (objTypeTab === 'workflow' ? (
  93. <WBWorkflowListing app={ app }
  94. ownerUuid={ ownerUuid }
  95. itemsPerPage="20"
  96. page={ Number(workflowPage || 0) }
  97. getPageUrl={ i => this.getUrl({ 'workflowPage': i }) }
  98. renderRenameLink={ (it, cb) => this.renderRenameLink(it, cb) }
  99. renderDeleteButton={ (it, cb) => this.renderDeleteButton(it, cb) } />
  100. ) : null))
  101. }
  102. </div>
  103. );
  104. }
  105. }
  106. export default WBBrowse;