From 146ea80e4e5ff616f749ffad1298813dfb59e7cd Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Fri, 28 Nov 2025 08:49:51 +0100 Subject: [PATCH] implemented listing users on task index page Signed-off-by: Stephan Richter --- frontend/src/routes/task/Index.svelte | 37 ++++++++++--------- .../srsoftware/umbrella/task/TaskModule.java | 9 ++--- 2 files changed, 22 insertions(+), 24 deletions(-) diff --git a/frontend/src/routes/task/Index.svelte b/frontend/src/routes/task/Index.svelte index 91c0bd2..dc011a9 100644 --- a/frontend/src/routes/task/Index.svelte +++ b/frontend/src/routes/task/Index.svelte @@ -2,7 +2,7 @@ import { onMount } from 'svelte'; import { useTinyRouter } from 'svelte-tiny-router'; - import { api } from '../../urls.svelte.js'; + import { api, get, patch } from '../../urls.svelte.js'; import { error, yikes } from '../../warn.svelte'; import { t } from '../../translations.svelte.js'; @@ -23,16 +23,10 @@ const prj = projects[task.project_id]; const stat = Object.keys(prj.allowed_states).find(k => prj.allowed_states[k] === state); const url = api(`task/${tid}`); - const resp = await fetch(url,{ - credentials : 'include', - method : 'PATCH', - body : JSON.stringify({status:stat}) - }); + const resp = await patch(url,{status:stat}); if (resp.ok){ tasks[idx] = await resp.json(); - } else { - error(resp); - } + } else error(resp); } function abort(idx){ @@ -66,17 +60,15 @@ async function loadProject(pid){ const url = api(`project/${pid}`); - const resp = await fetch(url,{credentials:'include'}); + const resp = await get(url); if (resp.ok){ projects[pid] = await resp.json(); - } else { - error(resp); - } + } else error(resp); } async function load(){ const url = api(`task?offset=${bounds.offset}&limit=${bounds.limit}`); - const resp = await fetch(url,{credentials:'include'}); + const resp = await get(url); if (resp.ok){ let newTasks = await resp.json(); if (bounds.offset == 0) { @@ -93,9 +85,7 @@ bounds.offset += bounds.limit; load(); } - } else { - error(resp); - } + } else error(resp); } function open(idx){ @@ -139,13 +129,14 @@ {t('state')} {t('start_date')} {t('due_date')} + {t('users')} {t('actions')} {#each tasks as task,idx} {#if task.status > 10 && task.status < 60 && !task.no_index && projects[task.project_id]?.status < 60 && !hidden[task.id] && filterApplies(task)} - + go('task',task.id)}>{task.name} go('project',task.project_id)}> {projects[task.project_id]?.name} @@ -162,6 +153,16 @@ {task.due_date} + + + diff --git a/task/src/main/java/de/srsoftware/umbrella/task/TaskModule.java b/task/src/main/java/de/srsoftware/umbrella/task/TaskModule.java index e255c74..2253889 100644 --- a/task/src/main/java/de/srsoftware/umbrella/task/TaskModule.java +++ b/task/src/main/java/de/srsoftware/umbrella/task/TaskModule.java @@ -199,12 +199,9 @@ public class TaskModule extends BaseHandler implements TaskService { } catch (NumberFormatException e) { throw invalidFieldException(LIMIT, "number"); } - Set projectIds = projectService().listUserProjects(user.id(), true).keySet(); - var list = taskDb.listUserTasks(user.id(), limit, offset, false).stream() - .filter(task -> projectIds.contains(task.projectId())) // drop tasks assigned to project we are not member of - .map(Task::toMap) - .toList(); - return sendContent(ex, list); + var tasks = taskDb.listUserTasks(user.id(), limit, offset, false); + var mapped = loadMembers(tasks).stream().map(Task::toMap); + return sendContent(ex, mapped); } @Override