From 8b7ad60a3812fc51db5dbc6c68bc54c36a10830d Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Sun, 27 Jul 2025 13:27:02 +0200 Subject: [PATCH] fine-tuning kanban Signed-off-by: Stephan Richter --- .../srsoftware/umbrella/core/model/Task.java | 3 ++- frontend/src/routes/project/Kanban.svelte | 6 +++-- frontend/src/routes/project/KanbanCard.svelte | 7 ++++++ web/src/main/resources/web/css/default.css | 25 ++++++++++++++++++- 4 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 frontend/src/routes/project/KanbanCard.svelte diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/Task.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Task.java index 0cba95d..9edb106 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/Task.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Task.java @@ -152,14 +152,15 @@ public class Task implements Mappable { case DESCRIPTION: description = json.getString(key); break; case DUE_DATE: dueDate = json.isNull(DUE_DATE) || json.getString(DUE_DATE).isBlank() ? null : LocalDate.parse(json.getString(DUE_DATE)); break; case ESTIMATED_TIME: estimatedTime = json.isNull(ESTIMATED_TIME) ? null : json.getDouble(ESTIMATED_TIME); break; + case MEMBERS: continue; case NAME: name = json.getString(key); break; case NO_INDEX: noIndex = json.getBoolean(NO_INDEX); break; case SHOW_CLOSED: showClosed = json.getBoolean(SHOW_CLOSED); break; case START_DATE: start = json.isNull(START_DATE) || json.getString(START_DATE).isBlank() ? null : LocalDate.parse(json.getString(START_DATE)); break; case STATUS: status = json.get(key) instanceof Number number ? Status.of(number.intValue()) : Status.valueOf(json.getString(key)); break; default: { - key = null; LOG.log(WARNING,"Tried to patch field ''{0}'' of task, which is not implemented!",key); + key = null; } } if (key != null) dirtyFields.add(key); diff --git a/frontend/src/routes/project/Kanban.svelte b/frontend/src/routes/project/Kanban.svelte index 90e6cdf..0ab2208 100644 --- a/frontend/src/routes/project/Kanban.svelte +++ b/frontend/src/routes/project/Kanban.svelte @@ -5,6 +5,8 @@ import { api } from '../../urls.svelte.js'; import { t } from '../../translations.svelte.js'; + import Card from './KanbanCard.svelte'; + let { id } = $props(); let error = $state(null); @@ -146,7 +148,7 @@ {error} {/if} -
+
{t('user')}
{#if states} {#each Object.entries(states) as [sid,state]} @@ -159,7 +161,7 @@
hover(ev,user,state)} ondrop={ev => drop(user,state)} > {#if stateList[state]} {#each Object.values(stateList[state]).sort((a,b) => a.name.localeCompare(b.name)) as task} -
router.navigate(`/task/${task.id}/view`)} ondragstart={ev => dragged=task} >{task.name}
+ router.navigate(`/task/${task.id}/view`)} ondragstart={ev => dragged=task} {task} /> {/each} {/if}
diff --git a/frontend/src/routes/project/KanbanCard.svelte b/frontend/src/routes/project/KanbanCard.svelte new file mode 100644 index 0000000..42eb929 --- /dev/null +++ b/frontend/src/routes/project/KanbanCard.svelte @@ -0,0 +1,7 @@ + + +
+{task.name} +
\ No newline at end of file diff --git a/web/src/main/resources/web/css/default.css b/web/src/main/resources/web/css/default.css index e0d7903..a58abee 100644 --- a/web/src/main/resources/web/css/default.css +++ b/web/src/main/resources/web/css/default.css @@ -141,4 +141,27 @@ textarea{ color: white; background: #333; font-weight: black; -} \ No newline at end of file +} + +.kanban .box, +.kanban .head, +.kanban .user{ + border-radius: 5px; + margin: 2px; + min-height: 50px; + color: black; + padding: 2px; + } +.kanban .box{ + background: orange; + } +.kanban .head, +.kanban .user{ + background: black; + border: 1px solid orange; + color: orange; + text-align: center; + } +.kanban .highlight{ + background: #4b3000; + } \ No newline at end of file