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!
選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。

138 行
5.4KB

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