Skip to content

Commit 542f4e1

Browse files
committed
Fixed issue with task info/edit modal by replacing the tasks stores with direct calls
1 parent e2a6b29 commit 542f4e1

File tree

4 files changed

+59
-58
lines changed

4 files changed

+59
-58
lines changed

src/lib/components/tasks/TaskEditModal.svelte

Lines changed: 32 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,17 @@
11
<script>
2-
import { originalTaskStore, taskStore } from '$lib/stores/taskStores';
32
import { getOnlyModifiedProperties, nullifyEmptyStrings } from '$lib/common/component_utilities';
43
import { AlertError } from '$lib/common/errors';
54
import Modal from '../common/Modal.svelte';
65
76
export let updateEditedTask;
7+
88
/** @type {import('$lib/types').Task|undefined} */
9-
$: task = $taskStore;
9+
let task;
1010
/** @type {import('$lib/types').Task|undefined} */
11-
$: originalTask = $originalTaskStore;
11+
let originalTask;
12+
1213
$: updateEnabled =
13-
!saving && task && task.name && task.command && task.input_type && task.output_type;
14+
!loading && !saving && task && task.name && task.command && task.input_type && task.output_type;
1415
/** @type {Modal} */
1516
let modal;
1617
let loading = false;
@@ -58,13 +59,17 @@
5859
);
5960
}
6061
61-
async function onOpen() {
62-
if (!task) {
63-
return;
64-
}
65-
saved = false;
62+
/**
63+
*
64+
* @param {import('$lib/types').Task} taskToEdit
65+
*/
66+
export async function open(taskToEdit) {
6667
loading = true;
67-
const response = await fetch(`/api/v1/task/${task.id}`, {
68+
saved = false;
69+
modal.show();
70+
71+
// Retrieving the args_schema field
72+
const response = await fetch(`/api/v1/task/${taskToEdit.id}`, {
6873
method: 'GET',
6974
credentials: 'include'
7075
});
@@ -73,8 +78,11 @@
7378
7479
if (response.ok) {
7580
task = result;
81+
originalTask = { ...result };
7682
} else {
77-
console.error('Unable to load task', result);
83+
modal.displayErrorAlert('Unable to load task');
84+
task = undefined;
85+
originalTask = undefined;
7886
}
7987
loading = false;
8088
}
@@ -92,14 +100,18 @@
92100
}
93101
</script>
94102

95-
<Modal id="taskEditModal" {onOpen} {onClose} bind:this={modal} size="xl">
103+
<Modal id="taskEditModal" {onClose} bind:this={modal} size="xl">
96104
<svelte:fragment slot="header">
97105
{#if task}
98106
<h1 class="h5 modal-title">Task {task.name}</h1>
99107
{/if}
100108
</svelte:fragment>
101109
<svelte:fragment slot="body">
102-
{#if task}
110+
{#if loading}
111+
<div class="spinner-border spinner-border-sm" role="status">
112+
<span class="visually-hidden">Loading...</span>
113+
</div>
114+
{:else if task}
103115
<div class="row mb-3">
104116
<div class="col-12">
105117
<p class="lead">Task properties</p>
@@ -215,19 +227,13 @@
215227
<div class="mb-2 row">
216228
<label for="argsSchema" class="col-2 col-form-label text-end">Args Schema</label>
217229
<div class="col-10">
218-
{#if loading}
219-
<div class="spinner-border spinner-border-sm" role="status">
220-
<span class="visually-hidden">Loading...</span>
221-
</div>
222-
{:else}
223-
<textarea
224-
name="argsSchema"
225-
value={JSON.stringify(task.args_schema, null, 2)}
226-
disabled
227-
class="form-control"
228-
rows="10"
229-
/>
230-
{/if}
230+
<textarea
231+
name="argsSchema"
232+
value={task.args_schema ? JSON.stringify(task.args_schema, null, 2) : null}
233+
disabled
234+
class="form-control"
235+
rows="10"
236+
/>
231237
</div>
232238
</div>
233239

src/lib/components/tasks/TaskInfoModal.svelte

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,25 @@
11
<script>
22
import { formatMarkdown } from '$lib/common/component_utilities';
3-
4-
// TaskInfoModal component
5-
import { taskStore } from '$lib/stores/taskStores';
63
import Modal from '../common/Modal.svelte';
74
8-
// Subscription to taskModalId store to update task property with respect
9-
// to the task in the store. Enable app-wide updates to the project to be
10-
// displayed in this component.
11-
$: task = $taskStore;
5+
/** @type {import('$lib/types').Task|undefined} */
6+
let task;
127
8+
/** @type {Modal} */
9+
let modal;
1310
let loading = false;
1411
15-
async function onOpen() {
16-
if (!task) {
17-
return;
18-
}
12+
/**
13+
*
14+
* @param {import('$lib/types').Task} taskToLoad
15+
*/
16+
export async function open(taskToLoad) {
17+
modal.show();
18+
task = taskToLoad;
19+
20+
// Retrieving the args_schema field
1921
loading = true;
20-
const response = await fetch(`/api/v1/task/${task.id}`, {
22+
const response = await fetch(`/api/v1/task/${taskToLoad.id}`, {
2123
method: 'GET',
2224
credentials: 'include'
2325
});
@@ -27,19 +29,21 @@
2729
if (response.ok) {
2830
task = result;
2931
} else {
30-
console.error('Unable to load task', result);
32+
modal.displayErrorAlert('Unable to load task');
33+
task = undefined;
3134
}
3235
loading = false;
3336
}
3437
</script>
3538

36-
<Modal id="taskInfoModal" size="xl" {onOpen}>
39+
<Modal id="taskInfoModal" size="xl" bind:this={modal}>
3740
<svelte:fragment slot="header">
3841
{#if task}
3942
<h1 class="h5 modal-title">Task {task.name}</h1>
4043
{/if}
4144
</svelte:fragment>
4245
<svelte:fragment slot="body">
46+
<span id="errorAlert-taskInfoModal" />
4347
{#if task}
4448
<div class="row mb-3">
4549
<div class="col-12">

src/lib/stores/taskStores.js

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,3 @@
11
import { writable } from 'svelte/store';
22

3-
/** @type {import('svelte/store').Writable<import('$lib/types').Task|undefined>} */
4-
export const taskStore = writable(undefined);
5-
/** @type {import('svelte/store').Writable<import('$lib/types').Task|undefined>} */
6-
export const originalTaskStore = writable(undefined);
73
export const modalTaskCollectionId = writable(undefined);

src/routes/tasks/+page.svelte

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import { page } from '$app/stores';
33
import { orderTasksByOwnerThenByNameThenByVersion } from '$lib/common/component_utilities.js';
44
import { collectTaskErrorStore } from '$lib/stores/errorStores';
5-
import { originalTaskStore, taskStore } from '$lib/stores/taskStores';
65
import TaskEditModal from '$lib/components/tasks/TaskEditModal.svelte';
76
import TaskInfoModal from '$lib/components/tasks/TaskInfoModal.svelte';
87
import TaskCollection from '$lib/components/tasks/TaskCollection.svelte';
@@ -21,6 +20,11 @@
2120
/** @type {'pypi'|'local'|'single'} */
2221
let packageType = 'pypi';
2322
23+
/** @type {import('$lib/components/tasks/TaskInfoModal.svelte').default} */
24+
let taskInfoModal;
25+
/** @type {import('$lib/components/tasks/TaskEditModal.svelte').default} */
26+
let taskEditModal;
27+
2428
// Store subscriptions
2529
const unsubscribe = collectTaskErrorStore.subscribe((error) => {
2630
if (error) setErrorReasons(error);
@@ -38,15 +42,6 @@
3842
return orderTasksByOwnerThenByNameThenByVersion(tasks, null, 'desc');
3943
}
4044
41-
/**
42-
* @param {number} taskId
43-
*/
44-
function setTaskModal(taskId) {
45-
const task = /** @type {import('$lib/types').Task} */ (tasks.find((t) => t.id === taskId));
46-
taskStore.set(task);
47-
originalTaskStore.set({ ...task });
48-
}
49-
5045
/**
5146
* Updates the tasks list after a task is edited in the modal
5247
* @param {import('$lib/types').Task} editedTask
@@ -273,7 +268,7 @@
273268
class="btn btn-light"
274269
data-bs-toggle="modal"
275270
data-bs-target="#taskInfoModal"
276-
on:click={() => setTaskModal(task.id)}
271+
on:click={() => taskInfoModal.open(task)}
277272
>
278273
<i class="bi bi-info-circle" />
279274
Info
@@ -282,7 +277,7 @@
282277
class="btn btn-primary"
283278
data-bs-toggle="modal"
284279
data-bs-target="#taskEditModal"
285-
on:click={() => setTaskModal(task.id)}
280+
on:click={() => taskEditModal.open(task)}
286281
>
287282
<i class="bi bi-pencil" />
288283
Edit
@@ -306,8 +301,8 @@
306301
</div>
307302
</div>
308303
309-
<TaskInfoModal />
310-
<TaskEditModal {updateEditedTask} />
304+
<TaskInfoModal bind:this={taskInfoModal} />
305+
<TaskEditModal bind:this={taskEditModal} {updateEditedTask} />
311306
312307
<style>
313308
:global(.is-main-version.expanded td) {

0 commit comments

Comments
 (0)