← Volver a todos los proyectos

Proyecto para cliente3 min de lectura

RussianPost, Portal corporativo para envíos postales estatales

RussianPost, Portal corporativo para envíos postales estatales

Tecnologías

ReactSharePointReduxTablesDataGridsStrategyScrumMasteringProjectFrontend

Servicios

  • →Diseño y desarrollo de biblioteca de componentes personalizada
  • →Envoltorio de Kendo Grid con API tipada (modos servidor/cliente, conversión de tipos, renderizadores personalizados)
  • →Hook useCustomGridFilters para vistas por pestañas memoizadas
  • →Adaptador CustomGridRedux, integración completa con Redux con compatibilidad retroactiva
  • →Scrum mastering: ceremonias, eliminación de impedimentos, seguimiento de velocidad

Entregables

  • ✓CustomGrid, una única tabla de datos estandarizada usada en todo el portal
  • ✓Modos de paginación servidor y cliente con conversión automática de tipos desde estructuras de la API
  • ✓Vistas de filtros por pestañas con recuento de elementos en vivo mediante el hook useCustomGridFilters
  • ✓Capa de tabla conectada a Redux (selección, paginación, orden, modo de edición en el store)
  • ✓UX consistente en todas las pantallas cargadas de datos. Las nuevas vistas de tabla toman horas, no días

Desafío

El portal interno de Russian Post, usado por decenas de miles de empleados, había crecido de forma orgánica durante años. Cada módulo manejaba los datos tabulares de forma distinta: distinta lógica de paginación, distintos patrones de filtrado, distintos modos de edición. El resultado era una experiencia de usuario inconsistente y un coste de mantenimiento creciente cada vez que se necesitaba una nueva pantalla de datos.

Además, el trabajo se realizaba bajo estrictas restricciones empresariales: aprobaciones de cambios en varios niveles, versionado de la API de SharePoint y políticas de seguridad que descartaban la mayoría de las herramientas SaaS de terceros.

Descubrimiento

Tras mapear las pantallas existentes quedó claro que casi todas necesitaban lo mismo: paginación del lado del servidor, ordenación y filtrado de columnas, modo de edición en línea y vistas por pestañas que cambiaban el conjunto de datos sin recargar la página. El problema no eran los datos, era la falta de un contrato compartido sobre cómo mostrarlos.

Opciones consideradas

  1. Usar Kendo Grid directamente en todas partes: descartado. Cada equipo lo integraba de forma distinta, perpetuando la inconsistencia.
  2. Construir una tabla personalizada desde cero: descartado. Demasiado arriesgado dado el calendario empresarial y la amplitud de funciones requeridas.
  3. Envoltorio estandarizado sobre Kendo Grid: elegido. Encapsular todo el comportamiento común detrás de una única API tipada, mantener Kendo como motor y aplicar la consistencia mediante la capa de abstracción.

Decisión

El enfoque de envoltorio ofreció la mejor relación entre control y riesgo. Kendo se encargaba del renderizado y la virtualización; el envoltorio poseía el contrato de la API: metadatos de campos, modos de paginación servidor/cliente, conversión de tipos, renderizadores de celda personalizados y columnas de estado. Se añadió encima una capa adaptadora de Redux separada (CustomGridRedux) para las pantallas que necesitaban que el estado de la tabla (selección, paginación, orden) viviera en el store, manteniéndola compatible con las tablas que no lo necesitaban.

Implementación

CustomGrid acepta campos con metadatos, un array de datos y un método de carga. Admite dos modos de paginación, servidor (el total viene de la API, la tabla orquesta la obtención de datos) y cliente (dataQuery de Kendo lo maneja todo localmente), más un modo combinado para añadir cambios locales a los datos del servidor. La conversión de tipos desde las estructuras del servidor a tipos de JS ocurre automáticamente mediante mapeos de campos, ahorrando código de transformación repetitivo en cada pantalla.

useCustomGridFilters es un hook memoizado que envuelve un conjunto de definiciones de filtros con nombre y renderiza una barra de herramientas de Kendo con recuentos en vivo por pestaña. Cambiar de pestaña modifica el conjunto de datos que alimenta la tabla sin recargar la página ni hacer peticiones adicionales.

CustomGridRedux es un adaptador ligero que envuelve CustomGrid y refleja la selección, la paginación, el orden, el filtro, el modo de edición y el estado de los campos en Redux, a través de acciones, reducers y selectores reselect dedicados, permaneciendo totalmente compatible con los usos existentes.

Recorrido del componente

Casi todo el trabajo se hacía en servidores Windows remotos. El cliente de escritorio remoto se volvió casi una segunda casa, porque cada tarea empezaba conectándose a un servidor remoto.

Ventana de conexión a escritorio remoto de un servidor Windows, dirección y usuario ocultos
Cada tarea empezaba con una conexión remota

Resultado

Ahora cada pantalla de datos del portal usa el mismo componente con la misma API. Añadir una nueva vista de tabla pasó de ser una tarea de integración de varios días a pasar una configuración de campos y una función de carga. El rol de Scrum Master junto con el trabajo técnico mantuvo estable la velocidad de entrega bajo bloqueos constantes del lado empresarial. Las ceremonias se mantuvieron ágiles y los impedimentos se resolvían antes de frenar los sprints.

Proyectos

Jiro Health: inteligencia de consulta para médicos

Jiro Health: inteligencia de consulta para médicos

Antes: los médicos en Estados Unidos tenían que reunir ingresos, derivaciones y flujos de dinero desde sistemas lentos de integrar. Después: como ingeniero principal y fundador llevo el desarrollo de APIs de mis pods de la especificación al lanzamiento, con interfaces de nivel empresarial en Node.js y procesamiento de datos en segundo plano en Python.

Universidad Estatal de Cheliábinsk: desarrollo y administración del portal en SharePoint

Universidad Estatal de Cheliábinsk: desarrollo y administración del portal en SharePoint

Antes: al portal SharePoint de la universidad le faltaba lo que la plataforma no trae de serie: un calendario de eventos, listas de clasificación alimentadas desde exportaciones de FoxPro, una maquetación móvil y direcciones de correo protegidas del spam. Después: web parts propios añadieron un calendario sincronizado con Google, listas de clasificación en SSRS que se actualizan desde una carga y emails ocultos, y el sitio obtuvo una versión móvil responsive.

Disponible para colaboración por contrato

Estoy disponible para colaborar por contrato. Si tiene una idea de proyecto interesante, reserve una llamada por Calendly.

Agenda una llamada de 30 min