Koala user defined custom colors#3361
Conversation
| BLACK = "#000000" | ||
| BLUE = "#007bff" | ||
| CYAN = "#17a2b8" | ||
| GREEN = "#28a745" | ||
| RED = "#dc3545" | ||
| YELLOW = "#ffc107" | ||
|
|
||
| def upgrade_datastore_91(self) -> None: |
There was a problem hiding this comment.
Die Zeilen scheinen unbeabsichtigt zu sein. Bitte entfernen.
There was a problem hiding this comment.
Warum hast Du das Symbol geändert? Gibt es mit owbBattery.svg ein Problem?
| <svg | ||
| class="svg-icon" | ||
| viewBox="0 0 1024 1024" | ||
| version="1.1" | ||
| xmlns="http://www.w3.org/2000/svg" | ||
| fill="currentColor" | ||
| > | ||
| <path | ||
| d="M711.253333 170.666667 640 170.666667 640 85.333333 384 85.333333 384 170.666667 312.746667 170.666667C281.6 170.666667 256 196.266667 256 227.413333L256 881.92C256 913.066667 281.6 938.666667 312.746667 938.666667L711.253333 938.666667C742.4 938.666667 768 913.066667 768 881.92L768 227.413333C768 196.266667 742.4 170.666667 711.253333 170.666667Z" | ||
| /> | ||
| </svg> | ||
| </template> |
There was a problem hiding this comment.
Stellvertretend für alle "*Icon.vue":
Warum hast Du den Code eines SVG in ein Template gepackt? Wäre es nicht einfacher, in BaseIcon.vue direkt ein SVG zu importieren?
| :deep(.base-icon svg) { | ||
| width: 100%; | ||
| height: 100%; | ||
| fill: currentColor; | ||
| vertical-align: middle; | ||
| overflow: hidden; | ||
| } | ||
| .col-title { |
There was a problem hiding this comment.
Die Definition gehört eigentlich in BaseIcon.vue.
| if (defaultValue !== undefined) { | ||
| // expected missing optional value - no error | ||
| console.debug('optional path not found', topicObject, path[i]); | ||
| return defaultValue; | ||
| } | ||
| // real error case |
There was a problem hiding this comment.
defaultValue wird bereits in Zeile 656 zurückgegeben und auch vorher eine Meldung geschrieben.
| soc?: number; | ||
| icon: string; | ||
| iconComponent?: Component; | ||
| iconColor?: string | null; |
There was a problem hiding this comment.
Ist das nicht ausreichend?
| iconColor?: string | null; | |
| iconColor?: string; |
| soc: batterySoc.value, | ||
| icon: 'icons/owbBattery.svg', | ||
| iconComponent: BatteryIcon, | ||
| iconColor: 'var(--q-diagram-icon)', |
There was a problem hiding this comment.
Warum wird die individuelle Farbe der Batterie nicht verwendet?
| <foreignObject | ||
| :x="-svgIconWidth / 2" | ||
| :y="-svgIconHeight / 2" | ||
| :height="svgIconHeight" | ||
| :width="svgIconWidth" | ||
| /> | ||
| :height="svgIconHeight" | ||
| > | ||
| <div class="icon-wrapper" :style="{ color: component.iconColor }"> | ||
| <component | ||
| :is="component.iconComponent" | ||
| style="width: 100%; height: 100%" | ||
| /> | ||
| </div> | ||
| </foreignObject> | ||
| </g> |
There was a problem hiding this comment.
Hmm... jetzt haben wir eine Vue Datei, welche im Template ein DIV mit einem SVG enthält. Das SVG hat dann wieder mehrere andere Vue Komponenten, welche auch jeweils ein DIV mit einem SVG enthalten.
Ist das nicht etwas zu verschachtelt?
| background: var(--q-charge-point-fill); | ||
| border: 0.125rem solid var(--q-charge-point-stroke); | ||
| } | ||
| .counter.sub-row { |
There was a problem hiding this comment.
Bezieht sich der Selector auf ein Element oder zwei verschachtelte?
Oder anders gefragt: warum ist es hier beim Counter anders, als bei den anderen Komponenten?
| 'full-height': props.fullHeight, | ||
| }" | ||
| }, batteryUserDefinedColor && 'has-custom-color']" | ||
| :style="batteryUserDefinedColor && { '--component-color': batteryUserDefinedColor }" |
There was a problem hiding this comment.
Bitte verwende nach Möglichkeit keine direkten style Angaben im Template. batteryDefinedColor kann auch direkt im <style> Bereich verwendet werden. Das gilt auch für die anderen Dateien.
Benutzerdefinierte Farben im Koala Theme implementiert und konsistent über mehrere UI-Komponenten hinweg integriert.
Die Farben können nun individuell für verschiedene Entitäten (z. B. Ladepunkte, Fahrzeuge, Komponenten) definiert werden (in ui-settings project) und werden automatisch in der gesamten Oberfläche verwendet.
Diagramme
Daily Totals Chart
Karten (Carousel)
Benutzerdefinierte Farben wurden ergänzt für:
Tabellenansichten
Änderungen an BaseTable
Die bisherige Implementierung der Tabelle hatte zwei unterschiedliche Render-Pfade:
(ChargePointInformation.vue)
Gleichzeitig wurden Inhalte über body-cell-* Slots vom Parent bereitgestellt.
Problem
Für die neue Funktion einer benutzerdefinierten Farbanzeige pro Zeile (farbiger Indikator / Farbstreifen) war ein konsistenter Zugriff auf die gesamte Zeilenstruktur notwendig.
Durch die unterschiedlichen Render-Pfade war es nicht möglich, diesen Farbindikator zuverlässig und einheitlich darzustellen.
Lösung
Die Tabellenstruktur wurde vereinheitlicht:
-Klare Trennung:
Neue Funktion: Farbindikator pro Zeile
Im Zuge der Umstellung wurde ein benutzerdefinierter Farbstreifen pro Tabellenzeile eingeführt: