diff --git a/.changeset/twelve-spoons-wink.md b/.changeset/twelve-spoons-wink.md new file mode 100644 index 000000000..ec19e9787 --- /dev/null +++ b/.changeset/twelve-spoons-wink.md @@ -0,0 +1,5 @@ +--- +"ingred-ui": patch +--- + +:bug: Fix to open accordion by controlled state diff --git a/src/components/Accordion/Accordion.stories.tsx b/src/components/Accordion/Accordion.stories.tsx index e6e8a1b4d..4c74c5581 100644 --- a/src/components/Accordion/Accordion.stories.tsx +++ b/src/components/Accordion/Accordion.stories.tsx @@ -63,7 +63,7 @@ export const Multiple: StoryObj = { export const Controlled: StoryObj = { render: () => { - const [expanded, setExpanded] = React.useState(false); + const [expanded, setExpanded] = React.useState("title1"); const handleChange = (panel: string) => (_: React.SyntheticEvent, newExpanded: boolean) => { setExpanded(newExpanded ? panel : false); diff --git a/src/components/Accordion/Accordion.tsx b/src/components/Accordion/Accordion.tsx index d84e959e0..d4923e23e 100644 --- a/src/components/Accordion/Accordion.tsx +++ b/src/components/Accordion/Accordion.tsx @@ -27,9 +27,7 @@ const Accordion = forwardRef(function Accordion( const [overflow, setOverflow] = useState<"hidden" | "visible">("hidden"); const accordionContentContainerRef = useRef(null); - const handleChange = (event: React.SyntheticEvent, expanded: boolean) => { - setExpandedState(expanded); - onChange && onChange(event, expanded); + const setContentStyle = (expanded: boolean) => { if (expanded) { setHeight(`${accordionContentContainerRef.current?.scrollHeight ?? 0}px`); } else { @@ -39,6 +37,12 @@ const Accordion = forwardRef(function Accordion( } }; + const handleChange = (event: React.SyntheticEvent, expanded: boolean) => { + setExpandedState(expanded); + setContentStyle(expanded); + onChange && onChange(event, expanded); + }; + const handleClick = (event: React.MouseEvent) => { handleChange(event, !expandedState); }; @@ -58,6 +62,7 @@ const Accordion = forwardRef(function Accordion( useEffect(() => { setExpandedState(expanded); + setContentStyle(expanded); }, [expanded]); return (