Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Fix]: Accordion needs to reference Accordion Item Base class so extending either item class works with Accordion #32117

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"type": "prerelease",
"comment": "fix: reference accordion item base class in accordion",
"packageName": "@fluentui/web-components",
"email": "jes@microsoft.com",
"dependentChangeType": "patch"
}
19 changes: 10 additions & 9 deletions packages/web-components/src/accordion/accordion.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Observable } from '@microsoft/fast-element';
import { attr, FASTElement, observable } from '@microsoft/fast-element';
import { AccordionItem } from '../accordion-item/accordion-item.js';
import { BaseAccordionItem } from '../accordion-item/accordion-item.js';
import { AccordionExpandMode } from './accordion.options.js';

/**
Expand Down Expand Up @@ -40,7 +40,7 @@ export class Accordion extends FASTElement {
}

// Clean up single expand mode behavior
(expandedItem as AccordionItem)?.expandbutton.removeAttribute('aria-disabled');
(expandedItem as BaseAccordionItem)?.expandbutton.removeAttribute('aria-disabled');
}

/**
Expand Down Expand Up @@ -85,14 +85,15 @@ export class Accordion extends FASTElement {
* Find the first expanded item in the accordion
* @returns {void}
*/
private findExpandedItem(): AccordionItem | Element | null {
private findExpandedItem(): BaseAccordionItem | Element | null {
if (this.accordionItems.length === 0) {
return null;
}

return (
this.accordionItems.find((item: Element | AccordionItem) => item instanceof AccordionItem && item.expanded) ??
this.accordionItems[0]
this.accordionItems.find(
(item: Element | BaseAccordionItem) => item instanceof BaseAccordionItem && item.expanded,
) ?? this.accordionItems[0]
);
}

Expand All @@ -116,15 +117,15 @@ export class Accordion extends FASTElement {
// Add event listeners to each non-disabled AccordionItem
this.accordionItems = children.filter(child => !child.hasAttribute('disabled'));
this.accordionItems.forEach((item: Element, index: number) => {
if (item instanceof AccordionItem) {
if (item instanceof BaseAccordionItem) {
item.addEventListener('click', this.expandedChangedHandler);
// Subscribe to the expanded attribute of the item
Observable.getNotifier(item).subscribe(this, 'expanded');
}
});

if (this.isSingleExpandMode()) {
const expandedItem = this.findExpandedItem() as AccordionItem;
const expandedItem = this.findExpandedItem() as BaseAccordionItem;
this.setSingleExpandMode(expandedItem);
}
};
Expand All @@ -150,7 +151,7 @@ export class Accordion extends FASTElement {
this.activeItemIndex = currentItems.indexOf(expandedItem);

currentItems.forEach((item: Element, index: number) => {
if (item instanceof AccordionItem) {
if (item instanceof BaseAccordionItem) {
if (this.activeItemIndex === index) {
item.expanded = true;
item.expandbutton.setAttribute('aria-disabled', 'true');
Expand Down Expand Up @@ -185,7 +186,7 @@ export class Accordion extends FASTElement {
private expandedChangedHandler: EventListener = (evt: Event): void => {
const item = evt.target as HTMLElement;

if (item instanceof AccordionItem) {
if (item instanceof BaseAccordionItem) {
if (!this.isSingleExpandMode()) {
item.expanded = !item.expanded;
// setSingleExpandMode sets activeItemIndex on its own
Expand Down
Loading