diff --git a/src/components/forms/InputGroup/InputGroup.test.tsx b/src/components/forms/InputGroup/InputGroup.test.tsx new file mode 100644 index 0000000000..6bfb527739 --- /dev/null +++ b/src/components/forms/InputGroup/InputGroup.test.tsx @@ -0,0 +1,31 @@ +import React from 'react' +import { render } from '@testing-library/react' + +import { InputGroup } from './InputGroup' + +describe('InputGroup component', () => { + it('renders without errors', () => { + const { queryByTestId } = render(My Input Group) + expect(queryByTestId('inputGroup')).toBeInTheDocument() + expect(queryByTestId('inputGroup')).toHaveClass('usa-input-group') + }) + + it('renders its children', () => { + const { queryByText } = render(My Input Group) + expect(queryByText('My Input Group')).toBeInTheDocument() + }) + + it('adds the error class when error is true', () => { + const { queryByTestId } = render( + My Input Group + ) + expect(queryByTestId('inputGroup')).toHaveClass('usa-input-group--error') + }) + + it('adds the provided className', () => { + const { queryByTestId } = render( + My Input Group + ) + expect(queryByTestId('inputGroup')).toHaveClass('my-class') + }) +}) diff --git a/src/components/forms/InputGroup/InputGroup.tsx b/src/components/forms/InputGroup/InputGroup.tsx new file mode 100644 index 0000000000..0c6084c757 --- /dev/null +++ b/src/components/forms/InputGroup/InputGroup.tsx @@ -0,0 +1,26 @@ +import React from 'react' +import classnames from 'classnames' + +export interface InputGroupProps { + children: React.ReactNode + className?: string + error?: boolean +} + +export const InputGroup = ({ + children, + className, + error, +}: InputGroupProps): React.ReactElement => { + const classes = classnames( + 'usa-input-group', + { 'usa-input-group--error': error }, + className + ) + + return ( +
+ {children} +
+ ) +} diff --git a/src/components/forms/InputPrefix/InputPrefix.stories.tsx b/src/components/forms/InputPrefix/InputPrefix.stories.tsx index 7af89b0e58..e3b64bd3db 100644 --- a/src/components/forms/InputPrefix/InputPrefix.stories.tsx +++ b/src/components/forms/InputPrefix/InputPrefix.stories.tsx @@ -2,6 +2,7 @@ import React from 'react' import { InputPrefix } from './InputPrefix' import { Icon } from '../../Icon/Icons' import { TextInput } from '../TextInput/TextInput' +import { InputGroup } from '../InputGroup/InputGroup' import { FormGroup } from '../FormGroup/FormGroup' export default { @@ -22,29 +23,29 @@ Source: https://designsystem.digital.gov/components/input-prefix-suffix/ export const InputWithTextInputPrefix = (): React.ReactElement => ( -
+ cvc -
+
) export const InputWithTextInputPrefixError = (): React.ReactElement => ( -
+ cvc -
+
) export const InputWithIconInputPrefix = (): React.ReactElement => ( -
+ -
+
) diff --git a/src/components/forms/InputSuffix/InputSuffix.stories.tsx b/src/components/forms/InputSuffix/InputSuffix.stories.tsx index edf4b3169a..acb060ab33 100644 --- a/src/components/forms/InputSuffix/InputSuffix.stories.tsx +++ b/src/components/forms/InputSuffix/InputSuffix.stories.tsx @@ -1,5 +1,6 @@ import React from 'react' import { InputSuffix } from './InputSuffix' +import { InputGroup } from '../InputGroup/InputGroup' import { FormGroup } from '../FormGroup/FormGroup' import { TextInput } from '../TextInput/TextInput' import { Icon } from '../../Icon/Icons' @@ -22,18 +23,18 @@ Source: https://designsystem.digital.gov/components/input-prefix-suffix/ export const InputWithIconInputSuffix = (): React.ReactElement => ( -
+ -
+
) export const InputWithIconInputSuffixError = (): React.ReactElement => ( -
+ ( -
+
) export const InputWithTextInputSuffix = (): React.ReactElement => ( -
+ lbs. -
+
) diff --git a/src/index.ts b/src/index.ts index 3650efe281..69af332d6e 100644 --- a/src/index.ts +++ b/src/index.ts @@ -59,6 +59,7 @@ export { FileInput } from './components/forms/FileInput/FileInput' export type { FileInputRef } from './components/forms/FileInput/FileInput' export { Form } from './components/forms/Form/Form' export { FormGroup } from './components/forms/FormGroup/FormGroup' +export { InputGroup } from './components/forms/InputGroup/InputGroup' export { InputPrefix } from './components/forms/InputPrefix/InputPrefix' export { InputSuffix } from './components/forms/InputSuffix/InputSuffix' export { Label } from './components/forms/Label/Label'