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.

85 lines
2.7KB

  1. import { h, Component } from 'preact';
  2. import WBNavbarCommon from 'wb-navbar-common';
  3. import WBArvadosCrumbs from 'wb-arvados-crumbs';
  4. import makeArvadosRequest from 'make-arvados-request';
  5. import detectUuids from 'detect-uuids';
  6. import arvadosTypeName from 'arvados-type-name';
  7. import urlForObject from 'url-for-object';
  8. class WBProcessView extends Component {
  9. constructor(...args) {
  10. super(...args);
  11. this.state.objectUrls = [];
  12. }
  13. componentDidMount() {
  14. let { arvHost, arvToken } = this.props.app.state;
  15. let prom = makeArvadosRequest(arvHost, arvToken,
  16. '/arvados/v1/container_requests/' + this.props.uuid);
  17. let req;
  18. let cont;
  19. prom = prom.then(xhr => {
  20. req = xhr.response;
  21. if (req.container_uuid) {
  22. let prom_1 = makeArvadosRequest(arvHost, arvToken,
  23. '/arvados/v1/containers/' + req.container_uuid);
  24. prom_1 = prom_1.then(xhr => (cont = xhr.response));
  25. return prom_1;
  26. }
  27. });
  28. //prom = prom.then(xhr => (cont = xhr.response));
  29. prom = prom.then(() => {
  30. let uuids = detectUuids([ req, cont ]);
  31. let objectTypes = uuids.map(u => arvadosTypeName(u.split('-')[1]) + 's');
  32. let objQueries = {};
  33. objectTypes.map(t => (objQueries[t] = []));
  34. uuids.map((u, idx) => (objQueries[objectTypes[idx]].push(u)));
  35. let prom_1 = new Promise(accept => accept());
  36. let objects = [];
  37. // delete objQueries['users'];
  38. delete objQueries['api_clients'];
  39. for (let k in objQueries) {
  40. let filters = [
  41. ['uuid', 'in', objQueries[k]]
  42. ];
  43. prom_1 = prom_1.then(() => makeArvadosRequest(arvHost, arvToken,
  44. '/arvados/v1/' + k + '?filters=' +
  45. encodeURIComponent(JSON.stringify(filters))));
  46. prom_1 = prom_1.then(xhr => (objects = objects.concat(xhr.response['items'])));
  47. }
  48. prom_1 = prom_1.then(() => objects);
  49. return prom_1;
  50. });
  51. prom = prom.then(objects => {
  52. let objDict = {};
  53. objects.map(o => (objDict[o['uuid']] = o));
  54. let urls = objects.map(o => urlForObject(o));
  55. this.setState({ 'objectUrls': urls });
  56. });
  57. }
  58. render({ app, uuid }, { objectUrls }) {
  59. return (
  60. <div>
  61. <WBNavbarCommon app={ app } />
  62. <WBArvadosCrumbs app={ app } uuid={ uuid } />
  63. <div class="my-2">
  64. This is the process view for { uuid }
  65. </div>
  66. <div>
  67. <a href="/browse">Click here</a>
  68. </div>
  69. <ul>
  70. { objectUrls.map(url => (
  71. <li><a href={ url }>{ url }</a></li>
  72. )) }
  73. </ul>
  74. </div>
  75. );
  76. }
  77. }
  78. export default WBProcessView;