lista de espera: salas consultoria/cabina (toggle + etiqueta) y scroll de WhatsApp

- skeen_citas: campo sala en skeen.lista.espera (consultoria/cabina, indexado)
- frontend.py: sala en _lista_espera_to_dict, create y update (toggle desde
  la etiqueta; valor invalido vuelve a sin sala; cambio queda en historial)
- ListaEspera.tsx: toggle Todas/Consultoria/Cabina con conteo, etiqueta
  clicable en cada tarjeta que alterna de sala, selector en el modal de alta
- Agenda.tsx: cambiarSala() conectado al panel
- WacrmMessages.tsx: el auto-refresco ya no empuja el scroll abajo si el
  usuario esta leyendo mensajes anteriores (solo baja al cambiar de
  conversacion, por deep-link o al enviar respuesta propia)

Verificacion API: 7/7 tests OK (alta con sala, toggle, valor invalido, GET)
This commit is contained in:
2026-09-30 10:33:52 +00:00
parent 169864958d
commit 2573562218
6 changed files with 137 additions and 10 deletions

View File

@@ -939,8 +939,20 @@ const Agenda: FC = () => {
}
}, []);
const quitarDeListaEspera = async (entry: ListaEspera) => {
if (!window.confirm(`¿Quitar a ${entry.patient} de la lista de espera?`)) return;
// Toggle de sala en la lista de espera: Consultoría <-> Cabina
const cambiarSala = async (entry: ListaEspera, sala: string) => {
try {
await odooApi.updateListaEspera(entry.id, { sala });
const etiqueta = sala === 'consultoria' ? 'Consultoría' : sala === 'cabina' ? 'Cabina' : 'Sin sala';
toast.success(`${entry.patient}: ${etiqueta}`);
await recargarListaEspera();
} catch (err) {
const msg = (err as { response?: { data?: { message?: string } } })?.response?.data?.message;
toast.error(msg || 'No se pudo cambiar la sala');
}
};
const quitarDeListaEspera = async (entry: ListaEspera) => { if (!window.confirm(`¿Quitar a ${entry.patient} de la lista de espera?`)) return;
try {
await odooApi.updateListaEspera(entry.id, { state: 'descartado' });
toast.success('Paciente descartado de la lista de espera');
@@ -2032,6 +2044,7 @@ const Agenda: FC = () => {
loading={loading}
loadingAgendaId={listaAgendando}
puedeGestionar={puedeAgendar}
onChangeSala={(e, sala) => void cambiarSala(e, sala)}
onAgendar={agendarDesdeLista}
onQuitar={(e) => void quitarDeListaEspera(e)}
onAdd={() => { setListaPrefill({ doctorId: doctorFilter || undefined }); setListaModalOpen(true); }}