Skip to content

Commit c6c2d47

Browse files
committed
Add support for error state
1 parent 01ba757 commit c6c2d47

File tree

3 files changed

+30
-5
lines changed

3 files changed

+30
-5
lines changed

src/components/ha-generic-picker.ts

Lines changed: 19 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,10 @@ export class HaGenericPicker extends LitElement {
103103
// helper to set new value after closing picker, to avoid flicker
104104
private _newValue?: string;
105105

106+
@property({ attribute: "error-message" }) public errorMessage?: string;
107+
108+
@property({ type: Boolean, reflect: true }) public invalid = false;
109+
106110
private _unsubscribeTinyKeys?: () => void;
107111

108112
protected render() {
@@ -137,6 +141,8 @@ export class HaGenericPicker extends LitElement {
137141
.value=${this.value}
138142
.required=${this.required}
139143
.disabled=${this.disabled}
144+
.errorMessage=${this.errorMessage}
145+
.invalid=${this.invalid}
140146
.hideClearIcon=${this.hideClearIcon}
141147
.valueRenderer=${this.valueRenderer}
142148
>
@@ -205,11 +211,16 @@ export class HaGenericPicker extends LitElement {
205211
}
206212

207213
private _renderHelper() {
208-
return this.helper
209-
? html`<ha-input-helper-text .disabled=${this.disabled}
210-
>${this.helper}</ha-input-helper-text
211-
>`
212-
: nothing;
214+
const showError = this.invalid && this.errorMessage;
215+
const showHelper = !showError && this.helper;
216+
217+
if (!showError && !showHelper) {
218+
return nothing;
219+
}
220+
221+
return html`<ha-input-helper-text .disabled=${this.disabled}>
222+
${showError ? this.errorMessage : this.helper}
223+
</ha-input-helper-text>`;
213224
}
214225

215226
private _dialogOpened = () => {
@@ -308,6 +319,9 @@ export class HaGenericPicker extends LitElement {
308319
display: block;
309320
margin: var(--ha-space-2) 0 0;
310321
}
322+
:host([invalid]) ha-input-helper-text {
323+
color: var(--mdc-theme-error, var(--error-color, #b00020));
324+
}
311325
312326
wa-popover {
313327
--wa-space-l: var(--ha-space-0);

src/components/ha-icon-picker.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,8 @@ export class HaIconPicker extends LitElement {
108108
.disabled=${this.disabled}
109109
.required=${this.required}
110110
.placeholder=${this.placeholder}
111+
.errorMessage=${this.errorMessage}
112+
.invalid=${this.invalid}
111113
.rowRenderer=${rowRenderer}
112114
.valueRenderer=${valueRenderer}
113115
.searchFn=${this._filterIcons}

src/components/ha-picker-field.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,10 @@ export class HaPickerField extends LitElement {
3939
@property({ attribute: false })
4040
public valueRenderer?: PickerValueRenderer;
4141

42+
@property({ attribute: "error-message" }) public errorMessage?: string;
43+
44+
@property({ type: Boolean, reflect: true }) public invalid = false;
45+
4246
@query("ha-combo-box-item", true) public item!: HaComboBoxItem;
4347

4448
public async focus() {
@@ -142,6 +146,11 @@ export class HaPickerField extends LitElement {
142146
background-color: var(--mdc-theme-primary);
143147
}
144148
149+
:host([invalid]) ha-combo-box-item:after {
150+
height: 2px;
151+
background-color: var(--mdc-theme-error, var(--error-color, #b00020));
152+
}
153+
145154
.clear {
146155
margin: 0 -8px;
147156
--mdc-icon-button-size: 32px;

0 commit comments

Comments
 (0)