Skip to content

Commit

Permalink
multiple groups second pass
Browse files Browse the repository at this point in the history
  • Loading branch information
kmcfaul committed Jul 11, 2023
1 parent 0a71f0d commit e4e10c3
Show file tree
Hide file tree
Showing 5 changed files with 149 additions and 74 deletions.
25 changes: 16 additions & 9 deletions packages/react-core/src/components/Toolbar/ToolbarContent.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,8 @@ export interface ToolbarContentProps extends React.HTMLProps<HTMLDivElement> {
clearFiltersButtonText?: string;
/** Id of the parent Toolbar component */
toolbarId?: string;
/** Custom expandable content for the toolbar, for non-managed multiple toolbar toggle groups. */
expandableContent?: React.ReactNode;
}

export class ToolbarContent extends React.Component<ToolbarContentProps> {
Expand All @@ -58,6 +60,7 @@ export class ToolbarContent extends React.Component<ToolbarContentProps> {
showClearFiltersButton,
clearFiltersButtonText,
alignSelf,
expandableContent,
...props
} = this.props;

Expand Down Expand Up @@ -103,15 +106,19 @@ export class ToolbarContent extends React.Component<ToolbarContentProps> {
>
{children}
</div>
<ToolbarExpandableContent
id={expandableContentId}
isExpanded={isExpanded}
expandableContentRef={this.expandableContentRef}
chipContainerRef={this.chipContainerRef}
clearAllFilters={clearAllFilters || clearAllFiltersContext}
showClearFiltersButton={showClearFiltersButton || showClearFiltersButtonContext}
clearFiltersButtonText={clearFiltersButtonText || clearFiltersButtonContext}
/>
{expandableContent ? (
expandableContent
) : (
<ToolbarExpandableContent
id={expandableContentId}
isExpanded={isExpanded}
expandableContentRef={this.expandableContentRef}
chipContainerRef={this.chipContainerRef}
clearAllFilters={clearAllFilters || clearAllFiltersContext}
showClearFiltersButton={showClearFiltersButton || showClearFiltersButtonContext}
clearFiltersButtonText={clearFiltersButtonText || clearFiltersButtonContext}
/>
)}
</ToolbarContentContext.Provider>
);
}}
Expand Down
6 changes: 6 additions & 0 deletions packages/react-core/src/components/Toolbar/ToolbarFilter.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ export interface ToolbarFilterProps extends ToolbarItemProps {
categoryName: string | ToolbarChipGroup;
/** Flag to show the toolbar item */
showToolbarItem?: boolean;
/** Reference to a chip container created with a custom expandable content group, for non-managed multiple toolbar toggle groups. */
expandableChipContainerRef?: React.RefObject<HTMLDivElement>;
}

interface ToolbarFilterState {
Expand Down Expand Up @@ -93,6 +95,7 @@ export class ToolbarFilter extends React.Component<ToolbarFilterProps, ToolbarFi
categoryName,
showToolbarItem,
isExpanded,
expandableChipContainerRef,
...props
} = this.props;
const { isExpanded: managedIsExpanded, chipGroupContentRef } = this.context;
Expand Down Expand Up @@ -142,6 +145,9 @@ export class ToolbarFilter extends React.Component<ToolbarFilterProps, ToolbarFi
<React.Fragment>
{showToolbarItem && <ToolbarItem {...props}>{children}</ToolbarItem>}
{chipContainerRef.current && ReactDOM.createPortal(chipGroup, chipContainerRef.current)}
{expandableChipContainerRef &&
expandableChipContainerRef.current &&
ReactDOM.createPortal(chipGroup, expandableChipContainerRef.current)}
</React.Fragment>
)}
</ToolbarContentContext.Consumer>
Expand Down
19 changes: 13 additions & 6 deletions packages/react-core/src/components/Toolbar/ToolbarToggleGroup.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -50,10 +50,13 @@ export interface ToolbarToggleGroupProps extends ToolbarGroupProps {
xl?: 'spaceItemsNone' | 'spaceItemsSm' | 'spaceItemsMd' | 'spaceItemsLg';
'2xl'?: 'spaceItemsNone' | 'spaceItemsSm' | 'spaceItemsMd' | 'spaceItemsLg';
};
/** Reference to a custom expandable content group, for non-managed multiple toolbar toggle groups. */
expandableContentRef?: React.RefObject<any>;
}

export class ToolbarToggleGroup extends React.Component<ToolbarToggleGroupProps> {
static displayName = 'ToolbarToggleGroup';

isContentPopup = () => {
const viewportSize = canUseDOM ? window.innerWidth : 1200;
const lgBreakpointValue = parseInt(globalBreakpointLg.value);
Expand All @@ -72,6 +75,7 @@ export class ToolbarToggleGroup extends React.Component<ToolbarToggleGroupProps>
className,
children,
isExpanded,
expandableContentRef,
onToggle,
...props
} = this.props;
Expand All @@ -91,16 +95,19 @@ export class ToolbarToggleGroup extends React.Component<ToolbarToggleGroupProps>

return (
<ToolbarContentContext.Consumer>
{({ expandableContentRef, expandableContentId }) => {
{({ expandableContentRef: managedExpandableContentRef, expandableContentId }) => {
const _contentRef =
expandableContentRef !== undefined ? expandableContentRef : managedExpandableContentRef;

if (
isExpanded === undefined &&
expandableContentRef.current &&
expandableContentRef.current.classList
managedExpandableContentRef.current &&
managedExpandableContentRef.current.classList
) {
if (_isExpanded) {
expandableContentRef.current.classList.add(styles.modifiers.expanded);
managedExpandableContentRef.current.classList.add(styles.modifiers.expanded);
} else {
expandableContentRef.current.classList.remove(styles.modifiers.expanded);
managedExpandableContentRef.current.classList.remove(styles.modifiers.expanded);
}
}

Expand Down Expand Up @@ -143,7 +150,7 @@ export class ToolbarToggleGroup extends React.Component<ToolbarToggleGroupProps>
{_isExpanded
? (ReactDOM.createPortal(
children,
expandableContentRef.current.firstElementChild
_contentRef.current.firstElementChild
) as React.ReactElement)
: children}
</div>
Expand Down
Loading

0 comments on commit e4e10c3

Please sign in to comment.