@@ -3,13 +3,12 @@ import { assert } from "tsafe";
33import type { Equals } from "tsafe" ;
44import { fr } from "./lib" ;
55import { cx } from "./lib/tools/cx" ;
6- import "@gouvfr/dsfr/dist/component/accordion/accordion.css" ;
76import { symToStr } from "tsafe/symToStr" ;
87import { useConstCallback } from "./lib/tools/powerhooks/useConstCallback" ;
8+ import "@gouvfr/dsfr/dist/component/accordion/accordion.css" ;
99
1010export type AccordionProps = AccordionProps . Controlled | AccordionProps . Uncontrolled ;
1111
12- //TODO Controlled mode (callback onClick, expended etc ...)
1312export namespace AccordionProps {
1413 export type Common = {
1514 className ?: string ;
@@ -38,7 +37,7 @@ export namespace AccordionProps {
3837 } ;
3938}
4039
41- /** @see <https://www.systeme-de-design.gouv.fr/elements-d-interface/composants/accordeon > */
40+ /** @see <https://react-dsfr-components.etalab.studio/?path=/docs/components-accordion > */
4241export const Accordion = memo (
4342 forwardRef < HTMLDivElement , AccordionProps > ( ( props , ref ) => {
4443 const {
@@ -55,7 +54,7 @@ export const Accordion = memo(
5554
5655 assert < Equals < keyof typeof rest , never > > ( ) ;
5756
58- const id = useId ( ) ;
57+ const accordionId = `accordion- ${ useId ( ) } ` ;
5958
6059 const [ expandedState , setExpandedState ] = useState ( defaultExpanded ) ;
6160
@@ -64,9 +63,7 @@ export const Accordion = memo(
6463 const onExtendButtonClick = useConstCallback (
6564 ( event : React . MouseEvent < HTMLButtonElement , MouseEvent > ) => {
6665 setExpandedState ( ! value ) ;
67- if ( onExpandedChange ) {
68- onExpandedChange ( ! value , event ) ;
69- }
66+ onExpandedChange ?.( ! value , event ) ;
7067 }
7168 ) ;
7269
@@ -76,13 +73,13 @@ export const Accordion = memo(
7673 < button
7774 className = { fr . cx ( "fr-accordion__btn" ) }
7875 aria-expanded = { value }
79- aria-controls = { `accordion- ${ id } ` }
76+ aria-controls = { accordionId }
8077 onClick = { onExtendButtonClick }
8178 >
8279 { label }
8380 </ button >
8481 </ HtmlTitleTag >
85- < div className = { cx ( fr . cx ( "fr-collapse" ) , classes . collapse ) } id = { `accordion- ${ id } ` } >
82+ < div className = { cx ( fr . cx ( "fr-collapse" ) , classes . collapse ) } id = { accordionId } >
8683 { content }
8784 </ div >
8885 </ section >
0 commit comments