diff --git a/packages/react-ui/components/Button/Button.tsx b/packages/react-ui/components/Button/Button.tsx index 5e82d8a4767..d4d0446b29c 100644 --- a/packages/react-ui/components/Button/Button.tsx +++ b/packages/react-ui/components/Button/Button.tsx @@ -13,7 +13,7 @@ import { rootNode, TSetRootNode } from '../../lib/rootNode'; import { ThemeFactory } from '../../lib/theming/ThemeFactory'; import { createPropsGetter } from '../../lib/createPropsGetter'; import { isTheme2022 } from '../../lib/theming/ThemeHelpers'; -import { Link } from '../Link'; +import { Link, LinkProps } from '../Link'; import { Spinner } from '../Spinner'; import { LoadingIcon } from '../../internal/icons2022/LoadingIcon'; import { SizeProp } from '../../lib/types/props'; @@ -257,6 +257,11 @@ export class Button extends React.Component { ); } + private renderLinkRootWithoutHandlers(props: LinkProps) { + const { onClick, onFocus, onBlur, children, ...rest } = props; + return {children}; + } + private renderMain() { const { corners, @@ -473,7 +478,13 @@ export class Button extends React.Component { if (_isTheme2022 && isLink && !loading) { captionNode = ( - + {children} diff --git a/packages/react-ui/components/Button/__tests__/Button-test.tsx b/packages/react-ui/components/Button/__tests__/Button-test.tsx index d69764b8ea6..0c326352206 100644 --- a/packages/react-ui/components/Button/__tests__/Button-test.tsx +++ b/packages/react-ui/components/Button/__tests__/Button-test.tsx @@ -208,4 +208,31 @@ describe('Button', () => { expect(screen.getByTestId(ButtonDataTids.spinner)).toBeInTheDocument(); }); + + describe('with use=link prop', () => { + const handleSubmit = jest.fn(); + const handleReset = jest.fn(); + const TestForm = ({ submit }: { submit?: boolean }) => { + return ( + +
+ +
+
+ ); + }; + it('type=submit submits form on click (THEME_2022)', () => { + render(); + userEvent.click(screen.getByText('Submit')); + expect(handleSubmit).toHaveBeenCalled(); + }); + + it('type=reset resets form on click (THEME_2022)', () => { + render(); + userEvent.click(screen.getByText('Reset')); + expect(handleReset).toHaveBeenCalled(); + }); + }); });