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 f5a84dc..6c7559b 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
@@ -72,7 +72,7 @@ public class Project implements Mappable {
switch (key){
case DESCRIPTION: description = json.getString(key); break;
case NAME: name = json.getString(key); break;
- case STATUS: status = Status.of(json.getInt(key)); break;
+ case STATUS: status = json.get(key) instanceof Number number ? Status.of(number.intValue()) : Status.valueOf(json.getString(key)); break;
default: key = null;
}
if (key != null) dirtyFields.add(key);
diff --git a/frontend/public/fontawesome-webfont.woff b/frontend/public/fontawesome-webfont.woff
new file mode 100644
index 0000000..839528c
Binary files /dev/null and b/frontend/public/fontawesome-webfont.woff differ
diff --git a/frontend/src/Components/CompanySelector.svelte b/frontend/src/Components/CompanySelector.svelte
index a93f522..c34d166 100644
--- a/frontend/src/Components/CompanySelector.svelte
+++ b/frontend/src/Components/CompanySelector.svelte
@@ -6,6 +6,8 @@
let companies = $state(null);
let value = 0;
+ let sortedCompanies = $derived.by(() => Object.values(companies).sort((a, b) => a.name.localeCompare(b.name)));
+
async function loadCompanies(){
const url = `${location.protocol}//${location.host.replace('5173','8080')}/api/company/list`;
var resp = await fetch(url,{ credentials: 'include'});
@@ -27,8 +29,8 @@
{#if companies}
{:else}
diff --git a/frontend/src/routes/project/Create.svelte b/frontend/src/routes/project/Create.svelte
index 7800492..15bb22e 100644
--- a/frontend/src/routes/project/Create.svelte
+++ b/frontend/src/routes/project/Create.svelte
@@ -26,7 +26,8 @@
body: JSON.stringify(project)
});
if (resp.ok){
- router.navigate('/project');
+ var newProject = await resp.json();
+ router.navigate(`/project/${newProject.id}/view`);
} else {
error = await resp.text();
}
diff --git a/frontend/src/routes/project/List.svelte b/frontend/src/routes/project/List.svelte
index 377b0d7..5f13f8b 100644
--- a/frontend/src/routes/project/List.svelte
+++ b/frontend/src/routes/project/List.svelte
@@ -7,6 +7,7 @@
let error = $state(null);
let projects = $state(null);
let companies = $state(null);
+ let showClosed = $state(router.query.closed == "show");
let sortedProjects = $derived.by(() => Object.values(projects).sort((a, b) => a.name.localeCompare(b.name)));
@@ -16,7 +17,11 @@
if (resp.ok){
companies = await resp.json();
url = `${location.protocol}//${location.host.replace('5173','8080')}/api/project/list`;
- resp = await fetch(url,{credentials:'include'});
+ resp = await fetch(url,{
+ credentials:'include',
+ method:'POST',
+ body:JSON.stringify({show_closed:showClosed})
+ });
if (resp.ok){
projects = await resp.json();
} else {
@@ -27,6 +32,31 @@
}
}
+ async function setState(pid,state_name){
+ const url = `${location.protocol}//${location.host.replace('5173','8080')}/api/project/${pid}`;
+ const resp = await fetch(url,{
+ credentials:'include',
+ method:'PATCH',
+ body:JSON.stringify({status:state_name})
+ });
+ if (resp.ok){
+ var prj = await resp.json();
+ projects[prj.id].status = prj.status;
+ } else {
+ error = await resp.text();
+ }
+ }
+
+ function show(pid){
+ router.navigate(`/project/${pid}/view`)
+ }
+
+ function toggleClosed(){
+ router.navigate(showClosed?'/project':'/project?closed=show');
+ showClosed = !showClosed;
+ loadProjects();
+ }
+
onMount(loadProjects);
@@ -36,10 +66,11 @@