diff --git a/frontend/src/routes/project/List.svelte b/frontend/src/routes/project/List.svelte
index b8312c0..cfdc338 100644
--- a/frontend/src/routes/project/List.svelte
+++ b/frontend/src/routes/project/List.svelte
@@ -94,8 +94,7 @@
{/if}
show(project.id)} >
-
- {t("state_"+project.allowed_states[project.status].toLowerCase())}
+ {t("state_"+project.allowed_states[project.status]?.toLowerCase())}
|
show(project.id)} >
{#each Object.entries(project.members) as [uid,member]}
diff --git a/frontend/src/routes/task/Index.svelte b/frontend/src/routes/task/Index.svelte
index 5cf5ae8..1188b08 100644
--- a/frontend/src/routes/task/Index.svelte
+++ b/frontend/src/routes/task/Index.svelte
@@ -9,6 +9,10 @@
let projects = $state({});
let router = useTinyRouter();
let tasks = $state(null);
+ let bounds = $state({offset:0,limit:256});
+ let loading = $state(true);
+ let map = $state({});
+ let hidden = $state({});
async function changeState(tid,state){
const task = tasks[tid];
@@ -43,24 +47,37 @@
router.navigate(`/${module}/${id}/view`);
}
- async function load(){
- let url = api('task');
- let resp = await fetch(url,{credentials:'include'});
- let project_ids = {};
+ async function loadProject(pid){
+ const url = api(`project/${pid}`);
+ const resp = await fetch(url,{credentials:'include'});
if (resp.ok){
- tasks = await resp.json();
- for (let task of (Object.values(tasks))) project_ids[task.project_id] = true;
+ projects[pid] = await resp.json();
} else {
error = await resp.text();
}
- for (let pid of Object.keys(project_ids)){
- url = api(`project/${pid}`);
- resp = await fetch(url,{credentials:'include'});
- if (resp.ok){
- projects[pid] = await resp.json();
- } else {
- error = await resp.text();
+ }
+
+ async function load(){
+ const url = api(`task?offset=${bounds.offset}&limit=${bounds.limit}`);
+ const resp = await fetch(url,{credentials:'include'});
+ if (resp.ok){
+ let newTasks = await resp.json();
+ if (bounds.offset == 0) {
+ tasks = newTasks;
+ } else tasks = tasks.concat(newTasks);
+ loading = newTasks.length;
+ if (loading){
+ for (let task of newTasks) {
+ map[task.id] = task;
+ if (task.parent_task_id) hidden[task.parent_task_id] = true;
+ let pid = task.project_id;
+ if (pid && !projects[pid]) await loadProject(pid);
+ }
+ bounds.offset += bounds.limit;
+ load();
}
+ } else {
+ error = await resp.text();
}
}
@@ -80,7 +97,7 @@
|