feat(comunicacao-interna): entrada na Gestão de Equipe
Botão "Comunicação interna" em cada membro (gestores) abre o mesmo modal full-screen para preencher/editar o perfil de contato daquele usuário (usuarioId = m.id). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1,10 +1,11 @@
|
||||
import React, { useState, useEffect, useCallback } from 'react';
|
||||
import { Users, Building, Briefcase, Plus, Trash2, Edit2, X, Check, UserPlus, Shield, ChevronDown, Copy, KeyRound } from 'lucide-react';
|
||||
import { Users, Building, Briefcase, Plus, Trash2, Edit2, X, Check, UserPlus, Shield, ChevronDown, Copy, KeyRound, MessageSquare } from 'lucide-react';
|
||||
import { HybridBackend } from '../services/backend.ts';
|
||||
import { useToast } from '../contexts/ToastContext.tsx';
|
||||
import { useConfirm } from '../contexts/ConfirmContext.tsx';
|
||||
import { PageHeader } from '../components/PageHeader.tsx';
|
||||
import { GoogleConnectButton } from '../components/GoogleConnectButton.tsx';
|
||||
import { ComunicacaoInternaModal } from '../components/ComunicacaoInternaModal.tsx';
|
||||
|
||||
type Tab = 'usuarios' | 'setores' | 'funcoes';
|
||||
|
||||
@@ -128,6 +129,7 @@ const UsuariosTab: React.FC<{ clinicaId: string; isOwner: boolean; myNivel: numb
|
||||
const [loading, setLoading] = useState(true);
|
||||
const [showAdd, setShowAdd] = useState(false);
|
||||
const [editing, setEditing] = useState<Membro | null>(null);
|
||||
const [comMembro, setComMembro] = useState<Membro | null>(null); // perfil de comunicação interna
|
||||
|
||||
// Add form
|
||||
const [email, setEmail] = useState('');
|
||||
@@ -264,6 +266,10 @@ const UsuariosTab: React.FC<{ clinicaId: string; isOwner: boolean; myNivel: numb
|
||||
</div>
|
||||
{podeGerenciar(m) && (
|
||||
<div className="flex items-center gap-1 opacity-0 group-hover:opacity-100 transition-opacity">
|
||||
<button onClick={() => setComMembro({ ...m })} title="Comunicação interna"
|
||||
className="p-2 hover:bg-teal-50 rounded-lg transition-colors text-teal-500">
|
||||
<MessageSquare size={15} />
|
||||
</button>
|
||||
<button onClick={() => handleResetSenha(m)} title="Resetar senha"
|
||||
className="p-2 hover:bg-amber-50 rounded-lg transition-colors text-amber-500">
|
||||
<KeyRound size={15} />
|
||||
@@ -420,6 +426,11 @@ const UsuariosTab: React.FC<{ clinicaId: string; isOwner: boolean; myNivel: numb
|
||||
</div>
|
||||
</Modal>
|
||||
)}
|
||||
|
||||
{comMembro && (
|
||||
<ComunicacaoInternaModal usuarioId={comMembro.id} clinicaId={clinicaId} nome={comMembro.nome}
|
||||
onClose={() => setComMembro(null)} onSaved={() => setComMembro(null)} />
|
||||
)}
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user