From 4c07778602aa6b5182428347b8a0b7f075fe9d69 Mon Sep 17 00:00:00 2001 From: Sonia Zorba Date: Thu, 24 Aug 2023 14:39:20 +0200 Subject: [PATCH 1/5] Implemented task deletion --- src/lib/server/api/v1/task_api.js | 26 +++++++++++++++++++++++++- src/routes/tasks/+page.svelte | 23 ++++++++++++++++++++++- src/routes/tasks/[taskId]/+server.js | 11 +++++++++++ 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 src/routes/tasks/[taskId]/+server.js diff --git a/src/lib/server/api/v1/task_api.js b/src/lib/server/api/v1/task_api.js index b90384d9..bcaea6d5 100644 --- a/src/lib/server/api/v1/task_api.js +++ b/src/lib/server/api/v1/task_api.js @@ -1,5 +1,5 @@ import { FRACTAL_SERVER_HOST } from '$env/static/private'; -import { PostResourceException } from '$lib/common/errors.js'; +import { PostResourceException, responseError } from '$lib/common/errors.js'; /** * Fetches a list of tasks from the server @@ -136,3 +136,27 @@ export async function taskCollectionStatus(fetch, taskId) { throw new Error('Unable to fetch collection operation status'); } + + +/** + * Deletes a task from the server + * @param fetch + * @param taskId + * @returns {Promise<*>} + */ +export async function deleteTask(fetch, taskId) { + const response = await fetch( + FRACTAL_SERVER_HOST + `/api/v1/task/${taskId}`, + { + method: 'DELETE', + credentials: 'include', + mode: 'cors' + } + ); + + if (response.ok) { + return new Response(null, { status: response.status }); + } + + await responseError(response); +} \ No newline at end of file diff --git a/src/routes/tasks/+page.svelte b/src/routes/tasks/+page.svelte index db628c32..3dffb667 100644 --- a/src/routes/tasks/+page.svelte +++ b/src/routes/tasks/+page.svelte @@ -64,6 +64,26 @@ } }; } + + async function handleDeleteTask(taskId) { + const response = await fetch('/tasks/' + taskId, { + method: 'DELETE', + credentials: 'include' + }); + + if (response.ok) { + console.log('Task deleted successfully'); + tasks = tasks.filter((t) => t.id !== taskId); + } else { + console.error('Error deleting the task'); + new StandardErrorAlert({ + target: document.getElementById('taskErrorAlert'), + props: { + error: await response.json() + } + }); + } + }
@@ -155,6 +175,7 @@

Task List

+ - +
@@ -191,7 +212,7 @@ Info - diff --git a/src/routes/tasks/[taskId]/+server.js b/src/routes/tasks/[taskId]/+server.js new file mode 100644 index 00000000..2696df68 --- /dev/null +++ b/src/routes/tasks/[taskId]/+server.js @@ -0,0 +1,11 @@ +import { deleteTask } from '$lib/server/api/v1/task_api'; + +export async function DELETE({ fetch, url }) { + console.log('Delete task request'); + + const parts = url.pathname.split('/'); + const taskId = parts[parts.length - 1]; + console.log('Task to delete: ' + taskId); + + return await deleteTask(fetch, taskId); +} From 6b4c98fb44a58699124db9fc1b555be7a5660634 Mon Sep 17 00:00:00 2001 From: Sonia Zorba Date: Thu, 24 Aug 2023 17:29:52 +0200 Subject: [PATCH 2/5] Implemented editing of task --- src/lib/common/component_utilities.js | 22 +++ src/lib/components/tasks/TaskEditModal.svelte | 135 ++++++++++++++++++ src/lib/components/tasks/TaskInfoModal.svelte | 4 +- .../workflow/MetaPropertiesForm.svelte | 14 +- src/lib/server/api/v1/task_api.js | 30 ++++ src/lib/stores/taskStores.js | 3 +- src/routes/tasks/+page.svelte | 36 ++++- src/routes/tasks/[taskId]/+server.js | 14 +- 8 files changed, 240 insertions(+), 18 deletions(-) create mode 100644 src/lib/components/tasks/TaskEditModal.svelte diff --git a/src/lib/common/component_utilities.js b/src/lib/common/component_utilities.js index 434f780a..883e231d 100644 --- a/src/lib/common/component_utilities.js +++ b/src/lib/common/component_utilities.js @@ -80,3 +80,25 @@ export function fieldHasValue(event) { const inputValue = event.target?.value || undefined; return inputValue !== undefined && inputValue !== ''; } + +export function getOnlyModifiedProperties(oldProperties, newProperties) { + const modifiedProperties = {}; + for (let key in newProperties) { + if (newProperties[key] !== oldProperties[key]) { + modifiedProperties[key] = newProperties[key]; + } + } + return modifiedProperties; +} + +export function unsetEmptyStrings(inputValues) { + const clearedValues = {}; + for (let key in inputValues) { + if (typeof(inputValues[key]) === 'string' && inputValues[key].trim() === '') { + clearedValues[key] = null; + } else { + clearedValues[key] = inputValues[key]; + } + } + return clearedValues; +} diff --git a/src/lib/components/tasks/TaskEditModal.svelte b/src/lib/components/tasks/TaskEditModal.svelte new file mode 100644 index 00000000..81e8aab1 --- /dev/null +++ b/src/lib/components/tasks/TaskEditModal.svelte @@ -0,0 +1,135 @@ + + + diff --git a/src/lib/components/tasks/TaskInfoModal.svelte b/src/lib/components/tasks/TaskInfoModal.svelte index 278116ab..14393875 100644 --- a/src/lib/components/tasks/TaskInfoModal.svelte +++ b/src/lib/components/tasks/TaskInfoModal.svelte @@ -1,6 +1,6 @@ +
+
+
Version
+ +
+
@@ -199,7 +217,7 @@ {#each tasks as task}
{task.name}{task.version}{task.version || "-"} {task.owner || "–"} + + From eaa2025327c8d6539ec855d97aaad3a2021752e0 Mon Sep 17 00:00:00 2001 From: Sonia Zorba Date: Fri, 25 Aug 2023 11:18:26 +0200 Subject: [PATCH 5/5] Added comment --- src/routes/tasks/+page.svelte | 1 + 1 file changed, 1 insertion(+) diff --git a/src/routes/tasks/+page.svelte b/src/routes/tasks/+page.svelte index 2581e359..ee9aafcb 100644 --- a/src/routes/tasks/+page.svelte +++ b/src/routes/tasks/+page.svelte @@ -44,6 +44,7 @@ originalTaskStore.set({ ...task }); } + // Updates the tasks list after a task is edited in the modal async function updateEditedTask(editedTask) { tasks = tasks.filter(t => { if (t.id === editedTask.id) {