From 78d9831912985d7fc325c473f8a98882c9828216 Mon Sep 17 00:00:00 2001 From: Eric Olkowski Date: Mon, 11 Dec 2023 13:45:27 -0500 Subject: [PATCH 1/4] feat(Accordion): pulled in Penta updates --- .../components/Accordion/AccordionContent.tsx | 14 ++--- .../components/Accordion/AccordionContext.ts | 5 ++ .../components/Accordion/AccordionItem.tsx | 23 +++++++- .../components/Accordion/AccordionToggle.tsx | 56 ++++++++++--------- .../Accordion/examples/AccordionBordered.tsx | 25 ++++----- .../examples/AccordionDefinitionList.tsx | 25 ++++----- ...cordionFixedWithMultipleExpandBehavior.tsx | 55 +++++------------- .../AccordionSingleExpandBehavior.tsx | 25 ++++----- 8 files changed, 105 insertions(+), 123 deletions(-) diff --git a/packages/react-core/src/components/Accordion/AccordionContent.tsx b/packages/react-core/src/components/Accordion/AccordionContent.tsx index 0dc117b86b4..4bcb4ba5c95 100644 --- a/packages/react-core/src/components/Accordion/AccordionContent.tsx +++ b/packages/react-core/src/components/Accordion/AccordionContent.tsx @@ -1,7 +1,7 @@ import * as React from 'react'; import { css } from '@patternfly/react-styles'; import styles from '@patternfly/react-styles/css/components/Accordion/accordion'; -import { AccordionContext } from './AccordionContext'; +import { AccordionContext, AccordionItemContext } from './AccordionContext'; import { AccordionExpandableContentBody } from './AccordionExpandableContentBody'; export interface AccordionContentProps extends React.HTMLProps { @@ -11,8 +11,6 @@ export interface AccordionContentProps extends React.HTMLProps { className?: string; /** Identify the AccordionContent item */ id?: string; - /** Flag to show if the expanded content of the Accordion item is visible */ - isHidden?: boolean; /** Flag to indicate Accordion content is fixed */ isFixed?: boolean; /** Adds accessible text to the Accordion content */ @@ -29,7 +27,6 @@ export const AccordionContent: React.FunctionComponent = className = '', children = null, id = '', - isHidden = false, isFixed = false, isCustomContent = false, 'aria-label': ariaLabel = '', @@ -39,16 +36,17 @@ export const AccordionContent: React.FunctionComponent = }: AccordionContentProps) => { const [hasScrollbar, setHasScrollbar] = React.useState(false); const containerRef = React.useRef(null); + const { isExpanded } = React.useContext(AccordionItemContext); React.useEffect(() => { - if (containerRef?.current && isFixed && !isHidden) { + if (containerRef?.current && isFixed && isExpanded) { const { offsetHeight, scrollHeight } = containerRef.current; setHasScrollbar(offsetHeight < scrollHeight); } else if (!isFixed) { setHasScrollbar(false); } - }, [containerRef, isFixed, isHidden]); + }, [containerRef, isFixed, isExpanded]); return ( @@ -61,10 +59,10 @@ export const AccordionContent: React.FunctionComponent = className={css( styles.accordionExpandableContent, isFixed && styles.modifiers.fixed, - !isHidden && styles.modifiers.expanded, + isExpanded && styles.modifiers.expanded, className )} - hidden={isHidden} + hidden={!isExpanded} {...(ariaLabel && { 'aria-label': ariaLabel })} {...(ariaLabelledby && { 'aria-labelledby': ariaLabelledby })} {...(hasScrollbar && { tabIndex: 0 })} diff --git a/packages/react-core/src/components/Accordion/AccordionContext.ts b/packages/react-core/src/components/Accordion/AccordionContext.ts index 8df38f401fa..73b9de4661c 100644 --- a/packages/react-core/src/components/Accordion/AccordionContext.ts +++ b/packages/react-core/src/components/Accordion/AccordionContext.ts @@ -5,4 +5,9 @@ interface AccordionContextProps { ToggleContainer: React.ElementType; } +interface AccordionItemContextProps { + isExpanded?: boolean; +} + export const AccordionContext = React.createContext>({}); +export const AccordionItemContext = React.createContext({} as AccordionItemContextProps); diff --git a/packages/react-core/src/components/Accordion/AccordionItem.tsx b/packages/react-core/src/components/Accordion/AccordionItem.tsx index f4c413d479a..3d414b6cbdc 100644 --- a/packages/react-core/src/components/Accordion/AccordionItem.tsx +++ b/packages/react-core/src/components/Accordion/AccordionItem.tsx @@ -1,11 +1,28 @@ import * as React from 'react'; +import { css } from '@patternfly/react-styles'; +import styles from '@patternfly/react-styles/css/components/Accordion/accordion'; +import { AccordionItemContext } from './AccordionContext'; export interface AccordionItemProps { - /** Content rendered inside the Accordion item */ + /** Content rendered inside the accordion item. */ children?: React.ReactNode; + /** Additional classes added to the accordion item. */ + className?: string; + /** Flag to indicate whether the accordion item is expanded. */ + isExpanded?: boolean; } -export const AccordionItem: React.FunctionComponent = ({ children = null }: AccordionItemProps) => ( - {children} +export const AccordionItem: React.FunctionComponent = ({ + children = null, + className, + isExpanded: isExpandedProp = false +}: AccordionItemProps) => ( + +
{children}
+
); AccordionItem.displayName = 'AccordionItem'; diff --git a/packages/react-core/src/components/Accordion/AccordionToggle.tsx b/packages/react-core/src/components/Accordion/AccordionToggle.tsx index a2ec5b28124..256fbb06f67 100644 --- a/packages/react-core/src/components/Accordion/AccordionToggle.tsx +++ b/packages/react-core/src/components/Accordion/AccordionToggle.tsx @@ -2,7 +2,7 @@ import * as React from 'react'; import { css } from '@patternfly/react-styles'; import styles from '@patternfly/react-styles/css/components/Accordion/accordion'; import AngleRightIcon from '@patternfly/react-icons/dist/esm/icons/angle-right-icon'; -import { AccordionContext } from './AccordionContext'; +import { AccordionContext, AccordionItemContext } from './AccordionContext'; export interface AccordionToggleProps extends React.DetailedHTMLProps, HTMLButtonElement> { @@ -10,8 +10,6 @@ export interface AccordionToggleProps children?: React.ReactNode; /** Additional classes added to the Accordion Toggle */ className?: string; - /** Flag to show if the expanded content of the Accordion item is visible */ - isExpanded?: boolean; /** Identify the Accordion toggle number */ id: string; /** Container to override the default for toggle */ @@ -21,31 +19,35 @@ export interface AccordionToggleProps export const AccordionToggle: React.FunctionComponent = ({ className = '', id, - isExpanded = false, children = null, component, ...props -}: AccordionToggleProps) => ( - - {({ ToggleContainer }) => { - const Container = component || ToggleContainer; - return ( - - - - ); - }} - -); +}: AccordionToggleProps) => { + const { isExpanded } = React.useContext(AccordionItemContext); + + return ( + + {({ ToggleContainer }) => { + const Container = component || ToggleContainer; + + return ( + + + + ); + }} + + ); +}; AccordionToggle.displayName = 'AccordionToggle'; diff --git a/packages/react-core/src/components/Accordion/examples/AccordionBordered.tsx b/packages/react-core/src/components/Accordion/examples/AccordionBordered.tsx index ee7e321f73f..448b124eccd 100644 --- a/packages/react-core/src/components/Accordion/examples/AccordionBordered.tsx +++ b/packages/react-core/src/components/Accordion/examples/AccordionBordered.tsx @@ -26,17 +26,16 @@ export const AccordionBordered: React.FunctionComponent = () => { return ( <> - + { onToggle('bordered-toggle1'); }} - isExpanded={expanded === 'bordered-toggle1'} id="bordered-toggle1" > Item one - +

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. @@ -44,17 +43,16 @@ export const AccordionBordered: React.FunctionComponent = () => { - + { onToggle('bordered-toggle2'); }} - isExpanded={expanded === 'bordered-toggle2'} id="bordered-toggle2" > Item two - +

Vivamus et tortor sed arcu congue vehicula eget et diam. Praesent nec dictum lorem. Aliquam id diam ultrices, faucibus erat id, maximus nunc. @@ -62,32 +60,30 @@ export const AccordionBordered: React.FunctionComponent = () => { - + { onToggle('bordered-toggle3'); }} - isExpanded={expanded === 'bordered-toggle3'} id="bordered-toggle3" > Item three - +

Morbi vitae urna quis nunc convallis hendrerit. Aliquam congue orci quis ultricies tempus.

- + { onToggle('bordered-toggle4'); }} - isExpanded={expanded === 'bordered-toggle4'} id="bordered-toggle4" > Item four - + Donec vel posuere orci. Phasellus quis tortor a ex hendrerit efficitur. Aliquam lacinia ligula pharetra, sagittis ex ut, pellentesque diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices @@ -104,17 +100,16 @@ export const AccordionBordered: React.FunctionComponent = () => { - + { onToggle('bordered-toggle5'); }} - isExpanded={expanded === 'bordered-toggle5'} id="bordered-toggle5" > Item five - +

Vivamus finibus dictum ex id ultrices. Mauris dictum neque a iaculis blandit.

diff --git a/packages/react-core/src/components/Accordion/examples/AccordionDefinitionList.tsx b/packages/react-core/src/components/Accordion/examples/AccordionDefinitionList.tsx index 85098f31b51..d91573f53ce 100644 --- a/packages/react-core/src/components/Accordion/examples/AccordionDefinitionList.tsx +++ b/packages/react-core/src/components/Accordion/examples/AccordionDefinitionList.tsx @@ -14,17 +14,16 @@ export const AccordionDefinitionList: React.FunctionComponent = () => { return ( - + { onToggle('def-list-toggle1'); }} - isExpanded={expanded === 'def-list-toggle1'} id="def-list-toggle1" > Item one - +

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. @@ -32,17 +31,16 @@ export const AccordionDefinitionList: React.FunctionComponent = () => { - + { onToggle('def-list-toggle2'); }} - isExpanded={expanded === 'def-list-toggle2'} id="def-list-toggle2" > Item two - +

Vivamus et tortor sed arcu congue vehicula eget et diam. Praesent nec dictum lorem. Aliquam id diam ultrices, faucibus erat id, maximus nunc. @@ -50,32 +48,30 @@ export const AccordionDefinitionList: React.FunctionComponent = () => { - + { onToggle('def-list-toggle3'); }} - isExpanded={expanded === 'def-list-toggle3'} id="def-list-toggle3" > Item three - +

Morbi vitae urna quis nunc convallis hendrerit. Aliquam congue orci quis ultricies tempus.

- + { onToggle('def-list-toggle4'); }} - isExpanded={expanded === 'def-list-toggle4'} id="def-list-toggle4" > Item four - +

Donec vel posuere orci. Phasellus quis tortor a ex hendrerit efficitur. Aliquam lacinia ligula pharetra, sagittis ex ut, pellentesque diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere @@ -88,17 +84,16 @@ export const AccordionDefinitionList: React.FunctionComponent = () => { - + { onToggle('def-list-toggle5'); }} - isExpanded={expanded === 'def-list-toggle5'} id="def-list-toggle5" > Item five - +

Vivamus finibus dictum ex id ultrices. Mauris dictum neque a iaculis blandit.

diff --git a/packages/react-core/src/components/Accordion/examples/AccordionFixedWithMultipleExpandBehavior.tsx b/packages/react-core/src/components/Accordion/examples/AccordionFixedWithMultipleExpandBehavior.tsx index ceb7a8d4486..e0375c1056d 100644 --- a/packages/react-core/src/components/Accordion/examples/AccordionFixedWithMultipleExpandBehavior.tsx +++ b/packages/react-core/src/components/Accordion/examples/AccordionFixedWithMultipleExpandBehavior.tsx @@ -13,62 +13,41 @@ export const AccordionFixedWithMultipleExpandBehavior: React.FunctionComponent = return ( - - toggle('ex2-toggle1')} - isExpanded={expanded.includes('ex2-toggle1')} - id="ex2-toggle1" - > + + toggle('ex2-toggle1')} id="ex2-toggle1"> Item one - +

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.

- - toggle('ex2-toggle2')} - isExpanded={expanded.includes('ex2-toggle2')} - id="ex2-toggle2" - > + + toggle('ex2-toggle2')} id="ex2-toggle2"> Item two - +

Vivamus et tortor sed arcu congue vehicula eget et diam. Praesent nec dictum lorem. Aliquam id diam ultrices, faucibus erat id, maximus nunc.

- - toggle('ex2-toggle3')} - isExpanded={expanded.includes('ex2-toggle3')} - id="ex2-toggle3" - > + + toggle('ex2-toggle3')} id="ex2-toggle3"> Item three - +

Morbi vitae urna quis nunc convallis hendrerit. Aliquam congue orci quis ultricies tempus.

- - toggle('ex2-toggle4')} - isExpanded={expanded.includes('ex2-toggle4')} - id="ex2-toggle4" - > + + toggle('ex2-toggle4')} id="ex2-toggle4"> Item four - +

Donec vel posuere orci. Phasellus quis tortor a ex hendrerit efficitur. Aliquam lacinia ligula pharetra, sagittis ex ut, pellentesque diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere @@ -89,15 +68,11 @@ export const AccordionFixedWithMultipleExpandBehavior: React.FunctionComponent =

- - toggle('ex2-toggle5')} - isExpanded={expanded.includes('ex2-toggle5')} - id="ex2-toggle5" - > + + toggle('ex2-toggle5')} id="ex2-toggle5"> Item five - +

Vivamus finibus dictum ex id ultrices. Mauris dictum neque a iaculis blandit.

diff --git a/packages/react-core/src/components/Accordion/examples/AccordionSingleExpandBehavior.tsx b/packages/react-core/src/components/Accordion/examples/AccordionSingleExpandBehavior.tsx index 332282c6811..17359cc4c0d 100644 --- a/packages/react-core/src/components/Accordion/examples/AccordionSingleExpandBehavior.tsx +++ b/packages/react-core/src/components/Accordion/examples/AccordionSingleExpandBehavior.tsx @@ -14,17 +14,16 @@ export const AccordionSingleExpandBehavior: React.FunctionComponent = () => { return ( - + { onToggle('ex-toggle1'); }} - isExpanded={expanded === 'ex-toggle1'} id="ex-toggle1" > Item one - +

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. @@ -32,17 +31,16 @@ export const AccordionSingleExpandBehavior: React.FunctionComponent = () => { - + { onToggle('ex-toggle2'); }} - isExpanded={expanded === 'ex-toggle2'} id="ex-toggle2" > Item two - +

Vivamus et tortor sed arcu congue vehicula eget et diam. Praesent nec dictum lorem. Aliquam id diam ultrices, faucibus erat id, maximus nunc. @@ -50,32 +48,30 @@ export const AccordionSingleExpandBehavior: React.FunctionComponent = () => { - + { onToggle('ex-toggle3'); }} - isExpanded={expanded === 'ex-toggle3'} id="ex-toggle3" > Item three - +

Morbi vitae urna quis nunc convallis hendrerit. Aliquam congue orci quis ultricies tempus.

- + { onToggle('ex-toggle4'); }} - isExpanded={expanded === 'ex-toggle4'} id="ex-toggle4" > Item four - +

Donec vel posuere orci. Phasellus quis tortor a ex hendrerit efficitur. Aliquam lacinia ligula pharetra, sagittis ex ut, pellentesque diam. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere @@ -88,17 +84,16 @@ export const AccordionSingleExpandBehavior: React.FunctionComponent = () => { - + { onToggle('ex-toggle5'); }} - isExpanded={expanded === 'ex-toggle5'} id="ex-toggle5" > Item five - +

Vivamus finibus dictum ex id ultrices. Mauris dictum neque a iaculis blandit.

From c695d53893f736e094d1439a6ea5952bdf90c7e7 Mon Sep 17 00:00:00 2001 From: Eric Olkowski Date: Mon, 11 Dec 2023 15:00:25 -0500 Subject: [PATCH 2/4] Updated unit tests --- .../components/Accordion/AccordionContent.tsx | 7 +- .../__tests__/AccordionContent.test.tsx | 92 ++++++++++++------- .../__tests__/AccordionItem.test.tsx | 20 +++- .../__tests__/AccordionToggle.test.tsx | 22 +++-- .../Generated/AccordionContent.test.tsx | 23 ----- .../Generated/AccordionItem.test.tsx | 13 --- .../Generated/AccordionToggle.test.tsx | 21 ----- .../AccordionContent.test.tsx.snap | 7 -- .../__snapshots__/AccordionItem.test.tsx.snap | 7 -- .../AccordionToggle.test.tsx.snap | 7 -- .../AccordionContent.test.tsx.snap | 2 +- .../__snapshots__/AccordionItem.test.tsx.snap | 6 +- 12 files changed, 98 insertions(+), 129 deletions(-) delete mode 100644 packages/react-core/src/components/Accordion/__tests__/Generated/AccordionContent.test.tsx delete mode 100644 packages/react-core/src/components/Accordion/__tests__/Generated/AccordionItem.test.tsx delete mode 100644 packages/react-core/src/components/Accordion/__tests__/Generated/AccordionToggle.test.tsx delete mode 100644 packages/react-core/src/components/Accordion/__tests__/Generated/__snapshots__/AccordionContent.test.tsx.snap delete mode 100644 packages/react-core/src/components/Accordion/__tests__/Generated/__snapshots__/AccordionItem.test.tsx.snap delete mode 100644 packages/react-core/src/components/Accordion/__tests__/Generated/__snapshots__/AccordionToggle.test.tsx.snap diff --git a/packages/react-core/src/components/Accordion/AccordionContent.tsx b/packages/react-core/src/components/Accordion/AccordionContent.tsx index 4bcb4ba5c95..695313627df 100644 --- a/packages/react-core/src/components/Accordion/AccordionContent.tsx +++ b/packages/react-core/src/components/Accordion/AccordionContent.tsx @@ -56,12 +56,7 @@ export const AccordionContent: React.FunctionComponent =