fix(desktop): corrige detecção de desativação em tempo real
All checks were successful
CI/CD Web + Desktop / Detect changes (push) Successful in 7s
CI/CD Web + Desktop / Deploy (VPS Linux) (push) Successful in 3m46s
Quality Checks / Lint, Test and Build (push) Successful in 3m54s
CI/CD Web + Desktop / Deploy Convex functions (push) Has been skipped

- Renderiza MachineStateMonitor mesmo durante tela de loading
- Adiciona verificação de isMachineActive na condição de early return
- Detecta estado de desativação/reset já na carga inicial
- Adiciona logs para facilitar debugging

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
rever-tecnologia 2025-12-17 17:47:47 -03:00
parent 0bfe4edc6c
commit 413749d999
2 changed files with 30 additions and 2 deletions

View file

@ -33,8 +33,26 @@ function MachineStateMonitorInner({ machineId, onDeactivated, onTokenRevoked }:
useEffect(() => { useEffect(() => {
if (!machineState) return if (!machineState) return
// Na primeira carga, apenas armazena os valores iniciais // Na primeira carga, verifica estado inicial E armazena valores
if (!initialLoadDone.current) { if (!initialLoadDone.current) {
console.log("[MachineStateMonitor] Carga inicial", {
isActive: machineState.isActive,
hasValidToken: machineState.hasValidToken,
found: machineState.found,
})
// Se já estiver desativado na carga inicial, chama callback
if (machineState.isActive === false) {
console.log("[MachineStateMonitor] Máquina já estava desativada")
onDeactivated?.()
}
// Se token já estiver inválido na carga inicial, chama callback
if (machineState.hasValidToken === false) {
console.log("[MachineStateMonitor] Token já estava revogado")
onTokenRevoked?.()
}
previousIsActive.current = machineState.isActive previousIsActive.current = machineState.isActive
previousHasValidToken.current = machineState.hasValidToken previousHasValidToken.current = machineState.hasValidToken
initialLoadDone.current = true initialLoadDone.current = true

View file

@ -1560,9 +1560,19 @@ const resolvedAppUrl = useMemo(() => {
// Quando há token persistido (dispositivo já provisionado) e ainda não // Quando há token persistido (dispositivo já provisionado) e ainda não
// disparamos o auto-launch, exibimos diretamente a tela de loading da // disparamos o auto-launch, exibimos diretamente a tela de loading da
// plataforma para evitar piscar o card de resumo/inventário. // plataforma para evitar piscar o card de resumo/inventário.
if ((token && !autoLaunchRef.current) || (isLaunchingSystem && token)) { // IMPORTANTE: Sempre renderiza o MachineStateMonitor para detectar desativação em tempo real
if (((token && !autoLaunchRef.current) || (isLaunchingSystem && token)) && isMachineActive) {
return ( return (
<div className="min-h-screen grid place-items-center bg-slate-50 p-6"> <div className="min-h-screen grid place-items-center bg-slate-50 p-6">
{/* Monitor de estado da máquina - deve rodar mesmo durante loading */}
{token && config?.machineId && convexClient && (
<MachineStateMonitor
client={convexClient}
machineId={config.machineId}
onDeactivated={handleMachineDeactivated}
onTokenRevoked={handleTokenRevoked}
/>
)}
<div className="flex flex-col items-center gap-3 rounded-2xl border border-slate-200 bg-white px-8 py-10 shadow-sm"> <div className="flex flex-col items-center gap-3 rounded-2xl border border-slate-200 bg-white px-8 py-10 shadow-sm">
<Loader2 className="size-6 animate-spin text-neutral-700" /> <Loader2 className="size-6 animate-spin text-neutral-700" />
<p className="text-sm font-medium text-neutral-800">Abrindo plataforma da Rever</p> <p className="text-sm font-medium text-neutral-800">Abrindo plataforma da Rever</p>