finished project tree update on task edit, added update of task view on task edit

This commit is contained in:
2025-12-20 16:29:16 +01:00
parent 5a1c8e1438
commit c05f24cd7c
4 changed files with 34 additions and 13 deletions

View File

@@ -131,7 +131,6 @@
} }
function handleDeleteEvent(evt){ function handleDeleteEvent(evt){
console.log('delete task');
handleEvent(evt,'delete'); handleEvent(evt,'delete');
} }

View File

@@ -187,6 +187,16 @@
window.open(`/time?project=${id}`, '_blank').focus(); window.open(`/time?project=${id}`, '_blank').focus();
} }
$effect(() => {
if (lastEvent && lastEvent.task) {
if (lastEvent.event == 'delete' || lastEvent.task.parent_task_id){
delete tasks[lastEvent.task.id];
} else {
tasks[lastEvent.task.id] = lastEvent.task;
}
}
});
onMount(load); onMount(load);
onDestroy(() => { onDestroy(() => {
if (eventSource) eventSource.close(); if (eventSource) eventSource.close();

View File

@@ -54,7 +54,7 @@
if (resp.ok){ if (resp.ok){
deleted = true; deleted = true;
} else { } else {
error(resp); error(resp);
} }
} }
} }
@@ -76,8 +76,7 @@
body : JSON.stringify({ parent_task_id : task.id}) body : JSON.stringify({ parent_task_id : task.id})
}); });
if (resp.ok) { if (resp.ok) {
children[dragged.element.id]=dragged.element; yikes();
if (dragged.siblings[dragged.element.id]) delete dragged.siblings[dragged.element.id];
} else { } else {
error(resp); error(resp);
} }
@@ -143,13 +142,11 @@
} }
$effect(() => { $effect(() => {
if (lastEvent && lastEvent.task) { if (children && lastEvent && lastEvent.task) {
if (children && lastEvent.task.parent_task_id == task.id) { if (lastEvent.event == 'delete' || lastEvent.task.parent_task_id != task.id){
if (lastEvent.event == 'delete'){ delete children[lastEvent.task.id];
delete children[lastEvent.task.id]; } else {
} else { children[lastEvent.task.id] = lastEvent.task;
children[lastEvent.task.id] = lastEvent.task;
}
} }
} }
}); });

View File

@@ -1,8 +1,8 @@
<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'; import { api, eventStream } from '../../urls.svelte';
import { error, yikes } from '../../warn.svelte'; import { error, yikes } from '../../warn.svelte';
import { t } from '../../translations.svelte'; import { t } from '../../translations.svelte';
import { timetrack } from '../../user.svelte.js'; import { timetrack } from '../../user.svelte.js';
@@ -17,6 +17,7 @@
import TagList from '../tags/TagList.svelte'; import TagList from '../tags/TagList.svelte';
import TaskList from './TaskList.svelte'; import TaskList from './TaskList.svelte';
let eventSource = null;
let { id } = $props(); let { id } = $props();
let children = $state(null); let children = $state(null);
let dummy = $derived(updateOn(id)); let dummy = $derived(updateOn(id));
@@ -82,6 +83,15 @@
router.navigate(`/project/${project.id}/view`) router.navigate(`/project/${project.id}/view`)
} }
function handleUpdateEvent(evt){
let json = JSON.parse(evt.data);
if (json.task && json.task.id == id) updateOn(id);
}
function load(){
eventSource = eventStream(null,handleUpdateEvent,null);
}
async function loadChildren(){ async function loadChildren(){
const url = api('task/list'); const url = api('task/list');
const data = { const data = {
@@ -199,6 +209,11 @@
members[user_id] = permission.code; members[user_id] = permission.code;
update({members:members}); update({members:members});
} }
onDestroy(() => {
if (eventSource) eventSource.close();
});
onMount(load);
</script> </script>
<svelte:head> <svelte:head>