From dcd784ab0eb8f8a8ea68fab7b5cc6f8c4515c517 Mon Sep 17 00:00:00 2001 From: Kate Zaprazna Date: Sun, 9 Nov 2025 20:13:59 +0100 Subject: [PATCH] feat(BulkSelect): expose menuToggle props --- .../module/src/BulkSelect/BulkSelect.test.tsx | 29 +++++++++++++++++++ packages/module/src/BulkSelect/BulkSelect.tsx | 9 ++++-- 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/packages/module/src/BulkSelect/BulkSelect.test.tsx b/packages/module/src/BulkSelect/BulkSelect.test.tsx index 6623dc75..eddb94ce 100644 --- a/packages/module/src/BulkSelect/BulkSelect.test.tsx +++ b/packages/module/src/BulkSelect/BulkSelect.test.tsx @@ -40,4 +40,33 @@ describe('BulkSelect component', () => { expect(dropdownList).toBeInTheDocument(); expect(dropdownList).toHaveClass('pf-v6-c-menu__list'); }); + + test('should render with menuToggleProps', () => { + render( + null} + menuToggleProps={{ isDisabled: true, className: 'custom-menu-toggle' }} + /> + ); + + const toggleButton = screen.getByLabelText('Bulk select toggle'); + expect(toggleButton).toBeInTheDocument(); + + // Confirm the split button toggle is disabled + expect(toggleButton).toBeDisabled(); + + // Confirm the split button toggle receives the correct PatternFly class + expect(toggleButton).toHaveClass('pf-v6-c-menu-toggle__button'); + + // Confirm the split button toggle wrapper receives the custom class + const toggleWrapper = toggleButton.parentElement; + expect(toggleWrapper).toBeInTheDocument(); + expect(toggleWrapper).toHaveClass('custom-menu-toggle'); + }); }); \ No newline at end of file diff --git a/packages/module/src/BulkSelect/BulkSelect.tsx b/packages/module/src/BulkSelect/BulkSelect.tsx index 85211817..852008de 100644 --- a/packages/module/src/BulkSelect/BulkSelect.tsx +++ b/packages/module/src/BulkSelect/BulkSelect.tsx @@ -9,7 +9,8 @@ import { MenuToggle, MenuToggleCheckbox, MenuToggleCheckboxProps, - MenuToggleElement + MenuToggleElement, + MenuToggleProps } from '@patternfly/react-core'; export const BulkSelectValue = { @@ -47,6 +48,8 @@ export interface BulkSelectProps extends Omit; /** Additional props for DropdownList */ dropdownListProps?: Omit; + /** Additional props for MenuToggleProps */ + menuToggleProps?: Omit; } export const BulkSelect: FC = ({ @@ -61,6 +64,7 @@ export const BulkSelect: FC = ({ onSelect, menuToggleCheckboxProps, dropdownListProps, + menuToggleProps, ...props }: BulkSelectProps) => { const [ isOpen, setOpen ] = useState(false); @@ -116,7 +120,7 @@ export const BulkSelect: FC = ({ aria-label={`Select ${allOption}`} isChecked={ (isDataPaginated && pagePartiallySelected) || - (!isDataPaginated && selectedCount > 0 && selectedCount < totalCount) + (!isDataPaginated && selectedCount > 0 && selectedCount < totalCount) ? null : pageSelected || (selectedCount === totalCount && totalCount > 0) } @@ -129,6 +133,7 @@ export const BulkSelect: FC = ({ ) : null ]} + {...menuToggleProps} /> )} {...props}