Skip to content

Commit 2f2a42a

Browse files
mario-aleoMikhail Bashkirov
authored andcommitted
fix(textarea): wait for textarea slot before init autoresize (fix #203)
1 parent 69d5945 commit 2f2a42a

File tree

1 file changed

+33
-2
lines changed

1 file changed

+33
-2
lines changed

packages/textarea/src/LionTextarea.js

Lines changed: 33 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,8 +62,7 @@ export class LionTextarea extends ObserverMixin(LionInput) {
6262
connectedCallback() {
6363
// eslint-disable-next-line wc/guard-super-call
6464
super.connectedCallback();
65-
this.setTextareaMaxHeight();
66-
autosize(this.inputElement);
65+
this.__initializeAutoresize();
6766
}
6867

6968
disconnectedCallback() {
@@ -101,7 +100,39 @@ export class LionTextarea extends ObserverMixin(LionInput) {
101100
];
102101
}
103102

103+
get updateComplete() {
104+
if (this.__textareaUpdateComplete) {
105+
return Promise.all([this.__textareaUpdateComplete, super.updateComplete]);
106+
}
107+
return super.updateComplete;
108+
}
109+
104110
resizeTextarea() {
105111
autosize.update(this.inputElement);
106112
}
113+
114+
__initializeAutoresize() {
115+
if (this.__shady_native_contains) {
116+
this.__textareaUpdateComplete = this.__waitForTextareaRenderedInRealDOM().then(() => {
117+
this.__startAutoresize();
118+
this.__textareaUpdateComplete = null;
119+
});
120+
} else {
121+
this.__startAutoresize();
122+
}
123+
}
124+
125+
async __waitForTextareaRenderedInRealDOM() {
126+
let count = 3; // max tasks to wait for
127+
while (count !== 0 && !this.__shady_native_contains(this.inputElement)) {
128+
// eslint-disable-next-line no-await-in-loop
129+
await new Promise(resolve => setTimeout(resolve));
130+
count -= 1;
131+
}
132+
}
133+
134+
__startAutoresize() {
135+
autosize(this.inputElement);
136+
this.setTextareaMaxHeight();
137+
}
107138
}

0 commit comments

Comments
 (0)