working on project list update by event

This commit is contained in:
2025-12-22 14:42:41 +01:00
parent 2d4def4265
commit c05f5110e4
3 changed files with 18 additions and 7 deletions

View File

@@ -29,7 +29,7 @@ public class MessageApi extends BaseHandler{
addCors(ex); addCors(ex);
Optional<Token> token = SessionToken.from(ex).map(Token::of); Optional<Token> token = SessionToken.from(ex).map(Token::of);
var user = userService().loadUser(token); var user = userService().loadUser(token);
//if (user.isEmpty()) return unauthorized(ex); // TODO if (user.isEmpty()) return unauthorized(ex); // TODO
var headers = ex.getResponseHeaders(); var headers = ex.getResponseHeaders();
var addr = ex.getRemoteAddress(); var addr = ex.getRemoteAddress();

View File

@@ -1,19 +1,26 @@
<script> <script>
import { onMount } from 'svelte'; import { onDestroy, onMount } from 'svelte';
import { useTinyRouter } from 'svelte-tiny-router'; import { useTinyRouter } from 'svelte-tiny-router';
import { api } from '../../urls.svelte.js'; import { api, eventStream } from '../../urls.svelte.js';
import { error, yikes } from '../../warn.svelte'; import { error, yikes } from '../../warn.svelte';
import { t } from '../../translations.svelte.js'; import { t } from '../../translations.svelte.js';
const router = useTinyRouter(); const router = useTinyRouter();
let events = null;
let projects = $state(null); let projects = $state(null);
let companies = $state(null); let companies = $state(null);
let showClosed = $state(router.query.closed == "show"); let showClosed = $state(router.query.closed == "show");
let sortedProjects = $derived.by(() => Object.values(projects).sort((a, b) => a.name.localeCompare(b.name))); let sortedProjects = $derived.by(() => Object.values(projects).sort((a, b) => a.name.localeCompare(b.name)));
function handleUpdate(evt){
let json = JSON.parse(evt.data);
if (json.project) projects[json.project.id] = json.project;
}
async function loadProjects(){ async function loadProjects(){
events = eventStream(handleUpdate,handleUpdate,null);
let url = api('company/list'); let url = api('company/list');
let resp = await fetch(url,{credentials:'include'}); let resp = await fetch(url,{credentials:'include'});
if (resp.ok){ if (resp.ok){
@@ -66,6 +73,9 @@
} }
onMount(loadProjects); onMount(loadProjects);
onDestroy(() => {
if (events) events.close();
})
</script> </script>
<svelte:head> <svelte:head>

View File

@@ -13,6 +13,7 @@ import static de.srsoftware.umbrella.core.model.Permission.OWNER;
import static de.srsoftware.umbrella.core.model.Status.OPEN; import static de.srsoftware.umbrella.core.model.Status.OPEN;
import static de.srsoftware.umbrella.core.model.Status.PREDEFINED; import static de.srsoftware.umbrella.core.model.Status.PREDEFINED;
import static de.srsoftware.umbrella.messagebus.MessageBus.messageBus; import static de.srsoftware.umbrella.messagebus.MessageBus.messageBus;
import static de.srsoftware.umbrella.messagebus.events.Event.EventType.CREATE;
import static de.srsoftware.umbrella.messagebus.events.Event.EventType.UPDATE; import static de.srsoftware.umbrella.messagebus.events.Event.EventType.UPDATE;
import static de.srsoftware.umbrella.project.Constants.CONFIG_DATABASE; import static de.srsoftware.umbrella.project.Constants.CONFIG_DATABASE;
import static java.lang.Boolean.TRUE; import static java.lang.Boolean.TRUE;
@@ -256,7 +257,7 @@ public class ProjectModule extends BaseHandler implements ProjectService {
var tagList = arr.toList().stream().filter(elem -> elem instanceof String).map(String.class::cast).toList(); var tagList = arr.toList().stream().filter(elem -> elem instanceof String).map(String.class::cast).toList();
tagService().save(PROJECT,prj.id(),null,tagList); tagService().save(PROJECT,prj.id(),null,tagList);
} }
messageBus().dispatch(new ProjectEvent(user,prj, CREATE));
return sendContent(ex,prj); return sendContent(ex,prj);
} }