mirror of
https://github.com/kremalicious/metamask-extension.git
synced 2024-10-22 19:26:13 +02:00
TextFieldBase updates after design reveiw (#16201)
* Setting truncate to true by default * Updating readOnly to not have a focus state * Updating focus state to be browser outline default * Removing default args so storybook doesn't become out of sync with default props * Updating outline CSS
This commit is contained in:
parent
da4e6d3e37
commit
29a33b4692
@ -69,7 +69,7 @@ import { TextFieldBase } from '../../ui/component-library/text-field-base';
|
|||||||
|
|
||||||
### Truncate
|
### Truncate
|
||||||
|
|
||||||
Use the `truncate` prop to truncate the text of the the `TextFieldBase`
|
Use the `truncate` prop to truncate the text of the the `TextFieldBase`. Defaults to `true`.
|
||||||
|
|
||||||
<Canvas>
|
<Canvas>
|
||||||
<Story id="ui-components-component-library-text-field-base-text-field-base-stories-js--truncate" />
|
<Story id="ui-components-component-library-text-field-base-text-field-base-stories-js--truncate" />
|
||||||
@ -78,7 +78,8 @@ Use the `truncate` prop to truncate the text of the the `TextFieldBase`
|
|||||||
```jsx
|
```jsx
|
||||||
import { TextFieldBase } from '../../ui/component-library/text-field-base';
|
import { TextFieldBase } from '../../ui/component-library/text-field-base';
|
||||||
|
|
||||||
<TextFieldBase truncate />;
|
<TextFieldBase truncate />; // truncate is set to `true` by default
|
||||||
|
<TextFieldBase truncate={false} />;
|
||||||
```
|
```
|
||||||
|
|
||||||
### Left Accessory Right Accessory
|
### Left Accessory Right Accessory
|
||||||
@ -273,7 +274,7 @@ import { TextFieldBase } from '../../ui/component-library/text-field-base';
|
|||||||
|
|
||||||
### Read Only
|
### Read Only
|
||||||
|
|
||||||
Use the `readOnly` prop to set the `TextFieldBase` to read only
|
Use the `readOnly` prop to set the `TextFieldBase` to read only. When `readOnly` is true `TextFieldBase` will not have a focus state.
|
||||||
|
|
||||||
<Canvas>
|
<Canvas>
|
||||||
<Story id="ui-components-component-library-text-field-base-text-field-base-stories-js--read-only" />
|
<Story id="ui-components-component-library-text-field-base-text-field-base-stories-js--read-only" />
|
||||||
|
@ -42,7 +42,7 @@ export const TextFieldBase = ({
|
|||||||
required,
|
required,
|
||||||
size = SIZES.MD,
|
size = SIZES.MD,
|
||||||
type = 'text',
|
type = 'text',
|
||||||
truncate,
|
truncate = true,
|
||||||
value,
|
value,
|
||||||
...props
|
...props
|
||||||
}) => {
|
}) => {
|
||||||
@ -95,7 +95,7 @@ export const TextFieldBase = ({
|
|||||||
'mm-text-field-base',
|
'mm-text-field-base',
|
||||||
`mm-text-field-base--size-${size}`,
|
`mm-text-field-base--size-${size}`,
|
||||||
{
|
{
|
||||||
'mm-text-field-base--focused': focused && !disabled,
|
'mm-text-field-base--focused': focused && !disabled && !readOnly,
|
||||||
'mm-text-field-base--error': error,
|
'mm-text-field-base--error': error,
|
||||||
'mm-text-field-base--disabled': disabled,
|
'mm-text-field-base--disabled': disabled,
|
||||||
'mm-text-field-base--truncate': truncate,
|
'mm-text-field-base--truncate': truncate,
|
||||||
@ -211,6 +211,10 @@ TextFieldBase.propTypes = {
|
|||||||
* Callback fired when the value is changed.
|
* Callback fired when the value is changed.
|
||||||
*/
|
*/
|
||||||
onChange: PropTypes.func,
|
onChange: PropTypes.func,
|
||||||
|
/**
|
||||||
|
* Callback fired when the TextField is clicked on
|
||||||
|
*/
|
||||||
|
onClick: PropTypes.func,
|
||||||
/**
|
/**
|
||||||
* Callback fired on focus
|
* Callback fired on focus
|
||||||
*/
|
*/
|
||||||
@ -237,6 +241,11 @@ TextFieldBase.propTypes = {
|
|||||||
* Defaults to TEXT_FIELD_BASE_TYPES.TEXT ('text')
|
* Defaults to TEXT_FIELD_BASE_TYPES.TEXT ('text')
|
||||||
*/
|
*/
|
||||||
type: PropTypes.oneOf(Object.values(TEXT_FIELD_BASE_TYPES)),
|
type: PropTypes.oneOf(Object.values(TEXT_FIELD_BASE_TYPES)),
|
||||||
|
/**
|
||||||
|
* If true will ellipse the text of the input
|
||||||
|
* Defaults to true
|
||||||
|
*/
|
||||||
|
truncate: PropTypes.bool,
|
||||||
/**
|
/**
|
||||||
* The input value, required for a controlled component.
|
* The input value, required for a controlled component.
|
||||||
*/
|
*/
|
||||||
|
@ -17,7 +17,8 @@
|
|||||||
border-color: var(--color-border-default);
|
border-color: var(--color-border-default);
|
||||||
|
|
||||||
&--focused {
|
&--focused {
|
||||||
border-color: var(--color-primary-default);
|
outline: 5px auto Highlight; // firefox
|
||||||
|
outline: 5px auto -webkit-focus-ring-color; // chrome
|
||||||
}
|
}
|
||||||
|
|
||||||
&--error {
|
&--error {
|
||||||
|
@ -141,16 +141,6 @@ export default {
|
|||||||
},
|
},
|
||||||
args: {
|
args: {
|
||||||
placeholder: 'Placeholder...',
|
placeholder: 'Placeholder...',
|
||||||
autoFocus: false,
|
|
||||||
defaultValue: '',
|
|
||||||
disabled: false,
|
|
||||||
error: false,
|
|
||||||
id: '',
|
|
||||||
readOnly: false,
|
|
||||||
required: false,
|
|
||||||
size: SIZES.MD,
|
|
||||||
type: 'text',
|
|
||||||
truncate: false,
|
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -24,6 +24,21 @@ describe('TextFieldBase', () => {
|
|||||||
fireEvent.change(textFieldBase, { target: { value: '' } }); // reset value
|
fireEvent.change(textFieldBase, { target: { value: '' } }); // reset value
|
||||||
expect(textFieldBase.value).toBe(''); // value is empty string after reset
|
expect(textFieldBase.value).toBe(''); // value is empty string after reset
|
||||||
});
|
});
|
||||||
|
it('should render with focused state when clicked', () => {
|
||||||
|
const { getByTestId } = render(
|
||||||
|
<TextFieldBase
|
||||||
|
data-testid="text-field-base"
|
||||||
|
inputProps={{ 'data-testid': 'input' }}
|
||||||
|
/>,
|
||||||
|
);
|
||||||
|
const textFieldBase = getByTestId('text-field-base');
|
||||||
|
|
||||||
|
fireEvent.click(textFieldBase);
|
||||||
|
expect(getByTestId('input')).toHaveFocus();
|
||||||
|
expect(getByTestId('text-field-base')).toHaveClass(
|
||||||
|
'mm-text-field-base--focused ',
|
||||||
|
);
|
||||||
|
});
|
||||||
it('should render and fire onFocus and onBlur events', () => {
|
it('should render and fire onFocus and onBlur events', () => {
|
||||||
const onFocus = jest.fn();
|
const onFocus = jest.fn();
|
||||||
const onBlur = jest.fn();
|
const onBlur = jest.fn();
|
||||||
@ -103,11 +118,17 @@ describe('TextFieldBase', () => {
|
|||||||
'password',
|
'password',
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('should render with truncate class', () => {
|
it('should render with truncate class as true by default and remove it when truncate is false', () => {
|
||||||
const { getByTestId } = render(
|
const { getByTestId } = render(
|
||||||
<TextFieldBase truncate data-testid="truncate" />,
|
<>
|
||||||
|
<TextFieldBase data-testid="truncate" />
|
||||||
|
<TextFieldBase truncate={false} data-testid="no-truncate" />
|
||||||
|
</>,
|
||||||
);
|
);
|
||||||
expect(getByTestId('truncate')).toHaveClass('mm-text-field-base--truncate');
|
expect(getByTestId('truncate')).toHaveClass('mm-text-field-base--truncate');
|
||||||
|
expect(getByTestId('no-truncate')).not.toHaveClass(
|
||||||
|
'mm-text-field-base--truncate',
|
||||||
|
);
|
||||||
});
|
});
|
||||||
it('should render with right and left accessories', () => {
|
it('should render with right and left accessories', () => {
|
||||||
const { getByRole, getByText } = render(
|
const { getByRole, getByText } = render(
|
||||||
@ -190,9 +211,13 @@ describe('TextFieldBase', () => {
|
|||||||
const { getByTestId } = render(
|
const { getByTestId } = render(
|
||||||
<TextFieldBase
|
<TextFieldBase
|
||||||
readOnly
|
readOnly
|
||||||
|
data-testid="read-only"
|
||||||
inputProps={{ 'data-testid': 'text-field-base-readonly' }}
|
inputProps={{ 'data-testid': 'text-field-base-readonly' }}
|
||||||
/>,
|
/>,
|
||||||
);
|
);
|
||||||
|
expect(getByTestId('read-only')).not.toHaveClass(
|
||||||
|
'mm-text-field-base--focused ',
|
||||||
|
);
|
||||||
expect(getByTestId('text-field-base-readonly')).toHaveAttribute(
|
expect(getByTestId('text-field-base-readonly')).toHaveAttribute(
|
||||||
'readonly',
|
'readonly',
|
||||||
'',
|
'',
|
||||||
|
Loading…
Reference in New Issue
Block a user