Guía de migración

Esta guía cubre el proceso de migración de componentes desde UI1 (decentraland-ui) a UI2 (decentraland-ui2).

Cuándo Migrar

Las migraciones pueden comenzar por tres razones válidas:

1. Mejora técnica

Deseas migrar un componente por:

  • Mejor soporte de theming

  • Mejores tipos de TypeScript

  • Consistencia con otros componentes de UI2

  • Optimización de rendimiento

  • Mejoras de accesibilidad

2. Actualización de un Componente

  • Un componente de UI1 necesita ser actualizado

  • Aún no existe un equivalente en UI2

  • Requisito: Créalo primero en UI2, luego úsalo

3. Necesidades del Proyecto

  • El componente será usado en un proyecto nuevo o existente

  • Hay tiempo disponible para migrarlo correctamente

  • Los recursos del proyecto permiten una migración exhaustiva

circle-exclamation

Proceso de Migración

Paso 1: Planificación

Antes de iniciar la migración:

  1. Identificar dependencias

    • ¿Qué otros componentes utiliza?

    • ¿Qué proyectos lo usan actualmente?

    • ¿Hay cambios incompatibles planificados?

  2. Revisar uso actual

    • ¿Cuántos proyectos usan este componente?

    • ¿Qué props se usan con mayor frecuencia?

    • ¿Hay problemas conocidos?

  3. Definir alcance

    • ¿Será esta una migración 1:1?

    • ¿Hay mejoras planificadas?

    • ¿Cuál es el cronograma?

Paso 2: Crear Componente UI2

Sigue la Componentes personalizados guía para componentes candidatos de UI2.

Requisitos:

  • Usar sintaxis de objeto para styled-components

  • Usar solo valores del theme (no valores arbitrarios)

  • Agregar historias completas en Storybook

  • Escribir pruebas completas

  • Documentar todas las props y comportamientos

Estructura de ejemplo:

Paso 3: Mantener Compatibilidad

El componente UI2 DEBE debe exponer las mismas props y comportamientos que la versión UI1.

Mismas Props

Cambios Compatibles hacia Atrás

Si necesitas cambiar o agregar props:

  1. Primero, agrega las nuevas props a UI1 como opcionales

  2. Luego, migra a los consumidores de UI1 para usar las nuevas props

  3. Finalmente, crea el componente UI2 con la nueva API

Paso 4: Deprecar el Componente UI1

Agregar un aviso de deprecación al componente UI1:

Paso 5: Adopción Gradual

No fuerces la migración inmediata. Permite una adopción gradual:

  1. Publicar componente UI2

  2. Documentar ruta de migración

  3. Actualizar proyectos nuevos para usar UI2

  4. Migrar proyectos existentes de forma oportunista

  5. Planificar eventual eliminación de UI1 (con aviso)


Ejemplos de Migración

Ejemplo 1: Componente Simple

Migrando un básico Card componente:

Versión UI1

Versión UI2

Ejemplo 2: Componente con Variantes

Migrando un Button con variantes:

Versión UI1

Versión UI2


Lista de Verificación de Migración

Usa esta lista de verificación para cada migración de componente:

Fase de Planificación

Fase de Implementación

Fase de Deprecación

Fase de Adopción


Patrones Comunes de Migración

De CSS a Styled Components

Nombres de Clase a Props

Valores Fijos al Theme


Cambios Incompatibles

A veces los cambios incompatibles son necesarios. Manéjalos con cuidado:

Cuando los Cambios Incompatibles son Aceptables

  • Correcciones de seguridad

  • Bugs críticos

  • Actualizaciones de versión mayor

  • Eliminar características obsoletas (con aviso)

Cómo Manejar Cambios Incompatibles

  1. Anunciar con anticipación - Comunicar los cambios con suficiente antelación

  2. Proporcionar ruta de migración - Documentar cómo actualizar

  3. Incremento de versión - Seguir versionado semántico

  4. Periodo de deprecación - Dar tiempo para migrar

  5. Codemods - Proveer herramientas de migración automatizadas si es posible

Ejemplo: Eliminar Props Obsoletas


Pruebas de Migración

Asegúrate de que los componentes migrados funcionen correctamente:

Pruebas de Regresión Visual

Comparar los componentes UI1 y UI2 visualmente:

Pruebas de Comportamiento

Asegurar que las props funcionen de la misma manera:


Actualizaciones de Documentación

Después de la migración, actualiza la documentación:

Actualizar Docs del Componente UI1

Crear Docs del Componente UI2


Siguientes pasos

Última actualización