Fix: Tagebuch Foto-Löschen — null-crash + 404-Cleanup, SW by-v1073
- 'null is not an object (wrap2.remove)': Wrapper-Div hat keine Klasse .diary-media-thumb-wrap → closest() lieferte null. Fallback auf btn.parentElement + Null-Check vor remove() - Bei 404 'Medium nicht gefunden' wird das verwaiste Foto jetzt trotzdem lokal aufgeräumt (entry.media_items + DOM), statt einen Error-Toast zu zeigen. Verwaiste Phantome verschwinden so beim ersten Lösch-Klick.
This commit is contained in:
parent
c03884cb81
commit
e5abdcab62
5 changed files with 26 additions and 18 deletions
|
|
@ -1437,25 +1437,33 @@ window.Page_diary = (() => {
|
|||
wrap.innerHTML = grid;
|
||||
wrap.querySelectorAll('.diary-media-thumb-del').forEach(btn => {
|
||||
btn.addEventListener('click', async () => {
|
||||
const wrap2 = btn.closest('.diary-media-thumb-wrap');
|
||||
const wrap2 = btn.closest('.diary-media-thumb-wrap') || btn.parentElement;
|
||||
const mediaId = btn.dataset.mediaId ? parseInt(btn.dataset.mediaId) : null;
|
||||
const isLegacy = !!btn.dataset.legacy;
|
||||
btn.disabled = true;
|
||||
let alreadyGone = false;
|
||||
try {
|
||||
if (mediaId != null) {
|
||||
await API.diary.deleteMediaItem(_appState.activeDog.id, entry.id, mediaId);
|
||||
// aus entry.media_items entfernen
|
||||
if (entry.media_items) entry.media_items = entry.media_items.filter(m => m.id !== mediaId);
|
||||
} else if (isLegacy) {
|
||||
await API.diary.deleteMedia(_appState.activeDog.id, entry.id);
|
||||
entry.media_url = null;
|
||||
}
|
||||
wrap2.remove();
|
||||
UI.toast.success('Medium entfernt.');
|
||||
} catch (e) {
|
||||
btn.disabled = false;
|
||||
UI.toast.error(e.message || 'Fehler beim Löschen.');
|
||||
if (e?.status === 404) {
|
||||
alreadyGone = true; // serverseitig schon weg → trotzdem lokal aufräumen
|
||||
} else {
|
||||
btn.disabled = false;
|
||||
UI.toast.error(e.message || 'Fehler beim Löschen.');
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (mediaId != null && entry.media_items) {
|
||||
entry.media_items = entry.media_items.filter(m => m.id !== mediaId);
|
||||
} else if (isLegacy) {
|
||||
entry.media_url = null;
|
||||
}
|
||||
if (wrap2) wrap2.remove();
|
||||
UI.toast.success(alreadyGone ? 'Verwaisten Eintrag aufgeräumt.' : 'Medium entfernt.');
|
||||
});
|
||||
});
|
||||
// Stern-Buttons im Edit-Formular
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue