feat(web): form publico 'Ofrezco transporte' (frontend #105)#136
Merged
Conversation
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
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.