|
16 | 16 | import VersionUpdate from '$lib/components/workflow/VersionUpdate.svelte'; |
17 | 17 | import { getAllNewVersions } from '$lib/components/workflow/version-checker'; |
18 | 18 | import JobStatusIcon from '$lib/components/jobs/JobStatusIcon.svelte'; |
| 19 | + import TasksOrderModal from '$lib/components/workflow/TasksOrderModal.svelte'; |
19 | 20 |
|
20 | 21 | /** @type {import('$lib/types').Workflow} */ |
21 | 22 | let workflow = $page.data.workflow; |
|
65 | 66 | let unsavedChangesModal; |
66 | 67 | /** @type {Modal} */ |
67 | 68 | let runWorkflowModal; |
68 | | - /** @type {Modal} */ |
69 | | - let editWorkflowTasksOrderModal; |
| 69 | + /** @type {import('$lib/components/workflow/TasksOrderModal.svelte').default} */ |
| 70 | + let editTasksOrderModal; |
70 | 71 | /** @type {Modal} */ |
71 | 72 | let insertTaskModal; |
72 | 73 | /** @type {Modal} */ |
|
345 | 346 | argsSchemaValid = true; |
346 | 347 | } |
347 | 348 |
|
348 | | - function moveWorkflowTask(index, direction) { |
349 | | - const wftList = updatableWorkflowList; |
350 | | -
|
351 | | - let replaceId; |
352 | | - switch (direction) { |
353 | | - case 'up': |
354 | | - if (index === 0) break; |
355 | | - replaceId = index - 1; |
356 | | - break; |
357 | | - case 'down': |
358 | | - if (index === wftList.length - 1) break; |
359 | | - replaceId = index + 1; |
360 | | - } |
361 | | -
|
362 | | - const replaceTask = wftList[replaceId]; |
363 | | - wftList[replaceId] = wftList[index]; |
364 | | - wftList[index] = replaceTask; |
365 | | - updatableWorkflowList = wftList; |
366 | | - } |
367 | | -
|
368 | | - /** |
369 | | - * Reorders a project's workflow in the server |
370 | | - * @returns {Promise<*>} |
371 | | - */ |
372 | | - async function handleWorkflowOrderUpdate() { |
373 | | - if (!workflow) { |
374 | | - return; |
375 | | - } |
376 | | - const patchData = { |
377 | | - reordered_workflowtask_ids: updatableWorkflowList.map((t) => t.id) |
378 | | - }; |
379 | | -
|
380 | | - const headers = new Headers(); |
381 | | - headers.set('Content-Type', 'application/json'); |
382 | | -
|
383 | | - const response = await fetch(`/api/v1/project/${project.id}/workflow/${workflow.id}`, { |
384 | | - method: 'PATCH', |
385 | | - credentials: 'include', |
386 | | - mode: 'cors', |
387 | | - headers, |
388 | | - body: JSON.stringify(patchData) |
389 | | - }); |
390 | | -
|
391 | | - const result = await response.json(); |
392 | | - if (response.ok) { |
393 | | - console.log('Workflow task order updated'); |
394 | | - workflow = result; |
395 | | - editWorkflowTasksOrderModal.toggle(); |
396 | | - } else { |
397 | | - console.error('Workflow task order not updated', result); |
398 | | - editWorkflowTasksOrderModal.displayErrorAlert(result); |
399 | | - } |
400 | | - } |
401 | | -
|
402 | 349 | /** |
403 | 350 | * Requests the server to apply a project's workflow (i.e. run it) |
404 | 351 | * @returns {Promise<void>} |
|
548 | 495 | return; |
549 | 496 | } |
550 | 497 | statuses = outputStatus.status; |
551 | | - const runningOrSubmitted = Object.values(statuses).filter(s => s === 'running' || s === 'submitted'); |
| 498 | + const runningOrSubmitted = Object.values(statuses).filter( |
| 499 | + (s) => s === 'running' || s === 'submitted' |
| 500 | + ); |
552 | 501 | if (statusWatcherTimer) { |
553 | 502 | if (runningOrSubmitted.length === 0) { |
554 | 503 | clearTimeout(statusWatcherTimer); |
|
673 | 622 | > |
674 | 623 | <button |
675 | 624 | class="btn btn-light" |
676 | | - data-bs-toggle="modal" |
677 | | - data-bs-target="#editWorkflowTasksOrderModal" |
678 | | - ><i class="bi-gear-wide-connected" /></button |
| 625 | + on:click={() => editTasksOrderModal.show(updatableWorkflowList)} |
679 | 626 | > |
| 627 | + <i class="bi-gear-wide-connected" /> |
| 628 | + </button> |
680 | 629 | </div> |
681 | 630 | </div> |
682 | 631 | </div> |
|
975 | 924 | </svelte:fragment> |
976 | 925 | </Modal> |
977 | 926 |
|
978 | | -<Modal id="editWorkflowTasksOrderModal" centered={true} bind:this={editWorkflowTasksOrderModal}> |
979 | | - <svelte:fragment slot="header"> |
980 | | - <h5 class="modal-title">Edit workflow tasks order</h5> |
981 | | - </svelte:fragment> |
982 | | - <svelte:fragment slot="body"> |
983 | | - <div id="errorAlert-editWorkflowTasksOrderModal" /> |
984 | | - {#if workflow !== undefined && updatableWorkflowList.length == 0} |
985 | | - <p class="text-center mt-3">No workflow tasks yet, add one.</p> |
986 | | - {:else if workflow !== undefined} |
987 | | - {#key updatableWorkflowList} |
988 | | - <ul class="list-group list-group-flush"> |
989 | | - {#each updatableWorkflowList as workflowTask, i} |
990 | | - <li class="list-group-item" data-fs-target={workflowTask.id}> |
991 | | - <div class="d-flex justify-content-between align-items-center"> |
992 | | - <div> |
993 | | - {workflowTask.task.name} #{workflowTask.id} |
994 | | - </div> |
995 | | - <div> |
996 | | - {#if i !== 0} |
997 | | - <button |
998 | | - class="btn btn-light" |
999 | | - on:click|preventDefault={() => moveWorkflowTask(i, 'up')} |
1000 | | - > |
1001 | | - <i class="bi-arrow-up" /> |
1002 | | - </button> |
1003 | | - {/if} |
1004 | | - {#if i !== updatableWorkflowList.length - 1} |
1005 | | - <button |
1006 | | - class="btn btn-light" |
1007 | | - on:click|preventDefault={() => moveWorkflowTask(i, 'down')} |
1008 | | - > |
1009 | | - <i class="bi-arrow-down" /> |
1010 | | - </button> |
1011 | | - {/if} |
1012 | | - </div> |
1013 | | - </div> |
1014 | | - </li> |
1015 | | - {/each} |
1016 | | - </ul> |
1017 | | - {/key} |
1018 | | - {/if} |
1019 | | - </svelte:fragment> |
1020 | | - <svelte:fragment slot="footer"> |
1021 | | - <button class="btn btn-primary" on:click|preventDefault={handleWorkflowOrderUpdate}> |
1022 | | - Save |
1023 | | - </button> |
1024 | | - </svelte:fragment> |
1025 | | -</Modal> |
| 927 | +<TasksOrderModal |
| 928 | + projectId={project.id} |
| 929 | + {workflow} |
| 930 | + workflowUpdater={(updated) => (workflow = updated)} |
| 931 | + bind:this={editTasksOrderModal} |
| 932 | +/> |
1026 | 933 |
|
1027 | 934 | <Modal id="runWorkflowModal" centered={true} bind:this={runWorkflowModal}> |
1028 | 935 | <svelte:fragment slot="header"> |
|
0 commit comments