Skip to content

Commit c3c6f06

Browse files
authored
feat(ObjectPage): introduce preserveHeaderStateOnClick prop (#6049)
1 parent 545612e commit c3c6f06

File tree

2 files changed

+35
-8
lines changed

2 files changed

+35
-8
lines changed

packages/main/src/components/ObjectPage/ObjectPage.cy.tsx

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,28 @@ describe('ObjectPage', () => {
7171
cy.findByText('ObjectPageHeader').should('be.visible');
7272
cy.get('@toggleSpy').should('have.been.calledWith', true);
7373
cy.get('@toggleSpy').should('have.callCount', 4);
74+
75+
cy.mount(
76+
<ObjectPage
77+
headerTitle={<ObjectPageTitle header="Heading" subHeader="SubHeading" />}
78+
headerContent={<ObjectPageHeader>ObjectPageHeader</ObjectPageHeader>}
79+
onToggleHeaderContent={toggle}
80+
hidePinButton
81+
preserveHeaderStateOnClick
82+
>
83+
<ObjectPageSection id="section" titleText="Section">
84+
Content
85+
</ObjectPageSection>
86+
</ObjectPage>
87+
);
88+
89+
cy.findByText('Heading').click();
90+
cy.findByText('ObjectPageHeader').should('be.visible');
91+
cy.get('@toggleSpy').should('have.callCount', 4);
92+
93+
cy.get('[data-component-name="ObjectPageTitle"]').click();
94+
cy.findByText('ObjectPageHeader').should('be.visible');
95+
cy.get('@toggleSpy').should('have.callCount', 4);
7496
});
7597

7698
it('pin header', () => {

packages/main/src/components/ObjectPage/index.tsx

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -132,6 +132,12 @@ export interface ObjectPagePropTypes extends Omit<CommonProps, 'placeholder'> {
132132
* Defines if the pin button for the `headerContent` is hidden.
133133
*/
134134
hidePinButton?: boolean;
135+
/**
136+
* Determines whether the user can switch between the expanded/collapsed states of the `ObjectPageHeader` by clicking on the `ObjectPageTitle`.
137+
*
138+
* __Note:__ Per default the header is toggleable.
139+
*/
140+
preserveHeaderStateOnClick?: boolean;
135141
/**
136142
* Defines internally used accessibility properties/attributes.
137143
*/
@@ -192,6 +198,7 @@ const ObjectPage = forwardRef<HTMLDivElement, ObjectPagePropTypes>((props, ref)
192198
headerPinned: headerPinnedProp,
193199
headerContent,
194200
hidePinButton,
201+
preserveHeaderStateOnClick,
195202
accessibilityAttributes,
196203
placeholder,
197204
onSelectedSectionChange,
@@ -598,13 +605,11 @@ const ObjectPage = forwardRef<HTMLDivElement, ObjectPagePropTypes>((props, ref)
598605
}
599606
}, [isAfterScroll]);
600607

601-
const onTitleClick = useCallback(
602-
(e) => {
603-
e.stopPropagation();
608+
const onTitleClick = (e) => {
609+
e.stopPropagation();
610+
if (!preserveHeaderStateOnClick)
604611
onToggleHeaderContentVisibility(enrichEventWithDetails(e, { visible: headerCollapsed }));
605-
},
606-
[onToggleHeaderContentVisibility, headerCollapsed]
607-
);
612+
};
608613

609614
const snappedHeaderInObjPage = headerTitle && headerTitle.props.snappedContent && headerCollapsed === true && !!image;
610615

@@ -743,7 +748,7 @@ const ObjectPage = forwardRef<HTMLDivElement, ObjectPagePropTypes>((props, ref)
743748
data-component-name="ObjectPageTopHeader"
744749
ref={topHeaderRef}
745750
role={accessibilityAttributes?.objectPageTopHeader?.role}
746-
data-not-clickable={false}
751+
data-not-clickable={!!preserveHeaderStateOnClick}
747752
aria-roledescription={accessibilityAttributes?.objectPageTopHeader?.ariaRoledescription ?? 'Object Page header'}
748753
className={classNames.header}
749754
onClick={onTitleClick}
@@ -760,7 +765,7 @@ const ObjectPage = forwardRef<HTMLDivElement, ObjectPagePropTypes>((props, ref)
760765
cloneElement(headerTitle as ReactElement<ObjectPageTitlePropsWithDataAttributes>, {
761766
className: clsx(headerTitle?.props?.className),
762767
onToggleHeaderContentVisibility: onTitleClick,
763-
'data-not-clickable': false,
768+
'data-not-clickable': !!preserveHeaderStateOnClick,
764769
'data-header-content-visible': headerContent && headerCollapsed !== true,
765770
'data-is-snapped-rendered-outside': snappedHeaderInObjPage
766771
})}

0 commit comments

Comments
 (0)