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.

106 lines
2.8KB

  1. import { h, Component } from 'preact';
  2. import WBTable from 'wb-table';
  3. import makeArvadosRequest from 'make-arvados-request';
  4. import WBAccordion from 'wb-accordion';
  5. import WBJsonViewer from 'wb-json-viewer';
  6. class WBWorkflowFields extends Component {
  7. componentDidMount() {
  8. this.prepareRows();
  9. }
  10. componentWillReceiveProps(nextProps) {
  11. this.props = nextProps;
  12. this.prepareRows();
  13. }
  14. prepareRows() {
  15. let { uuid, app } = this.props;
  16. let { arvHost, arvToken } = app.state;
  17. let prom = makeArvadosRequest(arvHost, arvToken,
  18. '/arvados/v1/workflows/' + uuid);
  19. prom = prom.then(xhr => {
  20. const item = xhr.response;
  21. let definition;
  22. try {
  23. definition = JSON.parse(item.definition);
  24. } catch (_) {
  25. definition = jsyaml.load(item.definition);
  26. }
  27. const graph = definition['$graph'];
  28. let rows = [
  29. [ 'Name', item.name ],
  30. [ 'Description', item.description || (<i>{ String(item.description) }</i>) ],
  31. [ 'CWL Version', definition.cwlVersion ],
  32. ];
  33. let keys = graph.map(it => it.id);
  34. keys.sort();
  35. keys = keys.splice(keys.indexOf('#main'), 1).concat(keys);
  36. keys.map(k => {
  37. const it = graph.find(it => (it.id === k));
  38. rows.push([
  39. it.id, (
  40. <div>
  41. <div>Class: { it['class'] }</div>
  42. { it.label ? <div>Label: { it.label }</div> : null }
  43. { it.doc ? <div>Doc: { it.doc }</div> : null }
  44. <WBAccordion names={ [ 'Inputs', 'Outputs', 'Rest' ] }
  45. cardHeaderClass="card-header-sm">
  46. <WBJsonViewer value={ it.inputs } />
  47. <WBJsonViewer value={ it.outputs } />
  48. { (() => {
  49. delete it['inputs'];
  50. delete it['outputs'];
  51. delete it['class'];
  52. delete it['label'];
  53. delete it['doc'];
  54. delete it['id'];
  55. return (
  56. <WBJsonViewer value={ it } />
  57. );
  58. })() }
  59. </WBAccordion>
  60. </div>
  61. )]);
  62. });
  63. /* [ 'Graph', (
  64. <WBAccordion names={ graph.map(it => it.id) }
  65. cardHeaderClass="card-header-sm">
  66. { graph.map(it => (
  67. <WBJsonViewer value={ it } />
  68. )) }
  69. </WBAccordion>
  70. ) ]
  71. ];*/
  72. this.setState({ 'rows': rows });
  73. });
  74. }
  75. render({}, { rows }) {
  76. return (
  77. rows ? (
  78. <WBTable columns={ [ "Name", "Value" ] }
  79. headerClasses={ [ "col-sm-2", "col-sm-4" ] }
  80. rows={ rows }
  81. verticalHeader={ true } />
  82. ) : (
  83. <div>Loading...</div>
  84. )
  85. );
  86. }
  87. }
  88. export default WBWorkflowFields;