diff --git a/frontend/src/Components/PermissionEditor.svelte b/frontend/src/Components/PermissionEditor.svelte index 645c9831..f6e0ebd4 100644 --- a/frontend/src/Components/PermissionEditor.svelte +++ b/frontend/src/Components/PermissionEditor.svelte @@ -10,7 +10,7 @@ let { addMember = (entry) => console.log(`no handler for addMember(${entry})`), dropMember = (member) => console.log(`no handler for dropMember(${member})`), - getCandidates = text => {}, + getCandidates = defaultGetCandidates, members, updatePermission = (uid,perm) => console.log(`no handler for updatePermission(${uid}, ${perm})`) } = $props(); @@ -18,6 +18,21 @@ let permissions = $state(null); let sortedMembers = $derived.by(() => Object.values(members).sort((a, b) => a.user.name.localeCompare(b.user.name))); + async function defaultGetCandidates(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 []; + } + } + async function loadPermissions(){ const url = api('task/permissions'); const resp = await fetch(url,{credentials: 'include'}); diff --git a/frontend/src/routes/poll/Edit.svelte b/frontend/src/routes/poll/Edit.svelte index eefddae3..0f810889 100644 --- a/frontend/src/routes/poll/Edit.svelte +++ b/frontend/src/routes/poll/Edit.svelte @@ -4,6 +4,7 @@ import LineEditor from '../../Components/LineEditor.svelte'; import MarkdownEditor from '../../Components/MarkdownEditor.svelte'; + import Permissions from '../../Components/PermissionEditor.svelte'; import { api, get, patch, post } from '../../urls.svelte'; import { error, yikes } from '../../warn.svelte'; @@ -15,6 +16,11 @@ let new_weight = $state({description:'',weight:0}); let poll = $state(null); + function addMember(member){ + for (let [id,name] of Object.entries(member)) update_permissions({user_id:id,permission:1}); + return true; + } + async function load(){ let url = api('poll/'+id); let res = await get(url); @@ -94,6 +100,17 @@ patch_weight(data); } + async function update_permissions(data){ + let url = api(`poll/${id}/permissions`); + let res = await post(url,data); + if (res.ok) { + yikes(); + return true; + } + error(res); + return false; + } + onMount(load); @@ -109,6 +126,10 @@ {t('description')} patch_poll('description',desc)} /> +
+ {t('permissions')} + +
{t('options')}