Skip to content

Commit ede733c

Browse files
authored
Merge pull request #1617 from dxc-technology/gomezivann/accordion-group-update
Accordion group update
2 parents 4bc8a44 + fd091c9 commit ede733c

File tree

3 files changed

+232
-230
lines changed

3 files changed

+232
-230
lines changed

lib/src/accordion-group/AccordionGroup.tsx

Lines changed: 12 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,12 @@
1-
import React, { createContext, useCallback, useContext, useMemo, useState } from "react";
1+
import React, { Children, createContext, useCallback, useMemo, useState } from "react";
22
import styled, { ThemeProvider } from "styled-components";
3-
import DxcAccordion from "../accordion/Accordion";
43
import { getMargin } from "../common/utils";
54
import { spaces } from "../common/variables";
65
import useTheme from "../useTheme";
7-
import AccordionGroupPropsType, { AccordionGroupAccordionContextProps, AccordionPropsType } from "./types";
6+
import AccordionGroupAccordion from "./AccordionGroupAccordion";
7+
import AccordionGroupPropsType, { AccordionGroupAccordionContextProps } from "./types";
88

9-
const AccordionGroupAccordionContext = createContext<AccordionGroupAccordionContextProps | null>(null);
10-
11-
const AccordionGroupAccordion = ({ ...childProps }: AccordionPropsType): JSX.Element => {
12-
const { activeIndex, handlerActiveChange, disabled, index } = useContext(AccordionGroupAccordionContext);
13-
14-
return (
15-
<DxcAccordion
16-
isExpanded={activeIndex === index}
17-
onChange={() => {
18-
handlerActiveChange(index);
19-
}}
20-
disabled={disabled}
21-
{...childProps}
22-
>
23-
{childProps.children}
24-
</DxcAccordion>
25-
);
26-
};
9+
export const AccordionGroupAccordionContext = createContext<AccordionGroupAccordionContextProps | null>(null);
2710

2811
const DxcAccordionGroup = ({
2912
defaultIndexActive,
@@ -35,6 +18,7 @@ const DxcAccordionGroup = ({
3518
}: AccordionGroupPropsType): JSX.Element => {
3619
const colorsTheme = useTheme();
3720
const [innerIndexActive, setInnerIndexActive] = useState(defaultIndexActive ?? -1);
21+
3822
const handlerActiveChange = useCallback(
3923
(index: number) => {
4024
indexActive ?? setInnerIndexActive((prev) => (index === prev ? -1 : index));
@@ -50,21 +34,20 @@ const DxcAccordionGroup = ({
5034
return (
5135
<ThemeProvider theme={colorsTheme.accordion}>
5236
<AccordionGroupContainer margin={margin} disabled={disabled}>
53-
{(Array.isArray(children) ? children : [children])
54-
.filter((child) => child.type === AccordionGroupAccordion)
55-
.map((accordion, index) => (
56-
<AccordionGroupAccordionContext.Provider key={`accordion-${index}`} value={{ index, ...contextValue }}>
57-
{accordion}
58-
</AccordionGroupAccordionContext.Provider>
59-
))}
37+
{Children.map(children, (accordion, index) => (
38+
<AccordionGroupAccordionContext.Provider key={`accordion-${index}`} value={{ index, ...contextValue }}>
39+
{accordion}
40+
</AccordionGroupAccordionContext.Provider>
41+
))}
6042
</AccordionGroupContainer>
6143
</ThemeProvider>
6244
);
6345
};
6446

6547
DxcAccordionGroup.Accordion = AccordionGroupAccordion;
6648

67-
const calculateWidth = (margin) => `calc(100% - ${getMargin(margin, "left")} - ${getMargin(margin, "right")})`;
49+
const calculateWidth = (margin: AccordionGroupPropsType["margin"]) =>
50+
`calc(100% - ${getMargin(margin, "left")} - ${getMargin(margin, "right")})`;
6851

6952
const AccordionGroupContainer = styled.div<{
7053
margin: AccordionGroupPropsType["margin"];
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import React, { useContext } from "react";
2+
import DxcAccordion from "../accordion/Accordion";
3+
import { AccordionGroupAccordionContext } from "./AccordionGroup";
4+
import { AccordionPropsType } from "./types";
5+
6+
const AccordionGroupAccordion = ({ ...childProps }: AccordionPropsType): JSX.Element => {
7+
const { activeIndex, handlerActiveChange, disabled, index } = useContext(AccordionGroupAccordionContext);
8+
9+
return (
10+
<DxcAccordion
11+
isExpanded={activeIndex === index}
12+
onChange={() => {
13+
handlerActiveChange(index);
14+
}}
15+
disabled={disabled}
16+
{...childProps}
17+
>
18+
{childProps.children}
19+
</DxcAccordion>
20+
);
21+
};
22+
23+
export default AccordionGroupAccordion;

0 commit comments

Comments
 (0)