Normalize _value to array in kol-select to handle single values#7760
Normalize _value to array in kol-select to handle single values#7760donchi-donald wants to merge 9 commits intopublic-ui:developfrom donchi-donald:7758-allow-single-value-in-kolselect
Conversation
deleonio
left a comment
There was a problem hiding this comment.
Die Änderung würde ich gerne noch überdenken.
|
Ich habe mir erlaubt, die Commits in einen neuen Branch innerhalb des Repos zu verschieben, damit alle GH Actions ausgeführt werden und damit ich ggf. daran weiter arbeiten kann: #7795 |
|
@sdvg, wie gehen wir mit diesem PR um? |
Den würde ich schließen, sobald #7795 gemerged ist. Für den Moment würde ich ihn offen lassen, falls noch Änderungen durch @donchi-donald notwendig sind. @deleonio Hattest du zu #7795 denn noch Anmerkungen oder wäre das eigentlich bereit, gemerged zu werden? Der angesprochene Punkt mit der Dokumentation bzw. den Beispielen wäre in einem neuen PR für die Docs zu erledigen. |
|
Ich habe die _value-Angabe im Beispiel entfernt. Jetzt stellt sich für mich die Frage: Soll ich die Dokumentation im Rahmen dieses Tickets (#7758) anpassen, oder wird dafür ein separates Ticket erstellt? Hintergrund: Der Select-Komponent unterstützt jetzt sowohl einfache string-Werteals auch Arrays von string (string[]). Ich warte gerne auf Feedback, wie wir die Doku an dieser Stelle aktualisieren sollen. 😊 |
Das war aus meiner Sicht eigentlich nicht notwendig, ich hatte die Snapshots (im gespiegelten PR) schon dahingehend aktualisiert. Aber warten wir mal ab, was Martin sagt :)
Neues Ticket schadet hier auf jeden Fall nicht, kannst du gerne anlegen.
Mir ging es in den Docs vor allem darum, die Beispiele zu vereinfachen ( |
|
Danke für dein Feedback! Kannst du bitte kurz schauen, ob das so passt? |
|
Ich habe direkt im Doku-Ticket noch einen Kommentar geschrieben. |
Signed-off-by: Donald Donchi Fofack <72475021+donchi-donald@users.noreply.github.com>
| public async getValue(): Promise<StencilUnknown[]> { | ||
| return this.state._value; | ||
| public async getValue(): Promise<StencilUnknown[] | StencilUnknown> { | ||
| if (this._multiple) { |
There was a problem hiding this comment.
_multiple_ bringt hier einen interessanten Aspekt hinein, Gedanken dazu:
1. Hintergrund zur _multiple-Prop
- Die
_multiple-Prop wird aktuell einzig dazu verwendet, das native<select>-Element mitmultipleauszustatten. - Es gab bislang keine enge Verknüpfung zwischen
_multipleund dem Datentyp von_value(Single-Value vs. Array-Value).
2. Typ-Ermittlung von _value
- Statt sich auf den Typ von
_multiplezu verlassen, sollte man besser den initialen Wert prüfen (siehekol-input-number,kol-input-date).
3. Rückwärtskompatibilität
- Für bestehende Implementierungen sollten beide Varianten weiterhin funktionieren:
- Single-Value:
<KolSelect _value="single value" /> - Array-Value:
<KolSelect _value={["array value"]} />
- Single-Value:
- Die Prop
_multipledarf dabei nicht implizit den Rückgabewert verändern, sondern sollte nur das Attribut an das native<select>weiterreichen.
4. Problemfall: Kombination von _value="single value" und _multiple
<KolSelect _value="single value" _multiple />
- Hier ist unklar, ob der "single value" oder ein Array zurückgegeben werden soll.
- In diesem Fall macht es m.E. keinen Sinn, einen einfachen String als Rückgabewert zu haben, wenn
_multiplegesetzt ist.
5. Mögliche Lösungsansätze
-
Fehler/Warnung ausgeben
- Wenn
_multiple={true}und_valueist kein Array, würde eine Runtime-Exception oder zumindest eine Warnung im Log erscheinen.
- Wenn
-
Nur noch konsistente Kombis unterstützen (Breaking Change)
_multiple={false}→ nur Single-Value_multiple={true}→ nur Array-Value- Vorteil: Typensicherheit und klare Erwartung, Nachteil: möglicher Bruch mit existierendem Code.
Fazit/Empfehlung
- Meiner Meinung nach sollten wir kurzfristig zumindest eine Warnung ausgeben, wenn jemand
_multiplemit einem Single-Value nutzt. - Langfristig könnte man überlegen, auf eine strengere Typisierung umzusteigen (Option 2), sobald ein Major-Release ansteht.
There was a problem hiding this comment.
Vielen Dank für das ausführliche Feedback – das hilft mir, den Zusammenhang zwischen _multiple und _value jetzt deutlich besser zu verstehen. Ich sehe ein, warum eine klare Trennung bzw. konsistente Handhabung hier wichtig ist.
Ich werde die entsprechenden Anpassungen sofort vornehmen und das Verhalten entsprechend korrigieren, sodass bei Nutzung von _multiple ein Array erwartet wird bzw. zumindest eine Warnung erscheint, wenn dies nicht der Fall ist.
Danke nochmal für die Erklärung!
There was a problem hiding this comment.
Wir haben das Thema heute morgen noch einmal im Team besprochen:
Der Konsens ist jetzt, dass doch die _multiple-Property berücksichtigt, und sich auf den (erwarteten) _value auswirken soll. Wir wollen also praktisch den oben beschriebenen Lösungsansatz 2 umsetzen.
Das heißt auch, dass wir die Validierung entsprechend anpassen müssen:
-> Ändern sich _value oder _multiple, muss der _value darauf validiert werden, dass er zur _multiple-Property passt.
_value={["multi"]} _multiple✅ valid_value={"single"} _multiple❌ invalid_value={"single"} _multiple={false}✅ valid_value={"single"} _multiple❌ invalid
Danke für deine Geduld mit dem hin-und-her, das Ticket hätte initial besser durchdacht sein können.
There was a problem hiding this comment.
Hi @sdvg ,
vielen Dank für das Update und die Klarstellung.
Tatsächlich hatte ich die Lösung bereits unter Berücksichtigung des initialen Wertes implementiert. Ich verstehe nun aber, dass zusätzlich auch die _multiple-Property aktiv berücksichtigt und bei Änderungen entsprechend validiert werden soll.
Ich werde meinen Code zeitnah aktualisieren, um diese Validierungslogik mit einzubeziehen: Wenn sich _value oder _multiple ändern, wird _value so validiert, dass es konsistent zur _multiple-Property passt.
Vielen Dank nochmals für das konstruktive Feedback und die klare Richtung!
Ich passe die Lösung entsprechend an.
Beste Grüße
No description provided.