Pular para o conteúdo

Migração do @material-ui-pickers

@material-ui/pickers foi movido para o @material-ui/lab.

⚠️ Os componentes seletores de data foram reescritos. Na maioria dos lugares, a lógica foi reescrita do zero, então não é possível especificar aqui toda a lista de mudanças. Aqui está uma visão geral dos conceitos mais importantes que foram alterados. Se você vai atualizar, o caminho mais fácil pode ser identificar o uso de cada seletor em sua base de código, e reescreva-os um de cada vez. Não se esqueça de executar seus testes depois de cada um!

Este guia é uma visão geral dos conceitos principais que foram alterados de seletores na v3.2.10.

Instalação

Você simplesmente precisa instalar o pacote @material-ui/lab se ainda não estiver instalado. Nada mais é necessário.

Importações

A versão keyboard dos seletores não está mais publicada. Todas as versões dos seletores de dispositivos móveis e desktop implementam a entrada do teclado para acessibilidade.

-import { KeyboardDatePicker } from '@material-ui/pickers';
+import DatePicker from '@material-ui/lab/DatePicker';

-<KeyboardDatePicker />
+<DatePicker />

Além disso, em vez de fornecer uma propriedade variant, eles foram movidos para diferentes importações, significando que seu pacote não incluirá um Dialog se você estiver usando apenas o seletor de desktop.

  • <DesktopDatePicker /> – Somente visualização em desktop.
  • <MobileDatePicker /> – Somente visualização em dispositivos móveis.
  • <DatePicker /> – Visualização móvel ou desktop de acordo com a preferência de pointer do usuário.
  • <StaticDatePicker /> – A própria visualização do seletor em si, sem um input ou qualquer componente encapsulado.
-import { DatePicker } from '@material-ui/pickers';
+import DesktopDatePicker from '@material-ui/lab/DesktopDatePicker';

-<DatePicker variant="inline" />
+<DesktopDatePicker />

A mesma convenção se aplica para TimePicker<DesktopTimePicker> e <MobileTimePicker />.

MuiPickersUtilsProvider

O MuiPickersUtilsProvider foi removido em favor do LocalizationProvider. Além disso, os seletores não exigem que você instale adaptadores de date-io manualmente. Tudo está incluído no lab.

❌ Antes:

import AdapterDateFns from '@date-io/date-fns';
import { MuiPickersUtilsProvider } from '@material-ui/pickers';

✅ Depois:

import AdapterDateFns from '@material-ui/lab/AdapterDateFns';
import LocalizationProvider from '@material-ui/lab/LocalizationProvider';


function App() {
  return (
    <LocalizationProvider dateAdapter={AdapterDateFns}>
      ...
    </LocalizationProvider>
  )
);

Renderizando input

Introduzimos uma nova propriedade requerida, renderInput. Isso simplifica o uso de componentes de entrada de texto sem Material-UI.

<DatePicker renderInput={(props) => <TextField {...props} />} />
<TimePicker renderInput={(props) => <TextField {...props} />} />

Anteriormente, propriedades eram espalhadas no componentes <TextField />. De agora em diante você precisará usar a nova propriedade renderInput para fornecer as propriedades:

<DatePicker
- label="Date"
- helperText="Something"
+ renderInput={props => <TextField label="Date" helperText="Something" /> }
/>

Gerenciamento do estado

A lógica de gerenciamento de estado/valor para seletores foi reescrita do zero. Seletores agora vão chamar a propriedade onChange quando cada visualização do seletor de data estiver sido concluída. O manipulador onError esta também totalmente diferente. Verifique a integração dos seus seletores com formulários, porque pode haver alguma questão referente a integração.

Nenhuma máscara necessária

Máscara já não é necessária. Além disso, se a máscara fornecida não for válida, os seletores irão simplesmente ignorar a máscara e permitir entradas arbitrárias.

<DatePicker
  mask="mm"
  value={new Date()}
  onChange={console.log}
  renderInput={(props) => (
    <TextField {...props} helperText="invalid mask" />
  )}
/>

<DatePicker
  value={new Date()}
  onChange={console.log}
  renderInput={(props) => (
    <TextField {...props} helperText="valid mask" />
  )}
/>

E muito mais

  • ```diff <DatePicker
    • format="DD-MMM-YYYY"
    • inputFormat="DD-MMM-YYYY" ```

Há muitas mudanças, tenha cuidado, certifique-se de que seus testes e build passe. No evento em que você tem um uso avançado do seletor de data, provavelmente será mais simples reescrevê-lo.

Por favor, abra um pull request para melhorar o guia se você notar uma oportunidade para fazer isso.