improvement: inheriting tags from project and parent tasks
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
import MarkdownEditor from '../../Components/MarkdownEditor.svelte';
|
import MarkdownEditor from '../../Components/MarkdownEditor.svelte';
|
||||||
import MemberEditor from '../../Components/MemberEditor.svelte';
|
import MemberEditor from '../../Components/MemberEditor.svelte';
|
||||||
|
import Tags from '../tags/TagList.svelte';
|
||||||
|
|
||||||
let { project_id = null, parent_task_id } = $props();
|
let { project_id = null, parent_task_id } = $props();
|
||||||
let error = $state(null);
|
let error = $state(null);
|
||||||
@@ -17,12 +18,13 @@
|
|||||||
let task = $state({
|
let task = $state({
|
||||||
name : '',
|
name : '',
|
||||||
description : { source : '', rendered : '' },
|
description : { source : '', rendered : '' },
|
||||||
members : {},
|
|
||||||
estimated_time: null,
|
|
||||||
start_date: null,
|
|
||||||
due_date: null,
|
due_date: null,
|
||||||
|
estimated_time: null,
|
||||||
|
no_index: false,
|
||||||
|
members : {},
|
||||||
show_closed: false,
|
show_closed: false,
|
||||||
no_index: false
|
start_date: null,
|
||||||
|
tags: []
|
||||||
});
|
});
|
||||||
let router = useTinyRouter();
|
let router = useTinyRouter();
|
||||||
|
|
||||||
@@ -38,6 +40,7 @@
|
|||||||
async function load(){
|
async function load(){
|
||||||
if (parent_task_id) await loadParent();
|
if (parent_task_id) await loadParent();
|
||||||
if (project_id) loadProject();
|
if (project_id) loadProject();
|
||||||
|
loadTags();
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadParent(){
|
async function loadParent(){
|
||||||
@@ -68,6 +71,16 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function loadTags(){
|
||||||
|
let url = null;
|
||||||
|
if (project_id) url = api(`tags/project/${project_id}`);
|
||||||
|
if (parent_task_id) url = api(`tags/task/${parent_task_id}`);
|
||||||
|
if (url) {
|
||||||
|
const resp = await fetch(url,{credentials:'include'});
|
||||||
|
if (resp.ok) task.tags = await resp.json();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
async function getCandidates(text){
|
async function getCandidates(text){
|
||||||
const origin = parent_task ? parent_task.members : project.members;
|
const origin = parent_task ? parent_task.members : project.members;
|
||||||
const candidates = Object.values(origin)
|
const candidates = Object.values(origin)
|
||||||
@@ -154,6 +167,14 @@
|
|||||||
<MarkdownEditor bind:value={task.description} simple={true} />
|
<MarkdownEditor bind:value={task.description} simple={true} />
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<th>
|
||||||
|
{t('tags')}
|
||||||
|
</th>
|
||||||
|
<td>
|
||||||
|
<Tags module="task" bind:tags={task.tags} />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
{#if extendedSettings}
|
{#if extendedSettings}
|
||||||
<tr>
|
<tr>
|
||||||
<th>
|
<th>
|
||||||
|
|||||||
@@ -29,6 +29,8 @@ import de.srsoftware.umbrella.core.model.Token;
|
|||||||
import de.srsoftware.umbrella.core.model.UmbrellaUser;
|
import de.srsoftware.umbrella.core.model.UmbrellaUser;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
|
import org.json.JSONArray;
|
||||||
import org.json.JSONObject;
|
import org.json.JSONObject;
|
||||||
|
|
||||||
public class TaskModule extends BaseHandler implements TaskService {
|
public class TaskModule extends BaseHandler implements TaskService {
|
||||||
@@ -312,9 +314,9 @@ public class TaskModule extends BaseHandler implements TaskService {
|
|||||||
var permission = nested.has(CODE) ? Permission.of(nested.getInt(CODE)) : Permission.valueOf(nested.getString(NAME));
|
var permission = nested.has(CODE) ? Permission.of(nested.getInt(CODE)) : Permission.valueOf(nested.getString(NAME));
|
||||||
taskDb.setMember(task.id(),userId,permission);
|
taskDb.setMember(task.id(),userId,permission);
|
||||||
}
|
}
|
||||||
if (isSet(task.parentTaskId())){
|
if (json.has(TAGS) && json.get(TAGS) instanceof JSONArray arr){
|
||||||
var tagList = tags.getTags(TASK,task.parentTaskId(),user);
|
var tagList = arr.toList().stream().filter(e -> e instanceof String).map(String.class::cast).toList();
|
||||||
tags.save(TASK,task.id(),memberIds,tagList);
|
tags.save(TASK,task.id(),null,tagList);
|
||||||
}
|
}
|
||||||
return sendContent(ex,loadMembers(task));
|
return sendContent(ex,loadMembers(task));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ body {
|
|||||||
font-family: sans;
|
font-family: sans;
|
||||||
background: black;
|
background: black;
|
||||||
color: orange;
|
color: orange;
|
||||||
margin: 0;
|
margin: 0 0 40px 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
fieldset {
|
fieldset {
|
||||||
|
|||||||
Reference in New Issue
Block a user