Skip to content

Commit 398a258

Browse files
committed
phone field
1 parent 729fa1e commit 398a258

File tree

1 file changed

+13
-36
lines changed
  • services/web/src/components/form-fields

1 file changed

+13
-36
lines changed

services/web/src/components/form-fields/Phone.js

+13-36
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,11 @@ import React from 'react';
22
import PropTypes from 'prop-types';
33
import { omit } from 'lodash';
44

5-
import { Form, Input, Message, Dropdown, Flag } from 'semantic';
5+
import { Input, Dropdown, Flag } from 'semantic';
66

7-
import { COUNTRIES, getFormatLength, formatPhone } from 'utils/phone';
7+
import { COUNTRIES, formatPhone } from 'utils/phone';
8+
9+
import Field from './Field';
810

911
export default class PhoneField extends React.Component {
1012
constructor(props) {
@@ -27,17 +29,14 @@ export default class PhoneField extends React.Component {
2729
}
2830

2931
onChange = (evt, { value, ...rest }) => {
30-
const { country } = this.state;
31-
const maxLength = getFormatLength(country);
32-
3332
value = value.replace(/[ ()@.+-]/g, '');
34-
value = value.replace(/^1(\d)/, '$1');
35-
value = value.replace(/[^\d-]/gi, '');
33+
value = value.replace(/^[01](\d)/, '$1');
34+
value = value.replace(/[a-z]/gi, '');
3635
value = value.trim();
37-
value = value.slice(0, maxLength);
38-
3936
if (value) {
4037
value = `${this.getPrefix()}${value}`;
38+
} else {
39+
value = undefined;
4140
}
4241
this.props.onChange(evt, {
4342
...rest,
@@ -46,24 +45,21 @@ export default class PhoneField extends React.Component {
4645
};
4746

4847
render() {
49-
const { required, label, error } = this.props;
48+
const { label } = this.props;
49+
const props = omit(this.props, Object.keys(PhoneField.propTypes));
5050
return (
51-
<Form.Field
52-
required={required}
53-
disabled={this.props.disabled}
54-
error={error?.hasField?.('phone')}>
51+
<Field {...props}>
5552
{label && <label>{label}</label>}
5653
<Input
57-
{...omit(this.props, Object.keys(PhoneField.propTypes))}
54+
{...Field.getInnerProps(props)}
5855
{...this.renderLabelProps()}
5956
type="tel"
6057
autoComplete="tel"
6158
value={this.renderFormattedValue()}
6259
onChange={this.onChange}
6360
ref={this.ref}
6461
/>
65-
{this.renderFieldErrors()}
66-
</Form.Field>
62+
</Field>
6763
);
6864
}
6965

@@ -115,24 +111,6 @@ export default class PhoneField extends React.Component {
115111
const country = COUNTRIES[this.state.country];
116112
return formatPhone(value, country);
117113
}
118-
119-
renderFieldErrors() {
120-
const { error } = this.props;
121-
const details = error?.getFieldDetails?.('phone');
122-
if (details) {
123-
return (
124-
<React.Fragment>
125-
<Message size="small" error>
126-
<Message.Content>
127-
{details.map((d, i) => {
128-
return <div key={i}>{d.message}</div>;
129-
})}
130-
</Message.Content>
131-
</Message>
132-
</React.Fragment>
133-
);
134-
}
135-
}
136114
}
137115

138116
PhoneField.propTypes = {
@@ -147,5 +125,4 @@ PhoneField.defaultProps = {
147125
intl: false,
148126
icon: 'phone',
149127
country: 'us',
150-
placeholder: 'Phone Number',
151128
};

0 commit comments

Comments
 (0)