Lista de operaciones
Operaciones es la página de listado en /operations. Muestra todos los documentos de misión en la
ruta de Firestore missions/{id} que tu cuenta puede leer en la organización activa.
Cada fila es una operación — planificada, en curso o finalizada.
Qué muestra la tabla
La página tiene una cabecera fija con el total y un botón Nueva operación (visible
solo si tienes el permiso operations.create), un área de filas con desplazamiento y un
panel lateral derecho con estadísticas rápidas.
| Columna | Origen | Notas |
|---|---|---|
| Miniatura | Primera photo en mission.media[] | Usa un marcador de posición si no hay imagen. |
| Operación | mission.name, con mission.codename debajo si está definido | Haz clic en la fila para abrirla. |
| Estado | Derivado de los timestamps startOn / finishedOn | planned, active o finished. |
| Creada | mission.createdOn | Oculta en viewports pequeños. |
| Inicio | mission.startOn si > 0 | Muestra — cuando no está programada. Oculta en viewports medianos. |
| Activos | Longitud de mission.assetIds[] | Operativos + equipos + miembros de la org combinados. |
| Multimedia | Longitud de mission.media[] | Fotos y vídeos subidos durante la planificación. |
| Acciones | Menú kebab de fila | Ver más abajo. |
El panel lateral muestra cuatro estadísticas rápidas: Total, Activas, Planificadas, Finalizadas, calculadas en el cliente a partir del mismo listado.
El chip de estado se calcula a partir de los timestamps — una fila active significa que startOn ya pasó
pero finishedOn no. Esto es independiente del campo más detallado mission.status
(planning | ready | active | completed | aborted) establecido en los formularios de creación/edición. La
vista de lista usa la etiqueta derivada del timestamp para que operaciones programadas y no finalizadas no se muestren
como “active” prematuramente.
Abrir una fila
Al hacer clic en cualquier parte de la fila se navega a /ops/{id}/live — la consola de operaciones en vivo.
Para llegar a la página de detalle de planificación, usa el enlace Editar del menú kebab, o escribe
/operations/{id} directamente. Las filas se pueden activar con el teclado usando Enter.
Acciones de fila
El botón kebab (tres puntos) abre un menú desplegable de posición fija. Los elementos aparecen según los permisos:
- Iniciar — igual que hacer clic en la fila. Enruta a
/ops/{id}/live. - Editar — requiere
operations.edit. Abre el formulario de edición. - Duplicar — requiere
operations.edit. Abre un pequeño diálogo pre-rellenado con{name} (Copia). Al confirmar, llama aPOST /operations/{sourceId}/duplicateen el backend, que copia el documento de misión más cada subcolección (flags,polygons,comms,tasks,assetLocations, etc.), y luego navega directamente a la página de edición de la nueva operación. - Eliminar — requiere
operations.delete. Usa un prompt nativoconfirm(), luego llama adeleteDoc(missions/{id})directamente en Firestore.
Crear una nueva operación
El botón Nueva operación en la cabecera de la página y en la tarjeta de acción del panel lateral
enrutan a /operations/new — el asistente de creación. Cuando se crea una operación,
el servicio dispara una notificación operation_created a cada miembro activo
de la organización actual; la entrega es best-effort y se descarta silenciosamente si falla.
Estados vacíos y de carga
Una cuenta nueva ve un estado vacío con icono de más y un enlace Crea tu primera operación. Mientras Firestore carga, se animan cinco filas skeleton en la cuadrícula.
No implementado aún
Los siguientes elementos aparecen en el roadmap pero no están en la versión actual:
- Barra de filtros por chip de estado, selector de rango de fechas, multi-select de equipos, búsqueda de texto libre.
- Selección masiva, archivado y exportación CSV.
- Eliminación lógica / ventana de restauración de 30 días — hoy es un
deleteDocdefinitivo.
Si ves capturas que hagan referencia a esos, considéralas aspiracionales.