Merge branch 'refactor/autocomplete' into dev
All checks were successful
Build Docker Image / Docker-Build (push) Successful in 2m19s
Build Docker Image / Clean-Registry (push) Successful in -8s

This commit is contained in:
2026-03-17 08:28:15 +01:00
10 changed files with 122 additions and 94 deletions

View File

@@ -37,9 +37,7 @@
if (resp.ok){
yikes();
const input = await resp.json();
return Object.fromEntries(
Object.entries(input).map(([key, value]) => [key, value.name])
);
return Object.values(input).map(user => {return {...user,display:user.name}});
} else {
error(resp);
return {};

View File

@@ -22,9 +22,7 @@
if (resp.ok){
yikes();
const input = await resp.json();
return Object.fromEntries(
Object.entries(input).map(([key, value]) => [key, value.name])
);
return Object.values(input).map(user => { return {...user, display: user.name}});
} else {
error(resp);
return {};

View File

@@ -20,7 +20,7 @@
let members = $state([]);
function addMember(member){
for (let [id,name] of Object.entries(member)) update_permissions({user_id:+id,permission:4});
update_permissions({user_id:+member.id,permission:4});
return true;
}

View File

@@ -28,9 +28,8 @@
let new_state = $state({code:null,name:null})
let state_available=$derived(new_state.name && new_state.code && !project.allowed_states[new_state.code]);
async function addMember(entry){
const ids = Object.keys(entry);
if (ids) update({new_member:+ids.pop()});
async function addMember(user){
return await update({new_member:+user.id});
}
async function addState(){
@@ -67,21 +66,6 @@
update({drop_member:member.user.id});
}
async function getCandidates(text){
const url = api('user/search');
const resp = await fetch(url,{
credentials : 'include',
method : 'POST',
body : text
});
if (resp.ok){
var json = await resp.json();
return Object.fromEntries(Object.values(json).map(user => [user.id,user.name]));
} else {
return [];
}
}
function handleCreate(evt){
let json = JSON.parse(evt.data);
json.event = 'create';
@@ -242,7 +226,7 @@
</label>
<div class="em">{t('members')}</div>
<div class="em">
<PermissionEditor members={project.members} {updatePermission} {addMember} {dropMember} {getCandidates} />
<PermissionEditor members={project.members} {updatePermission} {addMember} {dropMember} />
</div>
{#if project.allowed_states}
{#each Object.keys(project.allowed_states) as key,idx}

View File

@@ -29,7 +29,8 @@
let router = useTinyRouter();
function addMember(member){
for (let uid of Object.keys(member)) task.members[uid] = project.members[uid];
let uid = member.id;
task.members[uid] = project.members[uid];
}
function flat(json){
@@ -44,10 +45,9 @@
async function getCandidates(text){
const origin = parent_task ? parent_task.members : project.members;
const candidates = Object.values(origin)
return Object.values(origin)
.filter(member => member.user.name.toLowerCase().includes(text.toLowerCase()))
.map(member => [member.user.id,member.user.name]);
return Object.fromEntries(candidates);
.map(member => {return { ...member.user,display:member.user.name}});
}
async function load(){

View File

@@ -37,9 +37,8 @@
router.navigate(`/task/${id}/add_subtask`);
}
async function addMember(entry){
const ids = Object.keys(entry);
if (ids) update({new_member:+ids.pop()});
async function addMember(newMember){
return await update({new_member:+newMember.id});
}
async function addTime(){
@@ -64,10 +63,10 @@
async function getCandidates(text){
const origin = task.parent ? task.parent.members : project.members;
const candidates = Object.values(origin)
return Object.values(origin)
.filter(member => member.user.name.toLowerCase().includes(text.toLowerCase()))
.map(member => [member.user.id,member.user.name]);
return Object.fromEntries(candidates);
.map(member => { return {...member.user,display:member.user.name}});
}
function gotoKanban(){
@@ -177,6 +176,8 @@
});
if (resp.ok){
yikes();
let json = await resp.json();
if (json.members) task.members = json.members;
return true;
} else {
error(resp);

View File

@@ -22,9 +22,8 @@
async function addMember(entry){
let newMembers = JSON.parse(JSON.stringify(page.members));
for (var id of Object.keys(entry)){
if (!newMembers[id]) newMembers[id] = { permission : {name:'READ_ONLY'} };
}
let id = entry.id;
if (!newMembers[id]) newMembers[id] = { permission : {name:'READ_ONLY'} };
return patch({members:newMembers});
}
@@ -74,7 +73,7 @@
});
if (resp.ok){
var json = await resp.json();
return Object.fromEntries(Object.values(json).filter(nonMember).map(user => [user.id,user.name]));
return Object.values(json).filter(nonMember).map(user => { return {...user,display:user.name}});
} else {
return [];
}