Skip to content

Commit ea6531f

Browse files
authored
refactor: replace slotted with slotchange (#35138)
1 parent 3283ede commit ea6531f

File tree

6 files changed

+37
-19
lines changed

6 files changed

+37
-19
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"type": "prerelease",
3+
"comment": "refactor: replace slotted with slotchange for tree and tree-item",
4+
"packageName": "@fluentui/web-components",
5+
"email": "machi@microsoft.com",
6+
"dependentChangeType": "patch"
7+
}

packages/web-components/docs/web-components.api.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -945,17 +945,21 @@ export class BaseTree extends FASTElement {
945945
changeHandler(e: Event): boolean | void;
946946
// Warning: (ae-forgotten-export) The symbol "BaseTreeItem" needs to be exported by the entry point index.d.ts
947947
//
948-
// (undocumented)
948+
// @internal (undocumented)
949949
childTreeItems: BaseTreeItem[];
950-
// (undocumented)
950+
// @internal (undocumented)
951951
childTreeItemsChanged(): void;
952952
// @internal
953953
clickHandler(e: Event): boolean | void;
954954
currentSelected: HTMLElement | null;
955+
// @internal (undocumented)
956+
defaultSlot: HTMLSlotElement;
955957
// @internal
956958
elementInternals: ElementInternals;
957959
// @internal
958960
focusHandler(e: FocusEvent): void;
961+
// @internal (undocumented)
962+
handleDefaultSlotChange(): void;
959963
// @internal
960964
keydownHandler(e: KeyboardEvent): boolean | void;
961965
}

packages/web-components/src/tree-item/tree-item.base.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ export class BaseTreeItem extends FASTElement {
1010
*/
1111
public elementInternals: ElementInternals = this.attachInternals();
1212

13+
/** @internal */
14+
@observable
15+
public itemSlot!: HTMLSlotElement;
16+
1317
constructor() {
1418
super();
1519
this.elementInternals.role = 'treeitem';
@@ -96,6 +100,7 @@ export class BaseTreeItem extends FASTElement {
96100
this.$fastController.addStyles(this.styles);
97101
}
98102

103+
/** @internal */
99104
@observable
100105
public childTreeItems: BaseTreeItem[] | undefined = [];
101106

@@ -166,4 +171,9 @@ export class BaseTreeItem extends FASTElement {
166171
this.tabIndex = this.selected ? 0 : -1;
167172
}
168173
}
174+
175+
/** @internal */
176+
public handleItemSlotChange() {
177+
this.childTreeItems = this.itemSlot.assignedElements().filter(el => isTreeItem(el));
178+
}
169179
}

packages/web-components/src/tree-item/tree-item.template.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { elements, html, slotted } from '@microsoft/fast-element';
2-
import { FluentDesignSystem } from '../fluent-design-system.js';
1+
import { html, ref } from '@microsoft/fast-element';
32
import type { TreeItem } from './tree-item.js';
43

54
const chevronIcon = html`
@@ -26,13 +25,7 @@ export const template = html<TreeItem>`
2625
</div>
2726
</div>
2827
<div role="group" class="items" part="items">
29-
<slot
30-
name="item"
31-
${slotted({
32-
property: 'childTreeItems',
33-
filter: elements(`${FluentDesignSystem.prefix}-tree-item`),
34-
})}
35-
></slot>
28+
<slot name="item" ${ref('itemSlot')} @slotchange="${x => x.handleItemSlotChange()}"></slot>
3629
</div>
3730
</template>
3831
`;

packages/web-components/src/tree/tree.base.ts

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,13 +35,18 @@ export class BaseTree extends FASTElement {
3535
*/
3636
public elementInternals: ElementInternals = this.attachInternals();
3737

38+
/** @internal */
39+
public defaultSlot!: HTMLSlotElement;
40+
3841
constructor() {
3942
super();
4043
this.elementInternals.role = 'tree';
4144
}
4245

46+
/** @internal */
4347
@observable
4448
childTreeItems: BaseTreeItem[] = [];
49+
/** @internal */
4550
public childTreeItemsChanged() {
4651
this.updateCurrentSelected();
4752
}
@@ -261,4 +266,9 @@ export class BaseTree extends FASTElement {
261266
focusItem.focus();
262267
}
263268
}
269+
270+
/** @internal */
271+
public handleDefaultSlotChange() {
272+
this.childTreeItems = this.defaultSlot.assignedElements().filter(el => isTreeItem(el));
273+
}
264274
}
Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
1-
import { elements, html, slotted } from '@microsoft/fast-element';
2-
import { FluentDesignSystem } from '../fluent-design-system.js';
1+
import { html, ref } from '@microsoft/fast-element';
32
import type { Tree } from './tree.js';
43

54
export const template = html<Tree>`
@@ -11,11 +10,6 @@ export const template = html<Tree>`
1110
@keydown="${(x, c) => x.keydownHandler(c.event as KeyboardEvent)}"
1211
@change="${(x, c) => x.changeHandler(c.event)}"
1312
>
14-
<slot
15-
${slotted({
16-
property: 'childTreeItems',
17-
filter: elements(`${FluentDesignSystem.prefix}-tree-item`),
18-
})}
19-
></slot>
13+
<slot ${ref('defaultSlot')} @slotchange="${x => x.handleDefaultSlotChange()}"></slot>
2014
</template>
2115
`;

0 commit comments

Comments
 (0)