Skip to content

feat(web): form publico 'Ofrezco transporte' (frontend #105)#136

Merged
vgpastor merged 2 commits into
mainfrom
feature/105-fe-ofrecer-transporte
Jun 28, 2026
Merged

feat(web): form publico 'Ofrezco transporte' (frontend #105)#136
vgpastor merged 2 commits into
mainfrom
feature/105-fe-ofrecer-transporte

Conversation

@vgpastor

Copy link
Copy Markdown
Contributor

Frontend de #105. Form mobile-first para que un ciudadano publique capacidad de transporte en una emergencia — analogo de servicio del form de donacion material (/donar).

Pagina /e/{slug}/ofrecer-transporte (server component + server action + client form con useActionState y persistencia de borrador). Requiere login (redirige a /login si no hay sesion); el proveedor se fija server-side como provider {type:'volunteer', id:}. Campos -> POST /logistics/capacities: modo (carretera/maritimo/aereo), capacidad (peso/volumen, al menos uno), cobertura (texto de zona/ruta -> coverage area), ventana opcional (datetime-local), restricciones (refrigerado/peligroso/fragil), notas. Maneja 409 (emergencia sin intake) como /donar. CTA 'Ofrezco transporte' en la landing /e/{slug}. i18n es/en.

Simplificaciones (ponytail, marcadas en codigo): cobertura solo area v1 (corredor por coords diferido; el matching #107 admite areas); proveedor siempre el ciudadano (sin org); sin listado de capacidades aqui (va en el panel de logistica de coordinacion, #106).

Parte de #105 (el listado/filtrado por coordinacion llega con el panel de logistica de #106). Gate verde: api-client build + web build + web lint.

vgpastor added 2 commits June 28, 2026 18:33
Bloque ofrecerTransporte (modos, capacidad, cobertura, ventana,
restricciones, notas y mensajes de error) y las claves de CTA en la
sección de acciones de la emergencia.
Formulario mobile-first para que un ciudadano autenticado publique su
capacidad de transporte para una emergencia (POST /logistics/capacities).

- Ruta pública /e/[slug]/ofrecer-transporte con resolución de emergencia
  por slug y auth obligatoria (capacity:publish, citizen-grade).
- El proveedor es el propio usuario (provider volunteer); emergencyId y
  providerId se vinculan en servidor, nunca desde el formulario.
- Campos: modo (carretera/marítimo/aéreo), capacidad (peso/volumen, al
  menos uno), cobertura como área libre, ventana opcional (datetime-local),
  restricciones y notas. Validación cliente + servidor; 409 de alta en
  pausa tratado como en donar.
- CTA Ofrezco transporte en las acciones de la landing de la emergencia.

Closes #105
@vercel

vercel Bot commented Jun 28, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
response-grid Ready Ready Preview, Comment Jun 28, 2026 4:35pm

Request Review

@vgpastor vgpastor enabled auto-merge (squash) June 28, 2026 16:34
@vgpastor vgpastor merged commit 32ade03 into main Jun 28, 2026
6 checks passed
@vgpastor vgpastor deleted the feature/105-fe-ofrecer-transporte branch June 28, 2026 16:35
vgpastor added a commit that referenced this pull request Jun 28, 2026
… (frontend #106) (#137)

Frontend de #106 (Expediciones / Shipment), mobile-first, mirror de
ofertas (coordinador) y mi-voluntariado (transportista).

Panel coordinador /e/{slug}/coordinacion/expediciones: lista de
expediciones (filtro por estado) + seccion read-only 'Capacidades
disponibles' (filtro modo/estado) + 'Crear expedicion' (origen/destino
desde recursos, items, manifiesto). Detalle en el detail-drawer con
acciones de ciclo de vida segun estado: planned->asignar capacidad
(select), assigned->en transito, in_transit->confirmar entrega,
planned|assigned->cancelar. Server actions con auth + revalidate +
manejo 401/403/404/409. Pestaña 'Expediciones' gateada por nuevo flag
canCoordinateLogistics (shipment:read) en resolveEmergencyAccess; el
boton crear chequea shipment:create.

Vista transportista /e/{slug}/mis-expediciones (GET
/logistics/shipments/mine): solo sus expediciones, acciones
marcar-en-transito y confirmar-entrega. Enlazada desde la landing. i18n
es/en.

La seccion 'Capacidades disponibles' entrega la parte 'visible/filtrable
por coordinacion' de #105 -> con esto #105 queda completo (form publico
#136 + listado aqui).

Simplificaciones (ponytail): asignar = select plano (las sugerencias
rankeadas llegan en #107); origen/destino selects de recursos (sin
picker en mapa); crear minimo. Gate verde: api-client build + web build
+ web lint.

Closes #105
Closes #106
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant