Skip to content

Commit f2151e6

Browse files
committed
fix(accordion): accordion item not expanded when visible=true on init
1 parent 99b88e4 commit f2151e6

File tree

3 files changed

+28
-19
lines changed

3 files changed

+28
-19
lines changed

projects/coreui-angular/src/lib/accordion/accordion-item/accordion-item.component.html

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
<div class="accordion-header">
44
<ng-container *ngTemplateOutlet="tmpl['accordionHeaderTemplate'] || defaultAccordionHeaderTemplate; context: itemContext" />
55
</div>
6-
<div class="accordion-collapse" cCollapse [visible]="visible" [attr.aria-expanded]="visible" [id]="contentId">
6+
<div class="accordion-collapse" cCollapse [visible]="itemVisible()" [attr.aria-expanded]="itemVisible()" [id]="contentId">
77
<ng-container *ngTemplateOutlet="tmpl['accordionBodyTemplate'] || defaultAccordionBodyTemplate; context: itemContext" />
88
</div>
99
</ng-container>
1010

1111
<ng-template #defaultAccordionHeaderTemplate>
12-
<button cAccordionButton [collapsed]="!visible" [attr.aria-controls]="contentId" (click)="toggleItem()">
12+
<button cAccordionButton [collapsed]="!itemVisible()" [attr.aria-controls]="contentId" (click)="toggleItem()">
1313
<ng-container
1414
*ngTemplateOutlet="tmpl['accordionHeader'] || defaultAccordionHeaderContentTemplate; context: itemContext">
1515
</ng-container>

projects/coreui-angular/src/lib/accordion/accordion-item/accordion-item.component.ts

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ import {
33
Component,
44
computed,
55
contentChildren,
6+
effect,
67
inject,
7-
Input,
8+
input,
89
OnDestroy,
910
OnInit,
11+
signal,
1012
TemplateRef
1113
} from '@angular/core';
1214
import { NgTemplateOutlet } from '@angular/common';
@@ -19,12 +21,12 @@ import { AccordionService } from '../accordion.service';
1921
let nextId = 0;
2022

2123
@Component({
22-
selector: 'c-accordion-item',
23-
templateUrl: './accordion-item.component.html',
24-
styleUrls: ['./accordion-item.component.scss'],
25-
exportAs: 'cAccordionItem',
26-
imports: [AccordionButtonDirective, NgTemplateOutlet, CollapseDirective],
27-
host: { class: 'accordion-item' }
24+
selector: 'c-accordion-item',
25+
templateUrl: './accordion-item.component.html',
26+
styleUrls: ['./accordion-item.component.scss'],
27+
exportAs: 'cAccordionItem',
28+
imports: [AccordionButtonDirective, NgTemplateOutlet, CollapseDirective],
29+
host: { class: 'accordion-item' }
2830
})
2931
export class AccordionItemComponent implements OnInit, OnDestroy {
3032
readonly #accordionService = inject(AccordionService);
@@ -34,22 +36,29 @@ export class AccordionItemComponent implements OnInit, OnDestroy {
3436
* @type boolean
3537
* @default false
3638
*/
37-
@Input({ transform: booleanAttribute }) visible: boolean = false;
39+
// eslint-disable-next-line @angular-eslint/no-input-rename
40+
readonly visibleInput = input(false, { transform: booleanAttribute, alias: 'visible' });
3841

39-
@Input()
40-
set open(value: boolean) {
41-
console.warn('c-accordion-item "open" prop is deprecated, use "visible" prop instead.');
42-
this.visible = value || this.visible;
42+
readonly itemVisible = signal(false);
43+
44+
visibleInputChange = effect(() => {
45+
setTimeout(() => {
46+
this.itemVisible.set(this.visibleInput());
47+
});
48+
});
49+
50+
set visible(value: boolean) {
51+
this.itemVisible.set(value);
4352
}
4453

45-
get open() {
46-
return <boolean>this.visible;
54+
get visible() {
55+
return <boolean>this.itemVisible();
4756
}
4857

4958
contentId = `accordion-item-${nextId++}`;
5059

5160
get itemContext() {
52-
return { $implicit: <boolean>this.visible };
61+
return { $implicit: <boolean>this.itemVisible() };
5362
}
5463

5564
readonly contentTemplates = contentChildren(TemplateIdDirective, { descendants: true });

projects/coreui-angular/src/lib/accordion/accordion.service.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@ export class AccordionService {
1818
}
1919

2020
toggleItem(item: AccordionItemComponent): void {
21-
item.visible = !item.visible;
21+
item.itemVisible.update((value) => !value);
2222
this.closeOtherItems(item);
2323
}
2424

2525
closeOtherItems(openItem: AccordionItemComponent): void {
2626
if (!this.alwaysOpen) {
2727
this.items.forEach((item: AccordionItemComponent) => {
2828
if (item !== openItem) {
29-
item.visible = false;
29+
item.itemVisible.set(false);
3030
}
3131
});
3232
}

0 commit comments

Comments
 (0)