From f35882c96768bd551c97feb89122f8ba507ced8f Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Thu, 7 May 2026 18:26:37 +0200 Subject: [PATCH] bugfix: moving of tasks in tree now works as intended Signed-off-by: Stephan Richter --- frontend/src/routes/task/Add.svelte | 8 ++--- frontend/src/routes/task/ListTask.svelte | 29 ++++----------- frontend/src/routes/task/RequiredTasks.svelte | 26 +++++--------- frontend/src/routes/task/TaskList.svelte | 2 +- frontend/src/routes/task/View.svelte | 36 ++++++------------- 5 files changed, 27 insertions(+), 74 deletions(-) diff --git a/frontend/src/routes/task/Add.svelte b/frontend/src/routes/task/Add.svelte index 398a0b99..f8509554 100644 --- a/frontend/src/routes/task/Add.svelte +++ b/frontend/src/routes/task/Add.svelte @@ -2,7 +2,7 @@ import { onMount } from 'svelte'; import { useTinyRouter } from 'svelte-tiny-router'; - import { api, get } from '../../urls.svelte.js'; + import { api, get, post } from '../../urls.svelte.js'; import { error, yikes } from '../../warn.svelte'; import { t } from '../../translations.svelte.js'; import { user } from '../../user.svelte.js'; @@ -104,11 +104,7 @@ async function saveTask(){ const url = api('task/add'); - const resp = await fetch(url,{ - credentials : 'include', - method : 'POST', - body : JSON.stringify(task) - }); + const resp = await post(url,task); if (resp.ok) { localStorage.removeItem(`task/${task.id}/description`); if (!assignee) { // if assignee is set, this form was opened within an external context. hence we don`t want to navigate somewhere else! diff --git a/frontend/src/routes/task/ListTask.svelte b/frontend/src/routes/task/ListTask.svelte index cb74453b..424685bb 100644 --- a/frontend/src/routes/task/ListTask.svelte +++ b/frontend/src/routes/task/ListTask.svelte @@ -3,7 +3,7 @@ import { useTinyRouter } from 'svelte-tiny-router'; import { dragged } from './dragndrop.svelte'; - import { api } from '../../urls.svelte'; + import { api, drop, patch, post } from '../../urls.svelte'; import { error, yikes } from '../../warn.svelte'; import { t } from '../../translations.svelte'; import { timetrack } from '../../user.svelte'; @@ -47,10 +47,7 @@ async function deleteTask(){ if (confirm(t('confirm_delete',{element:task.name}))){ const url = api(`task/${task.id}`); - const resp = await fetch(url,{ - credentials : 'include', - method : 'DELETE' - }); + const resp = await drop(url); if (resp.ok){ deleted = true; } else { @@ -70,11 +67,7 @@ ev.stopPropagation(); if (dragged.element.id == task.id) return; const url = api(`task/${dragged.element.id}`); - const resp = await fetch(url,{ - credentials : 'include', - method : 'PATCH', - body : JSON.stringify({ parent_task_id : task.id}) - }); + const resp = await patch(url, { parent_task_id : task.id}); if (resp.ok) { yikes(); } else { @@ -90,11 +83,7 @@ show_closed : show_closed }; if (task.show_closed) data.show_closed = true; - const resp = await fetch(url,{ - credentials : 'include', - method : 'POST', - body : JSON.stringify(data) - }); + const resp = await post(url,data); if (resp.ok){ children = await resp.json(); yikes(); @@ -112,11 +101,7 @@ async function patchTask(changeset){ const url = api(`task/${task.id}`); - const resp = await fetch(url,{ - credentials : 'include', - method : 'PATCH', - body : JSON.stringify(changeset) - }); + const resp = await patch(url,changeset); if (resp.ok){ task = await resp.json(); return true; @@ -145,9 +130,7 @@ if (children && lastEvent && lastEvent.task) { if (lastEvent.event == 'delete' || lastEvent.task.parent_task_id != task.id){ delete children[lastEvent.task.id]; - } else { - children[lastEvent.task.id] = lastEvent.task; - } + } else children[lastEvent.task.id] = lastEvent.task; } }); diff --git a/frontend/src/routes/task/RequiredTasks.svelte b/frontend/src/routes/task/RequiredTasks.svelte index cac031ab..8f4966a8 100644 --- a/frontend/src/routes/task/RequiredTasks.svelte +++ b/frontend/src/routes/task/RequiredTasks.svelte @@ -2,7 +2,7 @@ import { onMount } from 'svelte'; import { useTinyRouter } from 'svelte-tiny-router'; - import { api } from '../../urls.svelte'; + import { api, get, patch, post } from '../../urls.svelte'; import { error, yikes } from '../../warn.svelte'; import { t } from '../../translations.svelte'; @@ -17,7 +17,7 @@ async function add(new_task_id){ let url = api(`task/${new_task_id}`); - let resp = await fetch(url,{ credentials : 'include' }); + let resp = await get(url); if (resp.ok){ yikes(); let newTask = await resp.json(); @@ -27,7 +27,7 @@ } task.required_tasks_ids.push(new_task_id); requiredTasks[new_task_id] = newTask; - await patch(); + await update(); delete candidates[new_task_id]; } else { error(resp); @@ -59,17 +59,11 @@ async function loadTasks(){ if (!task || !task.required_tasks_ids || !task.required_tasks_ids.length) return; const url = api('task/list'); - const res = await fetch(url,{ - credentials : 'include', - method : 'POST', - body : JSON.stringify({ids:task.required_tasks_ids}) - }); + const res = await post(url,{ids:task.required_tasks_ids}); if (res.ok){ yikes(); requiredTasks = await res.json(); - } else { - error(resp); - } + } else error(resp); } function oninput(){ @@ -84,19 +78,15 @@ return false; } - async function patch(){ + async function update(){ const url = api(`task/${task.id}`); - const resp = await fetch(url,{ - credentials : 'include', - method : 'PATCH', - body : JSON.stringify({required_tasks_ids:task.required_tasks_ids}) - }); + const resp = await patch(url,{required_tasks_ids:task.required_tasks_ids}); if (!resp.ok) error(resp); } async function unlink(required_task){ task.required_tasks_ids = task.required_tasks_ids.filter(item => item != required_task.id); - patch(); + update(); delete requiredTasks[required_task.id]; } diff --git a/frontend/src/routes/task/TaskList.svelte b/frontend/src/routes/task/TaskList.svelte index d13d2afc..c30b7e68 100644 --- a/frontend/src/routes/task/TaskList.svelte +++ b/frontend/src/routes/task/TaskList.svelte @@ -8,7 +8,7 @@ diff --git a/frontend/src/routes/task/View.svelte b/frontend/src/routes/task/View.svelte index 8714ef88..705baf12 100644 --- a/frontend/src/routes/task/View.svelte +++ b/frontend/src/routes/task/View.svelte @@ -2,7 +2,7 @@ import { onDestroy } from 'svelte'; import { useTinyRouter } from 'svelte-tiny-router'; - import { api, eventStream } from '../../urls.svelte'; + import { api, eventStream, get, patch, post } from '../../urls.svelte'; import { error, yikes } from '../../warn.svelte'; import { t } from '../../translations.svelte'; import { timetrack } from '../../user.svelte.js'; @@ -99,32 +99,24 @@ parent_task_id : +task.id, show_closed : show_closed }; - const resp = await fetch(url,{ - credentials : 'include', - method : 'POST', - body:JSON.stringify(data) - }); + const resp = await post(url,data); if (resp.ok){ yikes(); children = await resp.json(); - } else { - error(resp); - } + } else error(resp); } async function loadParent(){ const url = api(`task/${task.parent_task_id}`); - const resp = await fetch(url,{credentials:'include'}); + const resp = await get(url); if (resp.ok){ task.parent = await resp.json(); - } else { - error(resp); - } + } else error(resp); } async function loadTask(){ const url = api(`task/${id}`); - const resp = await fetch(url,{credentials:'include'}); + const resp = await get(url); if (resp.ok){ yikes(); task = await resp.json(); @@ -132,20 +124,16 @@ loadChildren(); if (task.project_id) loadProject(); if (task.parent_task_id) loadParent(); - } else { - error(resp); - } + } else error(resp); } async function loadProject(){ const url = api(`project/${task.project_id}`); - const resp = await fetch(url,{credentials:'include'}); + const resp = await get(url); if (resp.ok){ project = await resp.json(); yikes(); - } else { - error(await resp.text()); - } + } else error(await resp.text()); } function showClosed(){ @@ -169,11 +157,7 @@ async function update(data){ const url = api(`task/${id}`); - const resp = await fetch(url,{ - credentials : 'include', - method : 'PATCH', - body : JSON.stringify(data) - }); + const resp = await patch(url,data); if (resp.ok){ yikes(); let json = await resp.json();