[Gelöst] hidden-attribut verzögern

Begonnen von Marko1976, 16 April 2026, 19:57:54

Vorheriges Thema - Nächstes Thema

Marko1976

Hallo, ich hänge mal wieder am Problem ftui-content in einem ftui-popup, wo dann verschiedene ftui-widgets nicht nachgeladen oder aktualisiert werden.

Darum habe ich meinen Code jetzt so umgebaut, dass innerhalb des Popup's mehrere ftui-content-Elemente an der gleichen Stelle geladen werden und die Sichtbarkeit über ein externes Reading in Kombination mit dem hidden-Attribut gesteuert wird.

Eigentlich klappt damit alles, bis auf das ftui-image/ftui-weather.
Wenn das Popup geladen wird werden bis auf ein ftui-content alle anderen sofort ausgeblendet. Doch im ausgeblendeten Zustand wird der Bilderpfad nicht richtig aufgelöst und nur ein Platzhalter für das Bild geladen (der Pfad stimmt bei der Übergabe natürlich) und dieses beim umschalten des hidden-Attributes auch nicht aktualisiert.
Wenn aber alle ftui-content-Elemente beim Öffnen des Popup's sichtbar sind, werden auch alle Bilder richtig geladen; es spielt dann keine Rolle ob ich einzelne content-Elemente ausblende oder nicht.

Darum die Frage: Kann ich zb per Pipe das folgende hidden-Attribut verzögern und das map erst nach 1-2 Sekunden reagieren lassen:
[hidden]="Settings_Tablet:Wetter_Ort | map('Elspe:false, .*:true')"
Und bitte, ich möchte keine Alternativ-Vorschläge wie: lasss das Popup weg oder so. Ich habe meine komplette Oberfläche mit Popups aufgebaut. Entweder es geht oder es geht nicht, aber ich möchte da jetzt nicht für ein Ding einen Extraweg in der Layoutfrage einschlagen.

yersinia

Zitat von: Marko1976 am 16 April 2026, 19:57:54Darum die Frage: Kann ich zb per Pipe das folgende hidden-Attribut verzögern und das map erst nach 1-2 Sekunden reagieren lassen:
[hidden]="Settings_Tablet:Wetter_Ort | map('Elspe:false, .*:true')"
Ja, das müsste gehen:
[hidden]="Settings_Tablet:Wetter_Ort | map('`Elspe`:false, `.*`:true')"Die Verzögerung müsstest du FHEM-seitig organisieren - ich wüsste gerade nicht, dass FTUI einen Timer könnte - und das Reading (Wetter_Ort) muss einen Event erzeugen.
viele Grüße, yersinia
----
FHEM 6.4 (SVN) on RPi 4B with RasPi OS Trixie (perl 5.40.1) | FTUI
nanoCUL->2x868(1x ser2net)@tsculfw, 1x433@Sduino | MQTT2 | Tasmota | ESPEasy
VCCU->14xSEC-SCo, 7xCC-RT-DN, 5xLC-Bl1PBU-FM, 3xTC-IT-WM-W-EU, 1xPB-2-WM55, 1xLC-Sw1PBU-FM, 1xES-PMSw1-Pl

mr_petz

Man könnte es auch mit einem js string verzögern

Marko1976

So, nach einigem rumexperimentieren, habe ich zwar nicht die Lösung für die eigentliche Frage gefunden, aber eine Lösung die das Problem beseitigt.

Ich befülle mit hilfe von @open und @close am ftui-popup ein externes Dummy-Device. In meinem Fall nicht das state, sondern ein reading darin, da ich das Dummy-Device für verschiedene Settings nutze.
@close="sendFhem('setreading Settings_Tablet Wetter_Popup closed')"
@open="sendFhem('setreading Settings_Tablet Wetter_Popup open')"

An jedem der im Popup verwendeten ftui-content habe ich folgendes angehängt:
[style]="Settings_Tablet:Wetter_Ort | map('Heinsberg: `opacity: 1`, .*: `opacity: 0; pointer-events: none; position: absolute`')"Dadurch wird anders als beim hidden-Attribut das Element zwar nicht sichtbar aber steuerbar gehalten, weshalb in allen Contant-Elemente alle Bilder geladen werden, aber nur das eine sichtbar ist, welches mit dem Reading im Steuerdevice übereinstimmt. Funktioniert auch mit ftui-image direkt.

Als letzten Schritt habe ich an allen Widget die zur Steuerung dienen (in meinem Fall eine Reihe von ftui-icons, es funktioniert aber genauso mit ftui-button oder ftui-label etc.) folgenden Code angehangen:
@click="sendFhem('setreading Settings_Tablet Wetter_Ort Heinsberg')"Dadurch wird das Reading des externen Steuerdevice beim klicken geändert und dank der opacity-Eigenschaft am Content dieser sichtbar/unsichtbar geschaltet.

Zusammenfassend:
Ich kann das ausführen des hidden-Attributs mit keiner mir bekannten Methode verzögern, darum schalte ich die Sichtbarkeit direkt mit der opycity-css-Eigenschaft und lade pauschal von allen Content-Elemente alle Bilder. Dadurch wird das fehlerhafte "Nachladen" unterbunden und alles richtig dargestellt.

Eventuell wäre das aber eine sinnvolle Erweiterung für alle Attribute die @Setstate ins FTUI§ noch einbauen könnte. Ich könnte mir vorstellen, dass so eine Verzögerung für einige Attribute sinnvoll sein könnte.