Skip to content

Commit f6f734a

Browse files
committed
fix(tree-item): improve focus handling and cache invalidation logic
1 parent 889bbb9 commit f6f734a

File tree

2 files changed

+16
-17
lines changed

2 files changed

+16
-17
lines changed

packages/components/src/components/tree-item/component.tsx

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -147,23 +147,23 @@ export class KolTreeItemWc implements TreeItemAPI {
147147
};
148148
}
149149

150-
private getTreeParent(): HTMLKolTreeWcElement | undefined {
151-
return this.host?.closest(KolTreeTag) as HTMLKolTreeWcElement | undefined;
150+
private getTreeParent(): (HTMLKolTreeWcElement & { invalidateOpenItemsCache(): void }) | undefined {
151+
return this.host?.closest(KolTreeTag) as (HTMLKolTreeWcElement & { invalidateOpenItemsCache(): void }) | undefined;
152152
}
153153

154154
/**
155155
* Focuses the link element.
156156
*/
157157
@Method() async focus() {
158-
if (this.host) {
159-
return Promise.resolve(this.linkElement?.focus(this.host));
158+
if (this.host && this.linkElement) {
159+
return Promise.resolve(this.linkElement.focus(this.host));
160160
}
161161
}
162162

163163
private async handleExpandClick(event: MouseEvent) {
164164
event.preventDefault();
165-
if (this.host) {
166-
await this.linkElement?.focus(this.host);
165+
if (this.host && this.linkElement) {
166+
await this.linkElement.focus(this.host);
167167
}
168168
await this.expand();
169169
}
@@ -180,15 +180,14 @@ export class KolTreeItemWc implements TreeItemAPI {
180180
_open: true,
181181
};
182182
// Invalidate the tree's cache of open items
183-
const treeParent = this.getTreeParent();
184-
(treeParent as any)?.invalidateOpenItemsCache?.();
183+
this.getTreeParent()?.invalidateOpenItemsCache();
185184
}
186185
}
187186

188187
private async handleCollapseClick(event: MouseEvent) {
189188
event.preventDefault();
190-
if (this.host) {
191-
await this.linkElement?.focus(this.host);
189+
if (this.host && this.linkElement) {
190+
await this.linkElement.focus(this.host);
192191
}
193192
await this.collapse();
194193
}
@@ -205,8 +204,7 @@ export class KolTreeItemWc implements TreeItemAPI {
205204
_open: false,
206205
};
207206
// Invalidate the tree's cache of open items
208-
const treeParent = this.getTreeParent();
209-
(treeParent as any)?.invalidateOpenItemsCache?.();
207+
this.getTreeParent()?.invalidateOpenItemsCache();
210208
}
211209
}
212210

packages/components/src/components/tree/component.tsx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,8 @@ export class KolTreeWc implements TreeAPI {
4646
* Called by tree-item when expand/collapse occurs.
4747
* @internal
4848
*/
49+
@Method()
50+
// eslint-disable-next-line @stencil-community/async-methods
4951
public invalidateOpenItemsCache(): void {
5052
this.cacheValid = false;
5153
}
@@ -244,7 +246,7 @@ export class KolTreeWc implements TreeAPI {
244246
}
245247

246248
@Listen('focusin')
247-
public async handleFocusIn(event: FocusEvent) {
249+
public handleFocusIn(event: FocusEvent) {
248250
// When focus lands on the tree host, auto-delegate to first item
249251
if (event.target === this.host) {
250252
// Defer to next frame to ensure tree is fully ready
@@ -255,15 +257,14 @@ export class KolTreeWc implements TreeAPI {
255257
}
256258

257259
@Listen('focusout')
258-
public async handleFocusOut(event: FocusEvent) {
260+
public handleFocusOut(event: FocusEvent) {
259261
if (event.relatedTarget && !(event.relatedTarget as Element).closest(KolTreeTag)) {
260262
/* Tree lost focus */
261-
await this.ensureActiveItemVisibility();
263+
this.ensureActiveItemVisibility();
262264
}
263265
}
264266

265-
// eslint-disable-next-line @typescript-eslint/require-await
266-
private async ensureActiveItemVisibility() {
267+
private ensureActiveItemVisibility() {
267268
const findActiveItem = (): HTMLKolTreeItemElement | undefined => {
268269
const rootNodes = (this.host?.querySelector('slot')?.assignedNodes?.() as HTMLElement[])?.filter(KolTreeWc.isTreeItem) ?? [];
269270
for (const rootNode of rootNodes) {

0 commit comments

Comments
 (0)