Repository navigation
feat: [TESIS-140] open the app on the dashboard and drop the integrations screen - #76
Conversation
…ions screen
Two navigation changes found while running the whole environment to test the
Shopify integration.
`/` used to render a Home screen with no data: a greeting, one shortcut to the
catalogue and the line "the operations panel, with the company metrics, is
coming later". That was true when it was written (TESIS-111) and stopped being
true when the panel was built (TESIS-53 to TESIS-56), so the first thing a user
read after logging in was false. The panel now lives at the root and the
`/dashboard` path is gone: `AppRouter` already redirects any unknown URL to `/`,
so an old bookmark lands on the panel anyway.
The integrations screen is gone too. It listed the connected providers and their
status, but that is not the company's information: credentials and connections
are administered by the team from the backoffice, which is the same decision
that removed credential creation in TESIS-139. A read-only screen about
something the user does not administer is noise in the menu.
That was the last route behind a tenant feature flag, so `AppRoute.feature`,
`FeatureGate` and the branch that used them in `AppRouter` go with it, and
`navRoutesFor(features)` becomes the `navRoutes` constant: a function that took
the tenant config and ignored it would say something false. The flag itself
stays and keeps governing content inside a screen — `useTenantFeature`
('integrations') still shows or hides the sales channels card of the product
detail — so the per-tenant difference of the tenant contract (TESIS-121) is
still there to show.
The sales channels card had a "Ir a Integraciones" button for the case with no
connected channels, pointing at the route that is being removed. The button is
gone and the notice now says who sets a channel up.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012xAtddb53LRNVLuyTXyELp
Sanntinat
left a comment
There was a problem hiding this comment.
Revisión — TESIS-140 (PR #76) · El panel como pantalla de inicio y sin la vista de Integraciones
Revisión de TESIS-140-navigation-cleanup (48e4799), contra origin/master de proyecto-web. La hice junto con #77 y #78, y los tres los probé también mergeados entre sí.
| Check | Resultado |
|---|---|
| CI (GitHub Actions) | Los cuatro jobs en verde |
Rama vs master |
Al día. Mergea limpio |
| Local, la rama sola | lint, prettier y tsc -b limpios · 73 archivos · 678 tests · 0 fallas |
| Local, #76 + #77 + #78 mergeados | lint, prettier, tsc -b y build limpios · 75 archivos · 705 tests · 0 fallas |
| Navegador | Contra la API de master, con Norte y con Sur. Detalle abajo |
| Conflictos con otros PRs | #69 (choque de fondo, ver 🟡), #63 y #62 (routes.tsx / routes.test.tsx), #70 y #61 (ProductDetailPage.tsx; esos dos ya chocan con master por su cuenta) |
✅ Lo que pide la card, verificado en el navegador
- Después del login la app queda en
/y muestra «Panel de operación», con el widget de Integraciones (salud de los nodos) en su lugar. - El Sidebar lista Dashboard · Órdenes · Inventario · Reportes, con Dashboard marcado. No queda marcado en las demás secciones: todos los
NavLinkya llevanend. /integrationsy/dashboard, escritas a mano, terminan en/con el panel.- Norte (flag encendido): «Canales de venta» sigue en el detalle de producto. En un producto sin vínculos (NOR-003), el aviso nuevo aparece sin ningún enlace dentro de la tarjeta.
- Sur (flag apagado, entrando con
?tenant=sur): el detalle de producto no muestra la tarjeta.
Además, busqué en la rama referencias a lo que se borra: no queda ningún to, href ni navigate a /dashboard o /integrations, ni imports de features/home o features/integrations. shared/api/integrations.ts y useIntegrations siguen intactos, como dice el PR.
✅ Sacar el andamiaje de flags de las rutas es lo correcto
Con Integraciones se iba la única ruta con feature, así que FeatureGate, el campo feature y la rama de AppRouter quedaban sin consumidores. Convertir navRoutesFor(features) en la constante navRoutes también está bien razonado: una función que recibe la config del tenant y no la mira promete algo que no hace. architecture.md cuenta dónde sigue vivo el flag, y es lo que hace falta para que el próximo que lea no lo dé por muerto.
🟡 Choque de fondo con #69 (TESIS-999015): conviene decidirlo antes de mergear
#69, de Lau, le pone accesos reales a la pantalla de Inicio que este PR borra. Git lo marca como conflicto modify/delete en features/home/content.ts y HomePage.tsx, pero lo que hay que resolver es la decisión, no el texto: o la raíz es el panel y #69 no tiene dónde vivir, o la raíz es un Inicio con accesos y esta card cambia. El que entre segundo va a tener que elegir, así que conviene acordarlo entre los dos antes de mergear cualquiera.
🟡 Dos comentarios de ProductDetailPage.tsx quedaron hablando de lo que se borró
- Líneas 34-35: «Misma razón: la pantalla de integraciones, a la que manda la tarjeta de canales cuando no hay ninguno conectado.». Se borró la constante
INTEGRATIONS_PATH, pero no su comentario. Ahora queda colgado arriba del deCONTENT_GRID. - Línea 285: «Canales de venta: sólo para las empresas con la feature encendida, igual que la ruta de integraciones (TESIS-121).» Esa ruta ya no existe.
Son dos líneas, pero son justo las que van a confundir a quien busque dónde quedó Integraciones.
⚪ El aviso sin canales no tiene test, y SalesChannelsCard tampoco
El criterio «un producto sin canales conectados muestra el aviso sin ningún enlace roto» lo verifiqué en el navegador, porque SalesChannelsCard no tiene ningún test: ni el estado vacío, ni el enlace que se sacó. El hueco es anterior a este PR y no lo bloquea, pero un test del estado sin canales habría fijado el arrastre.
⚪ El aviso nuevo pide «escribinos» sin decir dónde
«Las conexiones las configura el equipo de OneStock: escribinos para sumar uno.» Si hay un canal de contacto, nombrarlo. Si no, «pedíselo al equipo de OneStock» promete menos.
Los criterios de la card
- Después del login,
/muestra el panel de operación. - El Sidebar no lista «Inicio» ni «Integraciones»: Dashboard, Órdenes, Inventario, Reportes.
-
/integrationsy/dashboarda mano redirigen a/. - «Canales de venta» se muestra con el flag encendido (Norte) y no con el flag apagado (Sur).
- Sin canales conectados, el aviso no tiene enlaces rotos.
-
lint,testybuilden verde.
Veredicto
APPROVE.
Hace exactamente lo que pide la card, y todos los criterios se cumplen en el navegador. Los dos comentarios viejos conviene corregirlos en este mismo PR. Lo de #69 no es un defecto del código, pero hay que acordarlo antes de mergear.
The router conflicted both ways: this branch drops the integrations screen and the Home landing, and master added Depósitos and Eventos fallidos. Both sides stand. Of the three icons master brings, only the one for the failed events queue has anything left to paint: the other two belonged to the two screens this branch removes. Master's tests for the integrations feature flag go with the screen they covered, and the assertion that keeps it out of the sidebar stays. The list of sections now names the two that landed meanwhile. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012xAtddb53LRNVLuyTXyELp
Descripción
Dos cambios de navegación, los dos detectados levantando el entorno completo para probar la integración con Shopify.
1. La raíz de la app pasa a ser el panel
/renderizaba una pantalla de Inicio que no mostraba datos: un saludo, un acceso a Inventario y la frase «El panel de operación, con las métricas de la empresa, llega más adelante». Era cierta cuando se escribió (TESIS-111) y dejó de serlo cuando se hizo el panel (TESIS-53 a TESIS-56): lo primero que leía el usuario después del login era falso, y la pantalla parecía una maqueta.El panel pasa a
/y la ruta/dashboarddesaparece. No hace falta una redirección: el catch-all deAppRouterya manda cualquier URL desconocida a/, así que un favorito viejo cae igual en el panel.LoginPageya navegaba afrom ?? '/'.2. Se saca la vista de Integraciones
/integrationslistaba los proveedores conectados con su estado y la cuenta. No es información del usuario de la empresa: las credenciales y las conexiones las administra el equipo desde el backoffice, que es la misma decisión que sacó el alta de credenciales en TESIS-139. Una pantalla de sólo lectura sobre algo que el usuario no administra es ruido en el menú.El Sidebar queda con Dashboard · Órdenes · Inventario · Reportes.
Decisiones que conviene mirar
Se va también el andamiaje de feature flags de las rutas. Integraciones era la única ruta con
feature, así queAppRoute.feature,FeatureGatey la rama que los usaba enAppRouterquedaban sin un solo consumidor. YnavRoutesFor(features)pasa a ser la constantenavRoutes: una función que recibe la config del tenant y no la mira dice algo falso sobre cómo funciona la navegación.El flag
integrationsdel tenant no se toca y sigue gobernando algo real:useTenantFeature('integrations')decide si el detalle de producto muestra la tarjeta Canales de venta. O sea que la diferencia entre Norte y Sur del contrato de tenant (TESIS-121, §2) se sigue pudiendo mostrar; lo que cambió es dónde se nota. Si vuelve una sección con flag, el campo y el guard se reponen en un commit chico.El widget «Integraciones» del panel se queda.
IntegrationNodeListmuestra la salud de los nodos y es parte del diseño de S03: es información de operación, no administración de credenciales. Lo que se saca es la pantalla de gestión, no el estado.Arrastre en el detalle de producto. La tarjeta de canales tenía, para el caso sin canales conectados, un botón «Ir a Integraciones» apuntando a la ruta que se elimina. Se saca el botón —habría quedado llevando al catch-all— y el aviso pasa a decir quién configura un canal. Cae con él la prop
integrationsPathdeSalesChannelsCard.No se toca nada de
shared/.shared/api/integrations.tsyshared/hooks/useIntegrations.tslos leen el panel (useInfraHealth) y el detalle de producto, así que siguen igual: lo que se borra es la featurefeatures/integrations, no la capa de datos.Cómo probar
npm run devy entrar comoadmin@norte.com./integrationso/dashboarden la barra de direcciones: las dos caen en/, o sea en el panel.?tenant=sur): el detalle de producto no muestra la tarjeta de canales.Verificación
npm run lint✅npx tsc --noEmit✅npm run test✅ — 73 archivos, 678 testsnpm run build✅npm run format:check✅routes.test.tsxse reescribió sobrenavRoutes: fija que la primera sección del Sidebar es el panel en/, la lista completa de secciones, que Integraciones no está, y que las rutas sinnavsiguen sin listarse.Fuera de alcance
integrationsdel contrato de tenant.🤖 Generated with Claude Code
https://claude.ai/code/session_012xAtddb53LRNVLuyTXyELp