Knopf „Geteiltes ablegen" blieb dauerhaft stehen: leere Pakete wegräumen, Verwerfen [deploy]
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 13s
All checks were successful
Deploy baustelle-pwa / deploy (push) Successful in 13s
Ein leeres Teilen-Paket in IndexedDB hielt den Knopf für immer stehen (share.html meldete „Es kam nichts an" und ließ den Rest liegen). Die App räumt leere Pakete jetzt selbst weg, share.html ebenso; der Knopf nennt „(Notiz)" bei reinem Text; share.html bietet „Verwerfen" mit Rückfrage in der Seite. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
76592435a3
commit
c7cd2fa461
3 changed files with 49 additions and 8 deletions
19
ROADMAP.md
19
ROADMAP.md
|
|
@ -1,6 +1,6 @@
|
|||
# ROADMAP — Baustelle PWA
|
||||
|
||||
Stand: 2026-10-15 · Gegenstück: `data/bericht` (Modul-Version 1.7.1)
|
||||
Stand: 2026-10-19 · Gegenstück: `data/bericht` (Modul-Version 1.7.1)
|
||||
|
||||
Die PWA hat kein eigenes Backend — alles läuft über `custom/bericht/api/`. Punkte, die eine
|
||||
API-Änderung brauchen, sind mit **[API]** markiert und stehen zusätzlich in der ROADMAP des
|
||||
|
|
@ -31,6 +31,23 @@ Bericht-Moduls.
|
|||
|
||||
---
|
||||
|
||||
## 8. Knopf „Geteiltes ablegen" bleibt dauerhaft stehen (gemeldet 2026-10-19)
|
||||
|
||||
Eddy: *„bei der App Baustelle ist permanent ein Button relativ weit unten angezeigt über den aufgelisteten
|
||||
Aufträgen: Geteiltes ablegen"*.
|
||||
- Ursache: `checkPendingShare()` zeigte den Knopf, sobald IRGENDEIN `shared_payload` in IndexedDB lag — auch ein
|
||||
leeres (Teilen abgebrochen, nichts mitgekommen). `share.html` meldete dann „Es kam nichts an" und ließ den Rest
|
||||
liegen → Knopf für immer. Wer etwas Geteiltes nicht ablegen wollte, kam ebenfalls nicht davon los.
|
||||
- [x] ✅ 19.10.2026: Leere Pakete räumt die App selbst weg (kein Knopf); „Es kam nichts an" löscht den Rest;
|
||||
Knopf zeigt „(Notiz)", wenn nur Text geteilt wurde; `share.html` hat „Verwerfen" mit Rückfrage in der Seite.
|
||||
Auf der Testinstanz durchgespielt (leer → kein Knopf; Notiz → Knopf → Verwerfen → weg).
|
||||
- [ ] Am Handy gegenprüfen: Knopf ist nach dem Update weg (beim ersten Laden räumt die App den leeren Rest ab).
|
||||
|
||||
### Befunde aus der AVIF-Prüfung in Bericht (19.10.2026, nicht geändert)
|
||||
- [ ] Ist eine Maximalgröße für Fotos gesetzt (`photo_maxside` > 0), behält das im Browser verkleinerte JPEG in
|
||||
`app.js` `uploadPhoto` seinen Originalnamen — ein `.avif`/`.webp` wird dann vom Server abgelehnt.
|
||||
- [ ] Beim Verkleinern im Browser (Canvas → JPEG) wird Transparenz schwarz.
|
||||
|
||||
## 7. Galerie-Auswahl: „permission"-Fehler ab dem 3. Foto (gemeldet 2026-09-30)
|
||||
|
||||
Befund (Prod-Zugriffslog 30.09., Auftrag 114 / SO2609-0088, JHB Bio): erster Anlauf 19:40:21 —
|
||||
|
|
|
|||
20
app.js
20
app.js
|
|
@ -1843,21 +1843,29 @@ router.on('/settings', async () => {
|
|||
* bleiben in IndexedDB liegen; ohne diesen Hinweis wuerde sie niemand je wiederfinden. */
|
||||
async function checkPendingShare() {
|
||||
if (document.getElementById('shared-banner')) return;
|
||||
let n = 0, vorhanden = false;
|
||||
let n = 0, notiz = false;
|
||||
try {
|
||||
const p = await idb.get('shared_payload');
|
||||
if (p) { vorhanden = true; n = (p.files || []).length; }
|
||||
else {
|
||||
if (p) {
|
||||
n = (p.files || []).length;
|
||||
notiz = !!((p.title || '').trim() || (p.text || '').trim() || (p.url || '').trim());
|
||||
} else {
|
||||
const alt = await idb.get('shared_files'); // altes Format
|
||||
if (alt && alt.length) { vorhanden = true; n = alt.length; }
|
||||
if (alt && alt.length) n = alt.length;
|
||||
}
|
||||
// Ein Paket OHNE Inhalt (Teilen abgebrochen, nichts mitgekommen) hielt den Knopf für immer
|
||||
// stehen: share.html meldete „Es kam nichts an" und ließ den Rest liegen (Eddy 19.10.2026).
|
||||
if (!n && !notiz) {
|
||||
await idb.del('shared_payload').catch(() => {});
|
||||
await idb.del('shared_files').catch(() => {});
|
||||
return;
|
||||
}
|
||||
} catch (_) { return; }
|
||||
if (!vorhanden) return;
|
||||
|
||||
const b = document.createElement('button');
|
||||
b.id = 'shared-banner';
|
||||
b.className = 'shared-banner';
|
||||
b.textContent = '📤 Geteiltes ablegen' + (n ? ' (' + n + ' Bild' + (n > 1 ? 'er' : '') + ')' : '');
|
||||
b.textContent = '📤 Geteiltes ablegen' + (n ? ' (' + n + ' Bild' + (n > 1 ? 'er' : '') + ')' : ' (Notiz)');
|
||||
b.addEventListener('click', () => { location.href = 'share.html'; });
|
||||
document.body.appendChild(b);
|
||||
}
|
||||
|
|
|
|||
18
share.html
18
share.html
|
|
@ -284,8 +284,9 @@ async function renderPicker() {
|
|||
</div>
|
||||
<div id="share-orders"><div class="loader">Lade Aufträge…</div></div>
|
||||
|
||||
<div class="share-actions">
|
||||
<div class="share-actions" id="share-actions">
|
||||
<button class="btn btn-large" id="btn-store" disabled>Ablegen</button>
|
||||
<button class="btn btn-secondary" id="btn-discard" style="margin-top:10px;width:100%;">Verwerfen</button>
|
||||
</div>
|
||||
`;
|
||||
|
||||
|
|
@ -310,6 +311,19 @@ async function renderPicker() {
|
|||
});
|
||||
|
||||
document.getElementById('btn-store').addEventListener('click', store);
|
||||
// Verwerfen (Eddy 19.10.2026): wer etwas Geteiltes nicht ablegen will, kam bisher nicht mehr
|
||||
// davon los — der Knopf in der App blieb stehen. Rückfrage in der Seite, kein Browser-Dialog.
|
||||
document.getElementById('btn-discard').addEventListener('click', () => {
|
||||
const box = document.getElementById('share-actions');
|
||||
box.innerHTML = `<p class="label" style="margin-bottom:10px;">Geteilte Inhalte wirklich verwerfen? Sie werden nicht abgelegt.</p>
|
||||
<button class="btn btn-large" id="btn-discard-yes">Ja, verwerfen</button>
|
||||
<button class="btn btn-secondary" id="btn-discard-no" style="margin-top:10px;width:100%;">Zurück</button>`;
|
||||
document.getElementById('btn-discard-yes').addEventListener('click', async () => {
|
||||
await clearPayload();
|
||||
location.href = './';
|
||||
});
|
||||
document.getElementById('btn-discard-no').addEventListener('click', () => renderPicker());
|
||||
});
|
||||
bindeKarten(main()); // Schnellzugriff klickbar machen
|
||||
if (vorwahl) waehleAuftrag(vorwahl.id, vorwahl.ref, vorwahl.name, vorwahl.ort);
|
||||
loadOrders('');
|
||||
|
|
@ -387,6 +401,8 @@ async function store() {
|
|||
(async function boot() {
|
||||
payload = await readPayload();
|
||||
if (!payload || (!payload.files.length && !payload.text && !payload.title && !payload.url)) {
|
||||
// Leeren Rest wegräumen — sonst bleibt der Knopf „Geteiltes ablegen" in der App für immer stehen
|
||||
await clearPayload();
|
||||
main().innerHTML = `<div class="empty-state"><div class="icon">📭</div>
|
||||
Es kam nichts an.<br>Teile Bilder oder Text aus WhatsApp erneut mit „Baustelle".
|
||||
<br><button class="btn" style="margin-top:16px;" onclick="location.href='./'">Zur App</button></div>`;
|
||||
|
|
|
|||
Loading…
Reference in a new issue