implemented various task features:
- saving on CTRL+S
- editing of
- start date
- due date
- members
This commit is contained in:
@@ -75,6 +75,14 @@
|
||||
return Object.fromEntries(candidates);
|
||||
}
|
||||
|
||||
|
||||
function onkeydown(e){
|
||||
if (e.ctrlKey && e.keyCode === 83) {
|
||||
e.preventDefault();
|
||||
saveTask();
|
||||
}
|
||||
}
|
||||
|
||||
async function saveTask(){
|
||||
var url = api('task/add');
|
||||
const resp = await fetch(url,{
|
||||
@@ -103,7 +111,7 @@
|
||||
|
||||
<fieldset>
|
||||
<legend>{t('add_task')}</legend>
|
||||
<table>
|
||||
<table {onkeydown}>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th>
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
import TaskList from '../../Components/TaskList.svelte';
|
||||
import MarkdownEditor from '../../Components/MarkdownEditor.svelte';
|
||||
import StateSelector from '../../Components/StateSelector.svelte';
|
||||
import MemberEditor from '../../Components/MemberEditor.svelte';
|
||||
|
||||
const router = useTinyRouter();
|
||||
let { id } = $props();
|
||||
@@ -21,6 +22,24 @@
|
||||
|
||||
$effect(() => updateOn(id));
|
||||
|
||||
async function addMember(entry){
|
||||
const ids = Object.keys(entry);
|
||||
if (ids) update({new_member:+ids.pop()});
|
||||
}
|
||||
|
||||
async function dropMember(member){
|
||||
update({drop_member:member.user.id});
|
||||
}
|
||||
|
||||
async function getCandidates(text){
|
||||
const origin = task.parent ? task.parent.members : project.members;
|
||||
const candidates = Object.values(origin)
|
||||
.filter(member => member.user.name.toLowerCase().includes(text.toLowerCase()))
|
||||
.map(member => [member.user.id,member.user.name]);
|
||||
return Object.fromEntries(candidates);
|
||||
}
|
||||
|
||||
|
||||
function updateOn(id){
|
||||
loadTask();
|
||||
}
|
||||
@@ -108,6 +127,7 @@
|
||||
});
|
||||
if (resp.ok){
|
||||
error = null;
|
||||
task = await resp.json();
|
||||
return true;
|
||||
} else {
|
||||
error = await resp.text();
|
||||
@@ -118,6 +138,12 @@
|
||||
function updateClosed(){
|
||||
if (update({show_closed:task.show_closed})) setTimeout(loadTask,50);
|
||||
}
|
||||
|
||||
function updatePermission(user_id,permission){
|
||||
let members = {};
|
||||
members[user_id] = permission.code;
|
||||
update({members:members});
|
||||
}
|
||||
</script>
|
||||
|
||||
{#if error}
|
||||
@@ -200,6 +226,14 @@
|
||||
</label>
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
{t('members')}
|
||||
</th>
|
||||
<td>
|
||||
<MemberEditor members={task.members} {updatePermission} {addMember} {dropMember} {getCandidates} />
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>
|
||||
{t('start_date')}
|
||||
|
||||
Reference in New Issue
Block a user