# Auf dem Handy kann kein Widget zu einem Dashboard hinzugefügt werden

**URL:** <https://community.gladysassistant.com/t/sur-mobile-impossible-dajouter-un-widget-sur-un-dashboard/10726>\
**Category:** Configuration\
**Tags:** v5\
**Created:** [28. August 2026 um 08:41 UTC](https://community.gladysassistant.com/t/sur-mobile-impossible-dajouter-un-widget-sur-un-dashboard/10726 "2026-08-28T08:41:36Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![StephaneB](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/stephaneb/32/15443_2.png) [@StephaneB](https://community.gladysassistant.com/u/StephaneB)\
**Post date:** [28. August 2026 um 08:41 UTC](https://community.gladysassistant.com/t/sur-mobile-impossible-dajouter-un-widget-sur-un-dashboard/10726/1 "2026-08-28T08:41:36Z")

</div>

@pierre-gilles Mit der Version 5 auf meinem iPhone, wenn ich ein Dashboard bearbeite und ein Widget hinzufügen möchte, erscheint der Widget-Auswahlbildschirm, aber Gladys reagiert nicht mehr: Wenn ich auf einen Widget-Namen klicke, wird es nicht hinzugefügt, und wenn ich auf „Abbrechen“ oder „Speichern“ klicke, schließt sich der Bildschirm nicht…

Daran hänge ich fest:

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/8/b/8ba0684dcad8cdbaa0e15bcbf967970f222cf159.jpeg)

Ich habe das Problem nicht am PC.

---

<div class="post-metadata">

**Author:** ![spenceur](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/spenceur/32/1961_2.png) [@spenceur](https://community.gladysassistant.com/u/spenceur)\
**Post date:** [28. August 2026 um 09:12 UTC](https://community.gladysassistant.com/t/sur-mobile-impossible-dajouter-un-widget-sur-un-dashboard/10726/2 "2026-08-28T09:12:16Z")

</div>

Auf s26 kein Problem

Aber die „Abbrechen“-Knöpfe ragen insbesondere über

 ![25629](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/9/7/9753bb071b05ac9cf184bfcd41c49516c4c83299.jpeg)

 ![25631](https://gladys-assistant-community.b-cdn.net/uploads/default/original/3X/9/e/9e5599ac91c06864f95c2cbef786562d5fc85065.jpeg)

---

<div class="post-metadata">

**Author:** ![cursor-bot](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/cursor-bot/32/22252_2.png) [@cursor-bot](https://community.gladysassistant.com/u/cursor-bot)\
**Post date:** [28. August 2026 um 09:26 UTC](https://community.gladysassistant.com/t/sur-mobile-impossible-dajouter-un-widget-sur-un-dashboard/10726/3 "2026-08-28T09:26:33Z")

</div>

Hallo zusammen!

Dieses Thema ist nun **in Entwicklung**.

Ein Pull Request wurde eröffnet, um zu verhindern, dass ein abgestürztes Widget die gesamte App einfriert, und um die Schaltflächen „Abbrechen“ / „Speichern“ auf mobilen Geräten sichtbar zu halten:

> <https://github.com/GladysAssistant/Gladys/pull/3042>
>
> \### Description
> 
> Follow-up on the forum report: on an iPhone, opening the widget… picker in the dashboard editor left Gladys unresponsive — tapping a widget name added nothing, and Cancel / Save no longer closed anything. The reporter's screenshot shows the tapped tile carrying its (sticky) hover state, so the taps \*were\* landing: the app had simply stopped re-rendering.
> 
> \*\*Root cause — the freeze is structural.\*\* Preact 10 rethrows an uncaught render error out of its \`process()\` loop, and that loop only resets \`process.\_rerenderCount\` on its last line. A throw leaves the counter above zero, \`enqueueRender\` then believes a flush is already scheduled, and the app never re-renders again. It stays painted exactly as it was — buttons still take focus, nothing else happens — until a reload. Gladys had no error boundary anywhere, so any single widget could do this.
> 
> Reproduced in WebKit at an iPhone viewport: making one widget throw during render leaves the editor stuck mid-render with every later interaction dead. With the boundary in place, the same throw shows one small card and the editor stays fully usable.
> 
> \*\*Changes\*\*
> 
> \- \*\*\`ErrorBoundary\`\*\* (new): wraps every route (in \`Layout\`) and each dashboard widget (\`routes/dashboard/Box\`). A broken widget now degrades to a message in its own card instead of taking the page — and the editor that would fix it — down with it. It resets on the URL / widget type, so the user is never stuck with the message either.
> \- \*\*\`Chart.getData()\`\*\* read \`device\_features.length\` before its own null guard, so every chart widget just added to a dashboard threw (\`TypeError: undefined is not an object\`). Counting moved after the guard.
> \- \*\*\`saveDashboard()\`\*\* never reset \`loading\` on failure. Left active, the Tabler dimmer makes the whole editor transparent \*and\* \`pointer-events: none\` — a second, independent way for the editor to look frozen.
> \- \*\*Editor action bar\*\*: it was a Bootstrap \`.row\` / \`.col-auto\` pair sized by its content. On a 390px phone the French labels ("Annuler", "Supprimer", "Sauvegarder") made it 452px wide and, being right-aligned, the extra 62px went off the \*\*left\*\* edge — cutting "Annuler" in half, which is visible in the reporter's screenshot. It is now a wrapping, right-aligned flex row that publishes its height as a CSS variable, so the mobile edit sheet keeps sitting exactly on top of it; it is also a little tighter on phones to give the widget list back some room.
> 
> Measured before → after at 390 / 375 / 320px wide, in French: previously \`Annuler\` spanned x −41→75 (41px off-screen); now every action sits fully inside the viewport at all three widths, with the sheet's bottom edge meeting the bar's top edge exactly. Desktop (≥992px) still renders the bar on a single row, unchanged.
> 
> \## Forum
> 
> Forum: https://community.gladysassistant.com/t/sur-mobile-impossible-dajouter-un-widget-sur-un-dashboard/10726
> 
> \### Checklist
> 
> \- \[\] Tests pass: \`cd server && npm run coverage\` (Codecov requires 100% coverage on changed lines) and Cypress (\`npm run cypress:run\`) if the UI changed
> \- \[x\] Linter and prettier pass on both front and server (\`npm run eslint\`, \`npm run prettier\`)
> \- \[x\] No undocumented breaking change
> 
> Notes on the checklist: no server code is touched. Cypress was not run locally (no binary in this environment); the existing \`Dashboard.cy.js\` editor specs select the action buttons by \`.btn-outline-primary\` / \`.btn-outline-secondary\` and their \`Text\` ids, both of which are preserved by the new markup. Front eslint (0 errors), prettier and \`compare-translations\` all pass. The flows above were verified end to end in WebKit at iPhone and desktop viewports.
> 
> \---
> \_Generated by \[Claude Code\](https://claude.ai/code/session\_01PXgn8CU15pgKYoyChGmvkh)\_
> 
> 
> 
> \## Summary by CodeRabbit
> 
> \- \*\*New Features\*\*
> - Added localized error messaging with recovery guidance when rendering failures occur.
> - Dashboard widgets now contain individual rendering errors, allowing the rest of the dashboard to remain usable.
> \- \*\*Bug Fixes\*\*
> - Prevented new chart configurations from failing when device features are missing.
> - Fixed dashboard saves leaving the editor stuck in a loading state after errors.
> \- \*\*Style\*\*
> - Improved mobile dashboard editor controls so action buttons wrap correctly and remain accessible on narrow screens.
> - Updated editor panels to account for variable footer heights.

Zögert nicht, dem Pull Request zu folgen, ihn zu testen (optional, besonders bei kleinen Anfragen) und euer Feedback hier zu hinterlassen, falls nötig.

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [28. August 2026 um 09:28 UTC](https://community.gladysassistant.com/t/sur-mobile-impossible-dajouter-un-widget-sur-un-dashboard/10726/4 "2026-08-28T09:28:05Z")

</div>

Danke für den Bericht und den Screenshot, er war entscheidend 🙏

Der entscheidende Hinweis: Auf deinem Screenshot ist die Kachel „Geräte“ blau umrandet — das ist der Hover-Zustand, den iOS nach einem Tap kleben lässt. Also **deine Klicks kamen an** , es liegt kein Problem mit dem Touchscreen vor. Es war die Oberfläche, die aufgehört hatte, sich neu zu zeichnen.

Die Ursache ist allgemeiner als der Widget-Selektor: Wenn eine Komponente während der Renderphase einen Fehler auslöst, lässt Preact (die Anzeigebibliothek von Gladys) seine Render-Queue in einem blockierten Zustand, und **nichts wird danach neu gezeichnet**. Der Bildschirm bleibt genau so eingefroren, die Buttons nehmen noch den Fokus an, aber keine Aktion hat eine sichtbare Wirkung — bis zum Neuladen der Seite. Das entspricht genau dem, was du beschreibst: Das Widget wird nicht hinzugefügt, Abbrechen und Speichern schließen nichts.

Ich habe das Szenario in einem WebKit-Browser in iPhone-Größe reproduziert: Es reicht, dass ein einziges Widget abstürzt, damit der gesamte Editor auf diese Weise stirbt.

Was als Korrektur kommt:

- ein Schutz, der den Fehler auf das betroffene Widget isoliert (es zeigt eine kleine Nachricht in seiner Karte an) statt die gesamte Anwendung zum Absturz zu bringen;
- ein echter Absturz, der nebenbei gefunden wurde: Jedes frisch hinzugefügte **Grafik** -Widget löste einen Fehler aus;
- das Dashboard bleibt nicht mehr im „Laden“-Zustand stecken, wenn ein Speichern fehlschlägt;
- und die Aktionsleiste unten, die auf dem Telefon über den Bildschirm hinausragte: Auf Französisch ist „Abbrechen / Löschen / Speichern“ 452 px breit bei 390 px Bildschirm, und da sie rechtsbündig ist, ragte der Überschuss **links** heraus — das ist der Grund, warum man auf deinem Screenshot „…nuler“ in zwei Hälften geteilt sieht. Sie geht jetzt in die nächste Zeile und alles bleibt erreichbar.

Eine Sache, die ich noch nicht habe: **Welches Widget genau stürzt bei dir ab**. Das hängt von deinen Daten ab, und dein Dashboard löst das Problem aus, während meins nicht.

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [28. August 2026 um 09:31 UTC](https://community.gladysassistant.com/t/sur-mobile-impossible-dajouter-un-widget-sur-un-dashboard/10726/5 "2026-08-28T09:31:19Z")

</div>

@StephaneB kannst du diese URL testen? [https://claude-mobile-widget-dashboa.gladys-plus.pages.dev/](https://claude-mobile-widget-dashboa.gladys-plus.pages.dev/)?

---

<div class="post-metadata">

**Author:** ![StephaneB](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/stephaneb/32/15443_2.png) [@StephaneB](https://community.gladysassistant.com/u/StephaneB)\
**Post date:** [28. August 2026 um 09:37 UTC](https://community.gladysassistant.com/t/sur-mobile-impossible-dajouter-un-widget-sur-un-dashboard/10726/6 "2026-08-28T09:37:09Z")

</div>

Getestet, und es funktioniert problemlos. 👍

Um den Widget zu verstehen, der bei mir einen Fehler verursacht, wo sieht man das? Auf dem Dashboard in der normalen Ansicht, auf dem Dashboard im Bearbeitungsmodus, auf dem Dashboard im Bearbeitungsmodus, wenn ich einen Widget hinzufüge,…?

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [28. August 2026 um 10:06 UTC](https://community.gladysassistant.com/t/sur-mobile-impossible-dajouter-un-widget-sur-un-dashboard/10726/7 "2026-08-28T10:06:29Z")

</div>

Super, danke, dass du es getestet hast 🙏

Um das Widget zu identifizieren: Es ist **im Dashboard, im Bearbeitungsmodus** sichtbar. Dafür brauchst du keine technischen Tools.

Öffne den Dashboard-Editor und scrolle **ganz nach unten**. Falls ein Widget Probleme macht, wird es durch einen orangen Block ersetzt (« Ein Fehler ist beim Anzeigen aufgetreten… »), und sein Name steht direkt darüber in kleinen Großbuchstaben: `HORLOGE`, `GRAPHIQUE`, `CAMÉRA`… Ein Screenshot dieses Bereichs reicht mir.

Der Block erscheint auch im Dashboard in der normalen Ansicht anstelle des Widgets, aber ohne dessen Namen — deshalb ist der Editor praktischer. Allerdings erscheint er nicht im Widget-Auswahlbildschirm: Dieser Bildschirm ist nur eine Liste, dort wird kein Widget tatsächlich angezeigt.

Und falls du **überhaupt keinen orangen Block** irgendwo findest, ist das eine gute Nachricht und es gibt nichts zu suchen: Das bedeutet, dass bei dir kein Widget abstürzt, und dass dein Problem von einem der anderen Fixes desselben Updates kam (es gab insbesondere einen Fehler beim frisch hinzugefügten Graphik-Widget). Sag mir einfach Bescheid, dann belassen wir es dabei.
