diff --git a/frontend/src/views/CalendarView.vue b/frontend/src/views/CalendarView.vue
index 54f594b..898a0fa 100644
--- a/frontend/src/views/CalendarView.vue
+++ b/frontend/src/views/CalendarView.vue
@@ -163,12 +163,22 @@
-
-
- {{ s.username }}
- {{ s.permission === 'readwrite' ? 'Lesen+Schreiben' : 'Lesen' }}
-
-
+
+
+
+ {{ s.username }}
+ {{ s.permission === 'readwrite' ? 'Lesen+Schreiben' : 'Lesen' }}
+
+
+
+
+
+ {{ s.username }}
+
+
+
+
+
@@ -300,6 +310,8 @@ const shareUsername = ref('')
const sharePermission = ref('read')
const shareSearchResults = ref([])
const calendarShares = ref([])
+const editingShareId = ref(null)
+const editSharePermission = ref('read')
let shareSearchTimer = null
const icalPassword = ref('')
const confirmDeleteEvent = ref(false)
@@ -706,6 +718,26 @@ async function loadShares() {
} catch { calendarShares.value = [] }
}
+function startEditShare(s) {
+ editingShareId.value = s.id
+ editSharePermission.value = s.permission
+}
+
+async function saveEditShare(s) {
+ if (!selectedCal.value) return
+ try {
+ await apiClient.post(`/calendars/${selectedCal.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: 5000 })
+ }
+}
+
async function removeShare(shareId) {
if (!selectedCal.value) return
try {
@@ -830,7 +862,8 @@ onMounted(async () => {
.user-result { padding: 0.5rem 0.75rem; cursor: pointer; font-size: 0.875rem; 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; }
.ical-block { border-top: 1px solid var(--p-surface-200); padding-top: 1rem; margin-top: 1rem; }
.ical-url { font-size: 0.8rem; display: flex; gap: 0.5rem; align-items: center; flex-wrap: wrap; }