feat: melhorias visuais na janela de chat do desktop

- Desabilita sombra da janela para transparência funcionar corretamente
- Adiciona badge de mensagens não lidas no chip minimizado
- Ajusta tamanho da janela minimizada para acomodar badge e texto offline
- Mostra chat minimizado com badge quando há novas mensagens (menos intrusivo)
- Adiciona listener para atualização de unread count em tempo real

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Seu Nome 2025-12-08 11:14:15 -03:00
parent 24dee5d5eb
commit d2b8c27206
2 changed files with 44 additions and 8 deletions

View file

@ -802,7 +802,7 @@ async fn process_chat_update(
}),
);
// Notificar novas mensagens (sem abrir janela automaticamente - so na nova sessao)
// Notificar novas mensagens - mostrar chat minimizado com badge
if new_messages && total_unread > 0 {
let new_count = total_unread - prev_unread;
@ -817,7 +817,22 @@ async fn process_chat_update(
}),
);
// Notificacao nativa (sem abrir janela - usuario pode clicar para abrir)
// Mostrar janela de chat minimizada (menos intrusivo que abrir completo)
if let Some(session) = current_sessions.first() {
// Abrir janela se nao existir
let label = format!("chat-{}", session.ticket_id);
if app.get_webview_window(&label).is_none() {
let _ = open_chat_window(app, &session.ticket_id);
// Minimizar imediatamente apos abrir
let _ = set_chat_minimized(app, &session.ticket_id, true);
}
// Se ja existe, apenas garantir que esta visivel (pode estar escondida)
else if let Some(window) = app.get_webview_window(&label) {
let _ = window.show();
}
}
// Notificacao nativa
let notification_title = "Nova mensagem de suporte";
let notification_body = if new_count == 1 {
"Voce recebeu 1 nova mensagem no chat".to_string()
@ -875,10 +890,11 @@ fn open_chat_window_internal(app: &tauri::AppHandle, ticket_id: &str) -> Result<
)
.title("Chat de Suporte")
.inner_size(380.0, 520.0)
.min_inner_size(168.0, 36.0) // Tamanho minimo para modo minimizado
.min_inner_size(200.0, 44.0) // Tamanho minimo para modo minimizado com badge
.position(x, y)
.decorations(false) // Sem decoracoes nativas - usa header customizado
.transparent(true) // Permite fundo transparente
.shadow(false) // Desabilitar sombra para transparencia funcionar corretamente
.always_on_top(true)
.skip_taskbar(true)
.focused(true)
@ -915,9 +931,9 @@ pub fn set_chat_minimized(app: &tauri::AppHandle, ticket_id: &str, minimized: bo
let label = format!("chat-{}", ticket_id);
let window = app.get_webview_window(&label).ok_or("Janela nao encontrada")?;
// Tamanhos - chip minimizado precisa ser exato para transparencia funcionar
// Tamanhos - chip minimizado com margem extra para badge e modo offline
let (width, height) = if minimized {
(168.0, 36.0) // Tamanho exato do chip rounded-full
(200.0, 44.0) // Tamanho com folga para badge e texto "Offline"
} else {
(380.0, 520.0) // Tamanho expandido
};