solved issues when moving tasks
This commit is contained in:
@@ -70,6 +70,10 @@ public class Task implements Mappable {
|
||||
return estimatedTime;
|
||||
}
|
||||
|
||||
public boolean hasMember(UmbrellaUser user) {
|
||||
return members.containsKey(user.id());
|
||||
}
|
||||
|
||||
public long id(){
|
||||
return id;
|
||||
}
|
||||
@@ -215,8 +219,9 @@ public class Task implements Mappable {
|
||||
return map;
|
||||
}
|
||||
|
||||
public boolean hasMember(UmbrellaUser user) {
|
||||
return members.containsKey(user.id());
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return name;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
let {
|
||||
estimated_time,
|
||||
show_closed,
|
||||
siblings,
|
||||
task
|
||||
} = $props();
|
||||
let children = $state(null);
|
||||
@@ -39,34 +40,25 @@
|
||||
}
|
||||
}
|
||||
|
||||
function drag(ev,task){
|
||||
function ondragstart(ev){
|
||||
ev.stopPropagation();
|
||||
task.new_parent = false;
|
||||
dragged.element = task;
|
||||
dragged.element = task;
|
||||
dragged.siblings = siblings;
|
||||
}
|
||||
|
||||
function dragend(ev,task){
|
||||
ev.stopPropagation();
|
||||
setTimeout(() => {
|
||||
if (dragged.moved){
|
||||
console.log("removing",ev.target);
|
||||
ev.target.remove();
|
||||
}
|
||||
},500);
|
||||
}
|
||||
|
||||
async function dropAt(ev,target){
|
||||
async function ondrop(ev){
|
||||
ev.stopPropagation();
|
||||
if (dragged.element.id == target.id) return;
|
||||
if (dragged.element.id == task.id) return;
|
||||
const url = api(`task/${dragged.element.id}`);
|
||||
const resp = await fetch(url,{
|
||||
credentials : 'include',
|
||||
method : 'PATCH',
|
||||
body : JSON.stringify({ parent_task_id : target.id})
|
||||
body : JSON.stringify({ parent_task_id : task.id})
|
||||
});
|
||||
if (resp.ok) {
|
||||
dragged.moved = true;
|
||||
children[dragged.element.id]=dragged.element;
|
||||
if (dragged.siblings[dragged.element.id]) delete dragged.siblings[dragged.element.id];
|
||||
} else {
|
||||
error = await resp.text();
|
||||
}
|
||||
@@ -125,7 +117,7 @@
|
||||
</script>
|
||||
|
||||
{#if !deleted}
|
||||
<li draggable="true" ondrop={ev => dropAt(ev, task)} ondragover={e => e.preventDefault()} ondragend={e => dragend(e,task)} ondragstart={e => drag(e,task)} class="task {task.status.name.toLowerCase()}">
|
||||
<li draggable="true" {ondrop} ondragover={e => e.preventDefault()} {ondragstart} class="task {task.status.name.toLowerCase()}">
|
||||
<LineEditor bind:value={task.name} onclick={openTask} editable={true} onSet={setName} type="a" />
|
||||
{#if task.estimated_time}
|
||||
<span class="estimated_time">({+task.estimated_time} h)</span>
|
||||
|
||||
@@ -10,6 +10,6 @@
|
||||
|
||||
<ul>
|
||||
{#each sortedTasks as task}
|
||||
<ListTask {task} {estimated_time} show_closed={show_closed || task.show_closed} />
|
||||
<ListTask {task} siblings={tasks} {estimated_time} show_closed={show_closed || task.show_closed} />
|
||||
{/each}
|
||||
</ul>
|
||||
@@ -277,12 +277,22 @@ public class TaskModule extends BaseHandler implements TaskService {
|
||||
if (json.has(DROP_MEMBER) && json.get(DROP_MEMBER) instanceof Number id) dropMember(task,id.longValue());
|
||||
if (json.has(MEMBERS) && json.get(MEMBERS) instanceof JSONObject memberJson) patchMembers(task,memberJson);
|
||||
if (json.has(NEW_MEMBER) && json.get(NEW_MEMBER) instanceof Number num) addMember(task,num.longValue());
|
||||
|
||||
if (json.has(PARENT_TASK_ID) && json.get(PARENT_TASK_ID) instanceof Number ptid && newParentIsSubtask(task,ptid.longValue())) throw forbidden("Task must not be sub-task of itself.");
|
||||
taskDb.save(task.patch(json));
|
||||
|
||||
return sendContent(ex,task);
|
||||
}
|
||||
|
||||
private boolean newParentIsSubtask(Task task, long newParent) {
|
||||
var parent = taskDb.load(newParent);
|
||||
while (parent != null){
|
||||
if (task.id() == parent.id()) return true;
|
||||
if (parent.parentTaskId() == null) break;
|
||||
parent = taskDb.load(parent.parentTaskId());
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
private boolean postNewTask(UmbrellaUser user, HttpExchange ex) throws IOException {
|
||||
var json = json(ex);
|
||||
if (!(json.has(PROJECT_ID) && json.get(PROJECT_ID) instanceof Number pid)) throw missingFieldException(PROJECT_ID);
|
||||
|
||||
Reference in New Issue
Block a user