Corrigiu lógica do wizard

X-Lovable-Edit-ID: edt-61c7ebff-9762-4734-a5d5-1db6a1d61adb
Co-authored-by: domfelipe <53182096+domfelipe@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot] 2026-04-24 10:55:59 +00:00
commit 775ae3d4ba
2 changed files with 32 additions and 4 deletions

View file

@ -34,6 +34,23 @@ export function TelegramOnboardingWizard({ open, onOpenChange, initialStep }: Pr
const [step, setStep] = useState(1);
const [validated, setValidated] = useState<ValidatedBot | null>(null);
// Deriva o passo inicial do estado real do agente.
// Só pula para passos avançados se houver evidência concreta no banco.
function deriveStepFromAgent(): number {
if (!agent) return 1;
const hasToken = !!agent.telegram_bot_token_vault_id;
const hasUsername = !!agent.telegram_bot_username;
const webhookOk = !!agent.telegram_webhook_configured;
const firstMsg = !!agent.telegram_first_message_received_at;
// Token validado + webhook configurado → aguardando 1ª mensagem (ou já recebida)
if (hasToken && hasUsername && (webhookOk || firstMsg)) return 4;
// Token validado mas webhook ainda não → ainda no passo do token (3)
if (hasToken && hasUsername) return 3;
// Sem token: sempre começa do início
return 1;
}
// Inicializa step ao abrir
useEffect(() => {
if (!open) return;
@ -41,16 +58,26 @@ export function TelegramOnboardingWizard({ open, onOpenChange, initialStep }: Pr
setStep(Math.min(Math.max(initialStep, 1), TOTAL_STEPS));
return;
}
const derived = deriveStepFromAgent();
// Se o agente ainda não tem token, ignora qualquer valor antigo do localStorage
if (derived === 1 && typeof window !== "undefined") {
window.localStorage.removeItem(STORAGE_KEY);
setStep(1);
return;
}
if (typeof window !== "undefined") {
const stored = window.localStorage.getItem(STORAGE_KEY);
const parsed = stored ? Number(stored) : NaN;
if (Number.isFinite(parsed) && parsed >= 1 && parsed <= TOTAL_STEPS) {
// Usa o maior entre o derivado e o salvo, limitado ao derivado
// (nunca avança além do que o estado real permite)
if (Number.isFinite(parsed) && parsed >= 1 && parsed <= derived) {
setStep(parsed);
return;
}
}
setStep(1);
}, [open, initialStep]);
setStep(derived);
// eslint-disable-next-line react-hooks/exhaustive-deps
}, [open, initialStep, agent?.telegram_bot_token_vault_id, agent?.telegram_webhook_configured, agent?.telegram_first_message_received_at]);
// Persiste step ao mudar
useEffect(() => {

View file

@ -10,6 +10,7 @@ export interface AgentInstance {
uuid_tenant: string;
status: string;
telegram_bot_username: string | null;
telegram_bot_token_vault_id: string | null;
telegram_webhook_configured: boolean;
telegram_token_invalid: boolean;
telegram_first_message_received_at: string | null;
@ -30,7 +31,7 @@ export function useAgentInstance() {
const { data, error } = await supabase
.from("agent_instances")
.select(
"id, user_id, uuid_tenant, status, telegram_bot_username, telegram_webhook_configured, telegram_token_invalid, telegram_first_message_received_at, telegram_connected_at, telegram_onboarding_completed, created_at",
"id, user_id, uuid_tenant, status, telegram_bot_username, telegram_bot_token_vault_id, telegram_webhook_configured, telegram_token_invalid, telegram_first_message_received_at, telegram_connected_at, telegram_onboarding_completed, created_at",
)
.eq("user_id", user!.id)
.maybeSingle();