Phone
Base
País inicialmente selecionado
Baseado no número do telefone
O valor inicial das propriedades value
ou defaultValue
deve, obrigatoriamente, começar com o caractere +
, seguido pelo código do país.
O país inicialmente selecionado será identificado, principalmente, pelo número de telefone passado para as propriedades value
ou defaultValue
, durante a inicialização do componente.
A ausência de uma dessas informações pode impedir o componente de identificar automaticamente o país, provocando a exibição de um alerta, como no exemplo abaixo:
Baseado no valor da propriedade defaultCountry
Também é possível indicar o país selecionado através da propriedade defaultCountry
, inserindo o código do país no formato ISO de dois dígitos.
Baseado no idioma padrão do navegador
Caso nenhum valor seja passado para as propriedades value
, defaultValue
ou defaultCountry
, o país selecionado será identificado automaticamente com base no idioma padrão do navegador da pessoa usuária.
Máscaras adaptáveis
Durante a digitação do número do telefone, o componente Phone
automaticamente ajusta a máscara para o formato adequado - quando o país selecionado tiver mais de um formato aplicável.
Como é o caso do Brasil, que possui que possui um formato para telefones fixos ((99) 9999-9999
) e outro para números de celular ((99) 99999-9999
).
Não controlado vs. Controlado
Diferente de outros componentes de formulário, o Phone
não suporta uma versão controlada.
Habilitar este tipo de controle conflitaria com a existência de máscaras para os formatos de telefone de diferentes países.
Por esta razão, a propriedade value
é apenas um alias para a propriedade defaultValue
e existe para manter a consistência com os demais componentes de formulário.
Veja no exemplo abaixo como o componente Phone
pode ser usado simulando um comportamento controlado em um cenário real.
Eventos de formulário
Todos os eventos-chave de interação com o componente (onChange
, onClear
, onBlur
e onFocus
) esperam callbacks que suportem os mesmos tipos de parâmetros, em ordem:
- O objeto para o evento disparado
- O valor do campo sem a máscara e com o código do país
- Informações gerais sobre o estado do componente, como país selecionado, validade do valor inserido, entre outros
Não use a propriedade target.value
, proveniente do objeto do evento, para alterar o estado do formulário. Este argumento recebe o valor do campo como presente no input, ou seja, com máscara e sem o código do país.
O segundo argumento é mais adequado para alterar o estado do formulário, já que seu valor corresponde ao número de telefone digitado, sem máscara e com o código do país. Portanto, está no formato adequado para servir de entrada as propriedades value
e defaultValue
e para ser armazenado em bancos de dados.
Para mais detalhes acesse nossa aba de API do componente.
Erros e validações
A propriedade error
permite exibir o componente com aparência de inválido.
Integração com Form.Control
Assim como em outros componentes de formulário, o componente Phone
está integrado com o componente Form.Control
e recebe a propriedade error
automaticamente por meio dessa integração.
Validando o número de telefone
A validação do número digitado pode ser conferida em cada um dos eventos citados anteriormente, através do atributo valid
, presente no objeto com informações adicionais. Esta informação pode ser usada para validar o número do telefone digitado pela pessoa usuária.
React Hook Form
Use o componente Phone
junto com o React Hook Form. Para isso, instale essa dependência no projeto.
yarn add react-hook-form
Veja e teste o exemplo completo abaixo:
function ExampleWithReactHookForm() {
const { control, watch } = useForm();
const name = 'phone';
return (
<Form.Control>
<Controller
control={control}
name={name}
defaultValue={null}
render={({ onChange }) => (
<Phone
id={name}
name={name}
onClear={() => onChange('')}
onChange={(_, phone) => onChange(phone)}
/>
)}
/>
<Form.Feedback>{watch(name)}</Form.Feedback>
</Form.Control>
);
}
Internacionalização
É possível passar valores customizados para os diferentes textos usados internamente pelo componente. São eles:
countryNames
: Nomes customizados para os paísescountryCallingCodeLabelText
: Texto customizado para rotular o código do país. Este texto não é exibido, mas é útil para acessibilidadeselectedCountryLabelText
: Texto customizado para rotular a seleção do país. Este texto não é exibido, mas é útil para acessibilidadeclearLabelText
: Texto customizado para rotular o botão de limpar. Este texto não é exibido, mas é útil para acessibilidadeunidentifiedCountryTooltip
: Texto customizado para oTooltip
, exibido quando o país não foi adequadamente identificado (veja a seção País inicialmente selecionado)
Ao mudar o idioma padrão do componente (inglês), deve ser definidos novos valores para todas as propriedades citadas acima.
Para ajudar neste processo, constantes estão disponíveis com valores padrão para estas propriedades em inglês, português e espanhol. Para mais detalhes acesse nossa aba de API do componente.
Abaixo um exemplo de uso destas constantes para o Português: