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.

98 lines
3.4KB

  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 linkState from 'linkstate';
  6. function createInputsTemplate(workflow) {
  7. const g = JSON.parse(workflow.definition)['$graph'];
  8. const main = g.find(it => (it.id === '#main'));
  9. /* let res = '';
  10. main.inputs.map(it => {
  11. let id = it.id.split('/');
  12. id = id[id.length - 1];
  13. if (it.label) res += ' // ' + it.label + '\n';
  14. if (it.doc) res += ' //' + it.doc + '\n';
  15. res += ' ' + it.type
  16. res += '\'' + it.id + '\': null'
  17. }); */
  18. let res = main.inputs.map(it => { it.value = null; return it; });
  19. res = JSON.stringify(res, null, 2);
  20. res = res.split('\n');
  21. res = res.map((ln, i) => (i == 0 ? ln : ' ' + ln));
  22. res = res.join('\n');
  23. return res;
  24. }
  25. class WBLaunchWorkflowPage extends Component {
  26. componentDidMount() {
  27. let { app, workflowUuid } = this.props;
  28. let { arvHost, arvToken } = app.state;
  29. let prom = makeArvadosRequest(arvHost, arvToken,
  30. '/arvados/v1/workflows/' + workflowUuid);
  31. prom = prom.then(xhr => this.setState({
  32. 'workflow': xhr.response,
  33. 'processName': xhr.response.name,
  34. 'processDescription': xhr.response.description,
  35. 'inputsFunctionText': '(() => {\n return ' +
  36. createInputsTemplate(xhr.response) +
  37. ';\n})()'
  38. }));
  39. }
  40. render({ app, projectUuid, workflowUuid },
  41. { workflow, processName, processDescription,
  42. inputsFunctionText }) {
  43. return (
  44. <div>
  45. <WBNavbarCommon app={ app } />
  46. { workflow ?
  47. (<form class="container-fluid">
  48. <h1>Launch Workflow</h1>
  49. <div class="form-group">
  50. <label>Workflow</label>
  51. <WBArvadosCrumbs app={ app } uuid={ workflowUuid } />
  52. </div>
  53. <div class="form-group">
  54. <label for="projectUuid">Project UUID</label>
  55. <input type="email" class="form-control" id="projectUuid" placeholder="Enter project uuid" />
  56. </div>
  57. <div class="form-check">
  58. <input type="checkbox" class="form-check-input" id="createSubproject" />
  59. <label class="form-check-label" for="createSubproject">Create subproject</label>
  60. </div>
  61. <div class="form-group">
  62. <label for="processName">Process Name</label>
  63. <input type="text" class="form-control" id="processName"
  64. placeholder="Enter process name" value={ processName }
  65. onChange={ linkState(this, 'processName') }/>
  66. </div>
  67. <div class="form-group">
  68. <label for="processDescription">Process Description</label>
  69. <input type="text" class="form-control" id="processDescription"
  70. placeholder="Enter process name" value={ processDescription }
  71. onChange={ linkState(this, 'processDescription') } />
  72. </div>
  73. <div class="form-group">
  74. <label for="inputs">Inputs</label>
  75. <textarea class="form-control" id="inputs"
  76. style="font-family: monospace;" rows="20"
  77. value={ inputsFunctionText }></textarea>
  78. </div>
  79. </form>) : <div>Loading...</div> }
  80. </div>
  81. );
  82. }
  83. }
  84. export default WBLaunchWorkflowPage;