Guia de Migração

Este guia cobre o processo de migração de componentes de UI1 (decentraland-ui) para UI2 (decentraland-ui2).

Quando Migrar

As migrações podem começar por três razões válidas:

1. Melhoria Técnica

Você quer migrar um componente por:

  • Melhor suporte a temas

  • Melhorias nos tipos TypeScript

  • Consistência com outros componentes UI2

  • Otimização de desempenho

  • Melhorias de acessibilidade

2. Atualizando um Componente

  • Um componente UI1 precisa ser atualizado

  • Ainda não existe um equivalente em UI2

  • Requisito: Crie-o primeiro em UI2, depois use-o

3. Necessidades do Projeto

  • O componente será usado em um projeto novo ou existente

  • Há tempo disponível para migrá-lo corretamente

  • Recursos do projeto permitem uma migração completa

circle-exclamation

Processo de Migração

Passo 1: Planejamento

Antes de iniciar a migração:

  1. Identificar dependências

    • Quais outros componentes ele usa?

    • Quais projetos atualmente o utilizam?

    • Há mudanças incompatíveis planejadas?

  2. Revisar uso atual

    • Quantos projetos usam este componente?

    • Quais props são mais comumente usadas?

    • Existe algum problema conhecido?

  3. Definir escopo

    • Esta será uma migração 1:1?

    • Há melhorias planejadas?

    • Qual é o cronograma?

Passo 2: Criar Componente UI2

Siga o Componentes Personalizados guia para componentes candidatos a UI2.

Requisitos:

  • Use sintaxe de objeto para styled-components

  • Use apenas valores do tema (sem valores arbitrários)

  • Adicione histórias abrangentes no Storybook

  • Escreva testes completos

  • Documente todas as props e comportamentos

Exemplo de estrutura:

Passo 3: Manter Compatibilidade

O componente UI2 DEVE expor as mesmas props e comportamentos que a versão UI1.

Mesmas Props

Alterações Compatíveis Retroativamente

Se você precisar alterar ou adicionar props:

  1. Primeiro, adicione as novas props ao UI1 como opcionais

  2. Em seguida, migre os consumidores do UI1 para usar as novas props

  3. Finalmente, crie o componente UI2 com a nova API

Passo 4: Depreciar Componente UI1

Adicione um aviso de depreciação ao componente UI1:

Passo 5: Adoção Gradual

Não force a migração imediata. Permita a adoção gradual:

  1. Publicar componente UI2

  2. Documentar caminho de migração

  3. Atualizar novos projetos para usar UI2

  4. Migrar projetos existentes de forma oportunista

  5. Planejar eventual remoção do UI1 (com aviso)


Exemplos de Migração

Exemplo 1: Componente Simples

Migrando um básico Card componente:

Versão UI1

Versão UI2

Exemplo 2: Componente com Variantes

Migrando um Button com variantes:

Versão UI1

Versão UI2


Checklist de Migração

Use esta checklist para cada migração de componente:

Fase de Planejamento

Fase de Implementação

Fase de Depreciação

Fase de Adoção


Padrões Comuns de Migração

CSS para Styled Components

Nomes de Classe para Props

Valores Fixos para Tema


Alterações Incompatíveis

Às vezes mudanças incompatíveis são necessárias. Trate-as com cuidado:

Quando Mudanças Incompatíveis São Aceitáveis

  • Correções de segurança

  • Bugs críticos

  • Atualizações de versão major

  • Remoção de recursos depreciados (com aviso)

Como Lidar com Mudanças Incompatíveis

  1. Anunciar cedo - Comunicar as mudanças com antecedência

  2. Fornecer caminho de migração - Documentar como atualizar

  3. Aumentar versão - Seguir versionamento semântico

  4. Período de depreciação - Dar tempo para migrar

  5. Codemods - Fornecer ferramentas de migração automatizadas se possível

Exemplo: Removendo Props Depreciadas


Testando a Migração

Assegure que os componentes migrados funcionem corretamente:

Testes de Regresso Visual

Compare visualmente componentes UI1 e UI2:

Testes Comportamentais

Assegure que as props funcionem da mesma forma:


Atualizações de Documentação

Após a migração, atualize a documentação:

Atualizar Docs do Componente UI1

Criar Docs do Componente UI2


Próximos Passos

Atualizado