feat: Freigaben-Aenderung live + "Ordner nicht mehr verfuegbar"-Handling
Backend: set_permission und remove_permission feuern jetzt ein SSE-Event vom Typ 'permission' an Target-User + Owner + weitere Share-Empfaenger. Damit aktualisieren sich die Dateilisten aller Beteiligten in Echtzeit - auch beim Betroffenen, der gerade seinen Zugriff verliert. Frontend: FilesView wrapped loadFiles in safeLoadCurrentFolder(). Bei 403/404 erscheint ein Toast "Dieser Ordner wurde geloescht oder die Freigabe wurde entfernt" und nach 600ms wird zurueck zum Root navigiert. Greift beim Direktaufruf, beim Ordnerwechsel und bei durch SSE ausgeloesten Auto-Reloads. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -764,8 +764,26 @@ async function doDelete() {
|
||||
}
|
||||
}
|
||||
|
||||
async function safeLoadCurrentFolder() {
|
||||
try {
|
||||
await filesStore.loadFiles(currentParentId())
|
||||
} catch (err) {
|
||||
const status = err.response?.status
|
||||
if (status === 403 || status === 404) {
|
||||
toast.add({
|
||||
severity: 'warn',
|
||||
summary: 'Kein Zugriff',
|
||||
detail: 'Dieser Ordner wurde geloescht oder die Freigabe wurde entfernt.',
|
||||
life: 5000,
|
||||
})
|
||||
// Redirect to root after short delay so user sees the toast
|
||||
setTimeout(() => router.push('/files'), 600)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
watch(() => route.params.folderId, () => {
|
||||
filesStore.loadFiles(currentParentId())
|
||||
safeLoadCurrentFolder()
|
||||
})
|
||||
|
||||
// Live updates: subscribe to server-sent events so that lock changes /
|
||||
@@ -778,12 +796,12 @@ function scheduleReload() {
|
||||
if (reloadDebounce) return
|
||||
reloadDebounce = setTimeout(() => {
|
||||
reloadDebounce = null
|
||||
filesStore.loadFiles(currentParentId())
|
||||
safeLoadCurrentFolder()
|
||||
}, 300)
|
||||
}
|
||||
|
||||
onMounted(() => {
|
||||
filesStore.loadFiles(currentParentId())
|
||||
safeLoadCurrentFolder()
|
||||
|
||||
if (auth.accessToken) {
|
||||
const url = `/api/sync/events?token=${encodeURIComponent(auth.accessToken)}`
|
||||
|
||||
Reference in New Issue
Block a user