From ea3d1f6a740454d47d44c3b5e15b8b91c5bb167a Mon Sep 17 00:00:00 2001 From: Stephan Richter Date: Mon, 20 Oct 2025 13:38:08 +0200 Subject: [PATCH] fixed links in project list --- .../srsoftware/umbrella/core/model/Project.java | 2 +- .../srsoftware/umbrella/core/model/Status.java | 16 ++++++++++++++-- frontend/src/routes/project/List.svelte | 15 ++++++++------- web/src/main/resources/web/css/bloodshed.css | 4 ++++ web/src/main/resources/web/css/default.css | 4 ++++ web/src/main/resources/web/css/winter.css | 4 ++++ 6 files changed, 35 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java index 47d82d4..2525c07 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Project.java @@ -98,7 +98,7 @@ public class Project implements Mappable { case DESCRIPTION: description = json.getString(key); break; case NAME: name = json.getString(key); break; case SHOW_CLOSED: showClosed = json.getBoolean(SHOW_CLOSED); break; - case STATUS: status = json.getInt(key); break; + case STATUS: status = json.get(key) instanceof Number state ? json.getInt(key) : Status.matching(json.getString(key)).code(); break; case TAG_COLORS: tagColors.clear(); json.getJSONObject(TAG_COLORS).toMap().forEach((k,v) -> tagColors.put(k,v.toString())); diff --git a/core/src/main/java/de/srsoftware/umbrella/core/model/Status.java b/core/src/main/java/de/srsoftware/umbrella/core/model/Status.java index 5732c91..615d9a9 100644 --- a/core/src/main/java/de/srsoftware/umbrella/core/model/Status.java +++ b/core/src/main/java/de/srsoftware/umbrella/core/model/Status.java @@ -1,14 +1,15 @@ /* © SRSoftware 2025 */ package de.srsoftware.umbrella.core.model; -import static de.srsoftware.umbrella.core.Constants.CODE; -import static de.srsoftware.umbrella.core.Constants.NAME; +import static de.srsoftware.umbrella.core.Constants.*; +import static de.srsoftware.umbrella.core.exceptions.UmbrellaException.invalidFieldException; import de.srsoftware.tools.Mappable; import java.sql.ResultSet; import java.sql.SQLException; import java.util.List; import java.util.Map; +import java.util.stream.Collectors; public record Status(String name, int code) implements Mappable { public static final Status PENDING = new Status("PENDING", 10); // was 40 @@ -18,6 +19,17 @@ public record Status(String name, int code) implements Mappable { public static final Status CANCELLED = new Status("CANCELLED", 100); public static final List PREDEFINED = List.of(OPEN, STARTED, PENDING, COMPLETE, CANCELLED); + public static Status matching(String name){ + return switch (name.toLowerCase()){ + case "pending" -> PENDING; + case "open" -> OPEN; + case "started" -> STARTED; + case "complete" -> COMPLETE; + case "cancelled" -> CANCELLED; + case null, default -> throw invalidFieldException(STATUS,"one of: "+PREDEFINED.stream().map(Status::name).collect(Collectors.joining(", "))); + }; + } + public static Status of(int code){ return switch (code){ case 10 -> PENDING; diff --git a/frontend/src/routes/project/List.svelte b/frontend/src/routes/project/List.svelte index f2a4b56..02bb3ed 100644 --- a/frontend/src/routes/project/List.svelte +++ b/frontend/src/routes/project/List.svelte @@ -53,7 +53,8 @@ function show(e){ e.preventDefault(); - let href = e.target.getAttribute('href'); + let target = e.currentTarget; + let href = target.getAttribute('href'); if (href) router.navigate(href); return false; } @@ -91,18 +92,18 @@ {#each sortedProjects as project} - + {project.name} - + {#if project.company_id && companies[project.company_id]} - {companies[project.company_id].name} + {companies[project.company_id].name} {/if} - + {t("state_"+project.allowed_states[project.status]?.toLowerCase())} - + {#each Object.entries(project.members) as [uid,member]}
{member.user.name}
@@ -110,7 +111,7 @@
- + {#if project.status < 60} diff --git a/web/src/main/resources/web/css/bloodshed.css b/web/src/main/resources/web/css/bloodshed.css index 3321c21..57dde11 100644 --- a/web/src/main/resources/web/css/bloodshed.css +++ b/web/src/main/resources/web/css/bloodshed.css @@ -123,6 +123,10 @@ td, tr{ border-radius: 5px; } +.project.list td:not(.actions){ + cursor: pointer; +} + .project:not(.list) .name, .task .name{ font-size: 32px; diff --git a/web/src/main/resources/web/css/default.css b/web/src/main/resources/web/css/default.css index 3321c21..57dde11 100644 --- a/web/src/main/resources/web/css/default.css +++ b/web/src/main/resources/web/css/default.css @@ -123,6 +123,10 @@ td, tr{ border-radius: 5px; } +.project.list td:not(.actions){ + cursor: pointer; +} + .project:not(.list) .name, .task .name{ font-size: 32px; diff --git a/web/src/main/resources/web/css/winter.css b/web/src/main/resources/web/css/winter.css index 3321c21..57dde11 100644 --- a/web/src/main/resources/web/css/winter.css +++ b/web/src/main/resources/web/css/winter.css @@ -123,6 +123,10 @@ td, tr{ border-radius: 5px; } +.project.list td:not(.actions){ + cursor: pointer; +} + .project:not(.list) .name, .task .name{ font-size: 32px;