Skip to content

Commit f99ee3a

Browse files
vpomerleaudschom
authored andcommitted
fix(settings): Phone number input not working in non-Firefox browsers
Because: * Typing in phone number input was not working in browsers other than Firefox This commit: * use react-hook-form setValue to update input value with formatted phone number Closes #FXA-11163
1 parent 6904854 commit f99ee3a

File tree

3 files changed

+7
-7
lines changed

3 files changed

+7
-7
lines changed

packages/fxa-settings/src/components/FormPhoneNumber/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ const FormPhoneNumber = ({
3232
gleanDataAttrs,
3333
}: FormPhoneNumberProps) => {
3434
const [hasErrors, setHasErrors] = React.useState(false);
35-
const { control, formState, handleSubmit, register } =
35+
const { control, formState, handleSubmit, register, setValue } =
3636
useForm<InputPhoneNumberData>({
3737
mode: 'onChange',
3838
criteriaMode: 'all',
@@ -78,7 +78,7 @@ const FormPhoneNumber = ({
7878

7979
return (
8080
<form onSubmit={handleSubmit(onSubmit)}>
81-
<InputPhoneNumber {...{ hasErrors, register, errorBannerId }} />
81+
<InputPhoneNumber {...{ hasErrors, register, setValue, errorBannerId }} />
8282

8383
{infoBannerContent && !infoBannerLink && (
8484
<Banner

packages/fxa-settings/src/components/InputPhoneNumber/index.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ export type InputPhoneNumberProps = {
2020
countries?: Country[];
2121
hasErrors?: boolean;
2222
register: UseFormMethods['register'];
23+
setValue: UseFormMethods['setValue'];
2324
errorBannerId?: string;
2425
};
2526

@@ -56,6 +57,7 @@ const InputPhoneNumber = ({
5657
countries = defaultCountries,
5758
hasErrors = false,
5859
register,
60+
setValue,
5961
errorBannerId,
6062
}: InputPhoneNumberProps) => {
6163
const ftlMsgResolver = useFtlMsgResolver();
@@ -67,7 +69,6 @@ const InputPhoneNumber = ({
6769
localizedCountries.find((country) => country.id === 1) ||
6870
localizedCountries[0];
6971
const [selectedCountry, setSelectedCountry] = useState(defaultCountry);
70-
const [formattedPhoneNumber, setFormattedPhoneNumber] = useState('');
7172

7273
const localizedLabel = ftlMsgResolver.getMsg(
7374
'input-phone-number-enter-number',
@@ -86,7 +87,7 @@ const InputPhoneNumber = ({
8687
const handleInputChange = (event: React.ChangeEvent<HTMLInputElement>) => {
8788
const inputValue = event.target.value;
8889
const formattedValue = formatPhoneNumber(inputValue);
89-
setFormattedPhoneNumber(formattedValue);
90+
setValue('phoneNumber', formattedValue);
9091
};
9192

9293
// Format the phone number as the user types - for easier review by the user
@@ -168,7 +169,6 @@ const InputPhoneNumber = ({
168169
pattern: selectedCountry.validationPattern,
169170
})}
170171
{...{ hasErrors }}
171-
value={formattedPhoneNumber}
172172
onChange={handleInputChange}
173173
aria-describedby={errorBannerId}
174174
/>

packages/fxa-settings/src/components/InputPhoneNumber/mocks.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ export const extendedCountryOptions = [
4545
];
4646

4747
export const Subject = ({ countries = defaultCountries }) => {
48-
const { register } = useForm<InputPhoneNumberData>({
48+
const { register, setValue } = useForm<InputPhoneNumberData>({
4949
mode: 'onChange',
5050
criteriaMode: 'all',
5151
defaultValues: {
@@ -56,7 +56,7 @@ export const Subject = ({ countries = defaultCountries }) => {
5656

5757
return (
5858
<AppLayout>
59-
<InputPhoneNumber {...{ register, countries }} />
59+
<InputPhoneNumber {...{ register, setValue, countries }} />
6060
</AppLayout>
6161
);
6262
};

0 commit comments

Comments
 (0)