diff --git a/src/base/FormHelperText/FormHelperText.test.tsx b/src/base/FormHelperText/FormHelperText.test.tsx new file mode 100644 index 000000000..e7b6c4d12 --- /dev/null +++ b/src/base/FormHelperText/FormHelperText.test.tsx @@ -0,0 +1,46 @@ +import { render, screen } from '@testing-library/react'; +import React from 'react'; +import FormHelperText from './FormHelperText'; + +describe('FormHelperText Component', () => { + it('renders children correctly', () => { + render(Sample Helper Text); + expect(screen.getByText('Sample Helper Text')).toBeTruthy(); + }); + + it('forwards ref correctly to the underlying HTML element', () => { + const ref = React.createRef(); + render(Ref Attached Text); + expect(ref.current).toBeInstanceOf(HTMLParagraphElement); + expect(ref.current?.textContent).toBe('Ref Attached Text'); + }); + + it('renders with custom component prop', () => { + render(Span Helper Text); + const element = screen.getByText('Span Helper Text'); + expect(element.tagName).toBe('SPAN'); + expect(element).toBeTruthy(); + }); + + it('forwards ref correctly when rendered with a custom component', () => { + const ref = React.createRef(); + render( + + Span Helper Text + + ); + expect(ref.current).toBeInstanceOf(HTMLSpanElement); + expect(ref.current?.tagName).toBe('SPAN'); + }); + + it('applies custom className and props', () => { + render( + + Error state text + + ); + const element = screen.getByTestId('custom-helper'); + expect(element.className).toContain('custom-class'); + expect(element.className).toContain('Mui-error'); + }); +}); diff --git a/src/base/FormHelperText/FormHelperText.tsx b/src/base/FormHelperText/FormHelperText.tsx new file mode 100644 index 000000000..c9dded441 --- /dev/null +++ b/src/base/FormHelperText/FormHelperText.tsx @@ -0,0 +1,29 @@ +import MuiFormHelperText, { + FormHelperTextProps as MuiFormHelperTextProps, + FormHelperTextTypeMap +} from '@mui/material/FormHelperText'; +import { OverridableComponent } from '@mui/material/OverridableComponent'; +import React from 'react'; + +export type SistentFormHelperTextProps< + D extends React.ElementType = FormHelperTextTypeMap['defaultComponent'], + P extends object = object +> = MuiFormHelperTextProps; + +type FormHelperTextComponent = OverridableComponent & { + displayName?: string; +}; + +export const FormHelperText: FormHelperTextComponent = React.forwardRef( + ({ children, ...props }: SistentFormHelperTextProps, ref: React.Ref) => { + return ( + } {...props}> + {children} + + ); + } +) as FormHelperTextComponent; + +FormHelperText.displayName = 'FormHelperText'; + +export default FormHelperText; diff --git a/src/base/FormHelperText/index.ts b/src/base/FormHelperText/index.ts new file mode 100644 index 000000000..91104b497 --- /dev/null +++ b/src/base/FormHelperText/index.ts @@ -0,0 +1 @@ +export * from './FormHelperText'; diff --git a/src/base/index.tsx b/src/base/index.tsx index f416f5e06..2bdba026e 100644 --- a/src/base/index.tsx +++ b/src/base/index.tsx @@ -96,3 +96,4 @@ export * from './Toolbar'; export * from './Tooltip'; export * from './Typography'; export * from './Zoom'; +export * from './FormHelperText';