implemented editing members of company

This commit is contained in:
2025-08-08 23:33:04 +02:00
parent 8bc63a8a57
commit ebe0cf7c57
6 changed files with 83 additions and 13 deletions

View File

@@ -3,6 +3,32 @@
import {t} from '../../translations.svelte.js';
import LineEditor from '../../Components/LineEditor.svelte';
import Multiline from '../../Components/MultilineEditor.svelte';
import Users from '../../Components/UserSelector.svelte'
let caption = $state(t('save_object',{object:t('users')}));
let { company } = $props();
let error = $state(null);
let btnEnabled = $state(true);
let memberCopy = $state(JSON.parse(JSON.stringify(company.members)));
async function getCandidates(text){
const url = api('user/search');
const resp = await fetch(url,{
credentials : 'include',
method : 'POST',
body : text
});
if (resp.ok){
error = null;
const input = await resp.json();
return Object.fromEntries(
Object.entries(input).map(([key, value]) => [key, value.name])
);
} else {
error = await resp.text();
return {};
}
}
async function patch(changeSet){
const url = api(`company/${company.id}`)
@@ -12,13 +38,27 @@
body : JSON.stringify(changeSet)
});
if (resp.ok){
const patched = await resp.json();
for (let key of Object.keys(patched)){
console.log('patching '+key+'…');
company[key] = patched[key];
}
return true;
}
error = await resp.text();
return false;
}
let { company } = $props();
async function saveUsers(){
btnEnabled = false;
caption = t('data_sent');
const members = Object.keys(memberCopy).map(Number);
company.members = {};
var success = await patch({members:members});
if (success) caption = t('saved');
btnEnabled = true;
}
</script>
<fieldset>
@@ -60,5 +100,10 @@
<legend>{t('customer_number_prefix')}</legend>
<LineEditor bind:value={company.customer_number_prefix} editable={true} onSet={val => patch({customer_number_prefix:val})} />
</fieldset>
<fieldset>
<legend>{t('members')}</legend>
<Users bind:users={memberCopy} {getCandidates} />
<button onclick={saveUsers} disabled={!btnEnabled} >{caption}</button>
</fieldset>
{/if}
</fieldset>