diff --git a/packages/grafana-ui/src/components/Select/SelectBase.test.tsx b/packages/grafana-ui/src/components/Select/SelectBase.test.tsx index 97d877616fd..f2b04373235 100644 --- a/packages/grafana-ui/src/components/Select/SelectBase.test.tsx +++ b/packages/grafana-ui/src/components/Select/SelectBase.test.tsx @@ -9,7 +9,7 @@ import { selectOptionInTest } from '../../../../../public/test/helpers/selectOpt import { SelectBase } from './SelectBase'; describe('SelectBase', () => { - const onChangeHandler = () => jest.fn(); + const onChangeHandler = jest.fn(); const options: Array> = [ { label: 'Option 1', @@ -218,4 +218,47 @@ describe('SelectBase', () => { expect(menuOptions).toHaveLength(2); }); }); + + describe('Multi select', () => { + it('calls on change to remove an item when the user presses the remove button', async () => { + const value = [ + { + label: 'Option 1', + value: 1, + }, + ]; + render( + + ); + + expect(screen.getByLabelText('My select')).toBeInTheDocument(); + + await userEvent.click(screen.getByLabelText('Remove Option 1')); + expect(onChangeHandler).toHaveBeenCalledWith([], { + action: 'remove-value', + name: undefined, + removedValue: { label: 'Option 1', value: 1 }, + }); + }); + it('does not allow deleting selected values when disabled', async () => { + const value = [ + { + label: 'Option 1', + value: 1, + }, + ]; + render( + + ); + + expect(screen.queryByLabelText('Remove Option 1')).not.toBeInTheDocument(); + }); + }); }); diff --git a/packages/grafana-ui/src/components/Select/SelectBase.tsx b/packages/grafana-ui/src/components/Select/SelectBase.tsx index 4b650d22394..eac330e6fb1 100644 --- a/packages/grafana-ui/src/components/Select/SelectBase.tsx +++ b/packages/grafana-ui/src/components/Select/SelectBase.tsx @@ -357,7 +357,7 @@ export function SelectBase({ }, SelectContainer, MultiValueContainer: MultiValueContainer, - MultiValueRemove: MultiValueRemove, + MultiValueRemove: !disabled ? MultiValueRemove : () => null, ...components, }} styles={selectStyles}