diff --git a/frontend/src/views/TasksView.vue b/frontend/src/views/TasksView.vue
index dfd57d2..7c79d34 100644
--- a/frontend/src/views/TasksView.vue
+++ b/frontend/src/views/TasksView.vue
@@ -127,11 +127,20 @@
-
- {{ s.username }}
- {{ s.permission === 'readwrite' ? 'Lesen+Schreiben' : 'Lesen' }}
-
-
+
+
+ {{ s.username }}
+ {{ s.permission === 'readwrite' ? 'Lesen+Schreiben' : 'Lesen' }}
+
+
+
+
+ {{ s.username }}
+
+
+
+
+
@@ -248,8 +257,31 @@ const shareUsername = ref('')
const sharePermission = ref('read')
const listShares = ref([])
const shareSearchResults = ref([])
+const editingShareId = ref(null)
+const editSharePermission = ref('read')
let shareSearchTimer = null
+function startEditShare(s) {
+ editingShareId.value = s.id
+ editSharePermission.value = s.permission
+}
+
+async function saveEditShare(s) {
+ if (!menuList.value) return
+ try {
+ await apiClient.post(`/tasklists/${menuList.value.id}/share`, {
+ username: s.username,
+ permission: editSharePermission.value,
+ })
+ editingShareId.value = null
+ await loadShares()
+ toast.add({ severity: 'success', summary: 'Berechtigung aktualisiert', life: 2500 })
+ } catch (err) {
+ toast.add({ severity: 'error', summary: 'Fehler',
+ detail: err.response?.data?.error || err.message, life: 4000 })
+ }
+}
+
function onShareSearch() {
clearTimeout(shareSearchTimer)
const q = shareUsername.value.trim()
@@ -655,7 +687,8 @@ watch(selectedListId, loadTasks)
display: flex; gap: 0.5rem; align-items: center; }
.user-result:hover { background: var(--p-primary-50); }
.existing-shares { margin-top: 0.5rem; }
-.share-perm-item { display: flex; align-items: center; gap: 0.5rem; padding: 0.375rem 0; font-size: 0.875rem; }
+.share-perm-item { display: flex; align-items: center; gap: 0.5rem; padding: 0.375rem 0; font-size: 0.875rem; flex-wrap: wrap; }
+.share-perm-item.editing { background: var(--p-surface-50); padding: 0.5rem; border-radius: 4px; }
.perm-label { color: var(--p-text-muted-color); font-size: 0.75rem; }
.url-row { display: flex; gap: 0.5rem; align-items: center; flex-wrap: wrap; }
.url-row strong { min-width: 110px; font-size: 0.8rem; }