Skip to content

Commit 832c34e

Browse files
authored
fix(ui5-textarea): stop showing valueStateMsg in value-state="None" (#1568)
Previously if value state msg slot is set, it used to be displayed in all value states. But, by spec the no matter as slot or built-in text, the value state message should be displayed in Error, Warning and Information states only.
1 parent dc60609 commit 832c34e

File tree

4 files changed

+30
-14
lines changed

4 files changed

+30
-14
lines changed

packages/main/src/TextArea.js

+9-9
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,7 @@ class TextArea extends UI5Element {
427427
}
428428

429429
_onResize() {
430-
if (this.displayValueStateMessage) {
430+
if (this.displayValueStateMessagePopover) {
431431
this._width = this.offsetWidth;
432432
}
433433
}
@@ -546,19 +546,19 @@ class TextArea extends UI5Element {
546546
}
547547

548548
get openValueStateMsgPopover() {
549-
return !this._firstRendering && this._openValueStateMsgPopover && this.displayValueStateMessage;
549+
return !this._firstRendering && this._openValueStateMsgPopover && this.displayValueStateMessagePopover;
550550
}
551551

552-
get displayValueStateMessage() {
553-
return !!this.valueStateMessage.length || this.exceeding || (this.valueState !== ValueState.Success && this.valueState !== ValueState.None);
552+
get displayValueStateMessagePopover() {
553+
return this.hasCustomValueState || this.hasValueState || this.exceeding;
554554
}
555555

556-
get displayDefaultValueStateMessage() {
557-
if (this.valueStateMessage.length) {
558-
return false;
559-
}
556+
get hasCustomValueState() {
557+
return !!this.valueStateMessage.length && this.hasValueState;
558+
}
560559

561-
return this.exceeding || (this.valueState !== ValueState.Success && this.valueState !== ValueState.None);
560+
get hasValueState() {
561+
return this.valueState === ValueState.Error || this.valueState === ValueState.Warning || this.valueState === ValueState.Information;
562562
}
563563

564564
get valueStateMessageText() {

packages/main/src/TextAreaPopover.hbs

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
{{#if displayValueStateMessage}}
1+
{{#if displayValueStateMessagePopover}}
22
<ui5-popover
33
skip-registry-update
44
no-padding
@@ -16,11 +16,11 @@
1616
{{/if}}
1717

1818
{{#*inline "valueStateMessage"}}
19-
{{#if displayDefaultValueStateMessage}}
20-
{{valueStateText}}
21-
{{else}}
19+
{{#if hasCustomValueState}}
2220
{{#each valueStateMessageText}}
2321
{{this}}
2422
{{/each}}
23+
{{else}}
24+
{{valueStateText}}
2525
{{/if}}
2626
{{/inline}}

packages/main/test/pages/TextArea.html

+5-1
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,11 @@
8080

8181
<section class="group">
8282
<ui5-title>Simple TextArea</ui5-title>
83-
<ui5-textarea id="basic-textarea" placeholder="Basic text area"></ui5-textarea>
83+
<ui5-textarea id="basic-textarea" placeholder="Basic text area">
84+
<div slot="valueStateMessage">
85+
This msg will not be displayed as no value-state is set.
86+
</div>
87+
</ui5-textarea>
8488

8589
<br>
8690
<br>

packages/main/test/specs/TextArea.spec.js

+12
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,18 @@ describe("when enabled", () => {
7373
assert.ok(popover.isDisplayedInViewport(), "The value state message popover is displayed");
7474
});
7575

76+
it("does not show value state msg when valueState='None'", () => {
77+
const textarea = browser.$("#basic-textarea");
78+
const staticAreaItemClassName = browser.getStaticAreaItemClassName("#basic-textarea");
79+
const popover = browser.$(`.${staticAreaItemClassName}`).shadow$("ui5-popover")
80+
81+
// act
82+
textarea.click();
83+
84+
// assert
85+
assert.ok(!popover.isDisplayedInViewport(), "The value state message popover is not displayed");
86+
});
87+
7688
it("can type inside", () => {
7789
const textarea = browser.$("#basic-textarea");
7890
const textareaInner = browser.$("#basic-textarea").shadow$("textarea");

0 commit comments

Comments
 (0)