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'ten fazla konu seçemezsiniz Konular bir harf veya rakamla başlamalı, kısa çizgiler ('-') içerebilir ve en fazla 35 karakter uzunluğunda olabilir.

103 satır
3.3KB

  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. import detectHashes from 'detect-hashes';
  9. class WBProcessView extends Component {
  10. constructor(...args) {
  11. super(...args);
  12. this.state.objectUrls = [];
  13. }
  14. componentDidMount() {
  15. let { arvHost, arvToken } = this.props.app.state;
  16. let prom = makeArvadosRequest(arvHost, arvToken,
  17. '/arvados/v1/container_requests/' + this.props.uuid);
  18. let req;
  19. let cont;
  20. prom = prom.then(xhr => {
  21. req = xhr.response;
  22. if (req.container_uuid) {
  23. let prom_1 = makeArvadosRequest(arvHost, arvToken,
  24. '/arvados/v1/containers/' + req.container_uuid);
  25. prom_1 = prom_1.then(xhr => (cont = xhr.response));
  26. return prom_1;
  27. }
  28. });
  29. //prom = prom.then(xhr => (cont = xhr.response));
  30. prom = prom.then(() => {
  31. let hashes = detectHashes([ req, cont ]);
  32. let filters = [
  33. [ 'portable_data_hash', 'in', hashes ]
  34. ];
  35. return makeArvadosRequest(arvHost, arvToken,
  36. '/arvados/v1/collections?filters=' +
  37. encodeURIComponent(JSON.stringify(filters)));
  38. });
  39. prom = prom.then(xhr => {
  40. let colUuids = xhr.response['items'].map(item => item.uuid);
  41. let uuids = detectUuids([ req, cont ]);
  42. let dict = {};
  43. colUuids.map(u => (dict[u] = true));
  44. uuids.map(u => (dict[u] = true));
  45. return Object.keys(dict);
  46. });
  47. prom = prom.then(uuids => {
  48. // let uuids = detectUuids([ req, cont ]);
  49. let objectTypes = uuids.map(u => arvadosTypeName(u.split('-')[1]) + 's');
  50. let objQueries = {};
  51. objectTypes.map(t => (objQueries[t] = []));
  52. uuids.map((u, idx) => (objQueries[objectTypes[idx]].push(u)));
  53. let prom_1 = new Promise(accept => accept());
  54. let objects = [];
  55. // delete objQueries['users'];
  56. delete objQueries['api_clients'];
  57. for (let k in objQueries) {
  58. let filters = [
  59. ['uuid', 'in', objQueries[k]]
  60. ];
  61. prom_1 = prom_1.then(() => makeArvadosRequest(arvHost, arvToken,
  62. '/arvados/v1/' + k + '?filters=' +
  63. encodeURIComponent(JSON.stringify(filters))));
  64. prom_1 = prom_1.then(xhr => (objects = objects.concat(xhr.response['items'])));
  65. }
  66. prom_1 = prom_1.then(() => objects);
  67. return prom_1;
  68. });
  69. prom = prom.then(objects => {
  70. let objDict = {};
  71. objects.map(o => (objDict[o['uuid']] = o));
  72. let urls = objects.map(o => urlForObject(o));
  73. this.setState({ 'objectUrls': urls });
  74. });
  75. }
  76. render({ app, uuid }, { objectUrls }) {
  77. return (
  78. <div>
  79. <WBNavbarCommon app={ app } />
  80. <WBArvadosCrumbs app={ app } uuid={ uuid } />
  81. <div class="my-2">
  82. This is the process view for { uuid }
  83. </div>
  84. <div>
  85. <a href="/browse">Click here</a>
  86. </div>
  87. <ul>
  88. { objectUrls.map(url => (
  89. <li><a href={ url }>{ url }</a></li>
  90. )) }
  91. </ul>
  92. </div>
  93. );
  94. }
  95. }
  96. export default WBProcessView;