implemented interruption of fetch requests if task is clicked in kanban
This commit is contained in:
@@ -22,6 +22,8 @@
|
|||||||
let tasks = $state({});
|
let tasks = $state({});
|
||||||
let users = {};
|
let users = {};
|
||||||
let columns = $derived(project.allowed_states?Object.keys(project.allowed_states).length+1:1);
|
let columns = $derived(project.allowed_states?Object.keys(project.allowed_states).length+1:1);
|
||||||
|
const controller = new AbortController();
|
||||||
|
const signal = controller.signal;
|
||||||
|
|
||||||
$effect(() => updateUrl(filter_input));
|
$effect(() => updateUrl(filter_input));
|
||||||
|
|
||||||
@@ -91,15 +93,20 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function load(){
|
async function load(){
|
||||||
await loadProject();
|
try {
|
||||||
await loadTasks({project_id:+id,parent_task_id:0});
|
await loadProject();
|
||||||
ready = true;
|
await loadTasks({project_id:+id,parent_task_id:0});
|
||||||
loadTags();
|
ready = true;
|
||||||
|
loadTags();
|
||||||
|
} catch (ignored) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadProject(){
|
async function loadProject(){
|
||||||
const url = api(`project/${id}`);
|
const url = api(`project/${id}`);
|
||||||
const resp = await fetch(url,{credentials:'include'});
|
const resp = await fetch(url,{
|
||||||
|
credentials:'include',
|
||||||
|
signal: signal
|
||||||
|
});
|
||||||
if (resp.ok){
|
if (resp.ok){
|
||||||
project = await resp.json();
|
project = await resp.json();
|
||||||
for (var uid of Object.keys(project.members)){
|
for (var uid of Object.keys(project.members)){
|
||||||
@@ -114,12 +121,17 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function loadTag(task){
|
async function loadTag(task){
|
||||||
const url = api(`tags/task/${task.id}`);
|
try {
|
||||||
const resp = await fetch(url,{credentials:'include'});
|
const url = api(`tags/task/${task.id}`);
|
||||||
if (resp.ok) {
|
const resp = await fetch(url,{
|
||||||
const tags = await resp.json();
|
credentials:'include',
|
||||||
if (tags.length) task.tags = tags.sort();
|
signal: signal
|
||||||
}
|
});
|
||||||
|
if (resp.ok) {
|
||||||
|
const tags = await resp.json();
|
||||||
|
if (tags.length) task.tags = tags.sort();
|
||||||
|
}
|
||||||
|
} catch (ignored) {}
|
||||||
}
|
}
|
||||||
|
|
||||||
function loadTags(){
|
function loadTags(){
|
||||||
@@ -138,7 +150,8 @@
|
|||||||
selector.show_closed = true;
|
selector.show_closed = true;
|
||||||
selector.no_index = true;
|
selector.no_index = true;
|
||||||
var resp = await fetch(url,{
|
var resp = await fetch(url,{
|
||||||
credentials : 'include',
|
credentials :'include',
|
||||||
|
signal : signal,
|
||||||
method : 'POST',
|
method : 'POST',
|
||||||
body : JSON.stringify(selector)
|
body : JSON.stringify(selector)
|
||||||
});
|
});
|
||||||
@@ -172,6 +185,11 @@
|
|||||||
highlight = {user:user_id,state:state};
|
highlight = {user:user_id,state:state};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function openTask(task_id){
|
||||||
|
controller.abort();
|
||||||
|
router.navigate(`/task/${task_id}/view`)
|
||||||
|
}
|
||||||
|
|
||||||
onMount(load);
|
onMount(load);
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
@@ -201,12 +219,12 @@
|
|||||||
{#if stateList[state]}
|
{#if stateList[state]}
|
||||||
{#each Object.values(stateList[state]).sort((a,b) => a.name.localeCompare(b.name)) as task}
|
{#each Object.values(stateList[state]).sort((a,b) => a.name.localeCompare(b.name)) as task}
|
||||||
{#if !filter || task.name.toLowerCase().includes(filter) || (task.tags && task.tags.filter(tag => tag.toLowerCase().includes(filter)).length)}
|
{#if !filter || task.name.toLowerCase().includes(filter) || (task.tags && task.tags.filter(tag => tag.toLowerCase().includes(filter)).length)}
|
||||||
<Card onclick={() => router.navigate(`/task/${task.id}/view`)} ondragstart={ev => dragged=task} {task} />
|
<Card onclick={e => openTask(task.id)} ondragstart={ev => dragged=task} {task} />
|
||||||
{/if}
|
{/if}
|
||||||
{/each}
|
{/each}
|
||||||
{/if}
|
{/if}
|
||||||
<div class="add_task">
|
<div class="add_task">
|
||||||
<LineEditor value={t('add_task')} editable={true} onSet={(name) => create(name,uid,state)}/>
|
<LineEditor value={t('add_object',{object:t('task')})} editable={true} onSet={(name) => create(name,uid,state)}/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{/each}
|
{/each}
|
||||||
|
|||||||
@@ -46,7 +46,6 @@
|
|||||||
function updateOn(id){
|
function updateOn(id){
|
||||||
task = null;
|
task = null;
|
||||||
loadTask();
|
loadTask();
|
||||||
console.log(router);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function addChild(){
|
function addChild(){
|
||||||
|
|||||||
Reference in New Issue
Block a user