Ir al contenido

Agregar Estado

Añade una nueva etapa o estado a un workflow personalizado existente.

  1. En la tarjeta del workflow, clic en ”+ Agregar Estado” — se abre el diálogo de creación de estado.
  2. Completa los campos del formulario (ver tabla abajo).
  3. Clic en “Agregar” — el estado se añade al final del flujo.
CampoObligatorioDescripciónEjemplo
Nombre del EstadoTexto visible del estadoEn Revisión
Clave (ID único)Identificador en minúsculas con guiones bajosen_revision
ColorHexadecimal del color del badge#3b82f6

Nota: El campo “Clave” se normaliza automáticamente a minúsculas con guiones bajos al escribir.

El formulario incluye:

  • Selector visual (color picker) — elige el color visualmente
  • Campo de texto — ingresa el código hexadecimal directamente (ej: #10b981)

Colores sugeridos:

ColorHexadecimalUso sugerido
Azul#3b82f6En progreso, activo
Verde#10b981Completado, aprobado
Amarillo#f59e0bPendiente, en espera
Rojo#ef4444Bloqueado, rechazado
Gris#6b7280Borrador, sin iniciar
  • El estado aparece al final de la lista de estados del workflow.
  • Badge con el color y nombre especificado visible.
  • Toast de confirmación: “Estado agregado”.
MensajeCausaSolución
Botón “Agregar” deshabilitadoCampos obligatorios vacíosCompleta “Nombre del Estado” y “Clave"
"Error al agregar estado”Clave duplicada en el workflowUsa una clave única diferente
Mutación de creación de estado

Función: addStatus en WorkflowManager.tsx

const addStatus = useMutation({
mutationFn: async (status: typeof statusForm & { workflow_id: string; sort_order: number }) => {
const { error } = await supabase
.from("workflow_statuses")
.insert({
workflow_id: status.workflow_id,
status_name: status.status_name,
status_key: status.status_key,
status_color: status.status_color,
sort_order: status.sort_order,
});
if (error) throw error;
},
onSuccess: () => {
toast({ title: "Estado agregado" });
queryClient.invalidateQueries({ queryKey: ["workflows"] });
setStatusDialogOpen(false);
resetStatusForm();
},
});

Cálculo de sort_order:

const workflow = workflows.find(w => w.id === selectedWorkflowId);
const nextSortOrder = (workflow?.statuses?.length || 0);

Normalización de status_key:

onChange={(e) => setStatusForm(prev => ({
...prev,
status_key: e.target.value.toLowerCase().replace(/\s+/g, '_')
}))}
Esquema de validación

Validaciones de base de datos:

  • status_name NOT NULL
  • status_key NOT NULL, UNIQUE por workflow
  • status_color DEFAULT ‘#6b7280’
  • sort_order DEFAULT 0
  • workflow_id FK a workflow_templates