// Settings.jsx
'use strict';
const { useState } = React;
const PERMISSION_LEVELS = ['Administrador','Técnico','Atendente','Somente leitura'];
const MOCK_USERS = [
{ id:'U1', name:'Ademir Machado', email:'demo@juflow.com', role:'Administrador', active:true, avatar:'AM' },
{ id:'U2', name:'Carlos Ferreira', email:'carlos@juflow.com', role:'Técnico', active:true, avatar:'CF' },
{ id:'U3', name:'Ana Paula Souza', email:'ana.paula@juflow.com', role:'Técnico', active:true, avatar:'AS' },
{ id:'U4', name:'Ricardo Alves', email:'ricardo@juflow.com', role:'Técnico', active:true, avatar:'RA' },
{ id:'U5', name:'Mariana Castro', email:'mariana@juflow.com', role:'Atendente', active:false, avatar:'MC' },
];
const THEME_PRESETS = [
{ label:'JuFlow Original', primary:'#0A1F44', accent:'#FF6B35' },
{ label:'Oceano', primary:'#0E4C8A', accent:'#00C4CC' },
{ label:'Floresta', primary:'#1B4332', accent:'#40C057' },
{ label:'Pôr do Sol', primary:'#6B2D4E', accent:'#F97316' },
];
function CompanyTab({ company, onSave, addToast }) {
const [form, setForm] = useState(company);
const [saved, setSaved] = useState(false);
const set=(k,v)=>{setForm(f=>({...f,[k]:v}));setSaved(false);};
const save=()=>{
onSave(form);
setSaved(true);
if (addToast) addToast({ type:'success', msg:'Configurações salvas — refletem no PDF da OS.' });
};
return (
);
}
function UsersTab() {
const [users, setUsers] = useState(MOCK_USERS);
const [showInvite, setShowInvite] = useState(false);
const [inviteEmail, setInviteEmail] = useState('');
const [inviteRole, setInviteRole] = useState('Técnico');
const toggleUser=(id)=>setUsers(us=>us.map(u=>u.id===id?{...u,active:!u.active}:u));
const invite=()=>{ setShowInvite(false); setInviteEmail(''); };
const roleColor={'Administrador':'#0A1F44','Técnico':'#3B82F6','Atendente':'#10B981','Somente leitura':'#94A3B8'};
return (
{users.filter(u=>u.active).length} usuário(s) ativo(s)
setShowInvite(v=>!v)}>Convidar Usuário
{showInvite && (
Convidar novo usuário
setInviteEmail(e.target.value)} placeholder="usuario@email.com"/>
setInviteRole(e.target.value)}>{PERMISSION_LEVELS.map(p=>{p} )}
Enviar convite setShowInvite(false)}>Cancelar
)}
{users.map(u=>(
{u.avatar}
{u.name}
{u.role}
{!u.active&&Inativo }
{u.email}
{u.id!=='U1'&&(
toggleUser(u.id)}
className={`text-xs font-semibold px-3 py-1.5 rounded-lg transition-colors ${u.active?'text-red-500 hover:bg-red-50':'text-emerald-600 hover:bg-emerald-50'}`}>
{u.active?'Desativar':'Ativar'}
)}
))}
);
}
function AppearanceTab() {
const [primary, setPrimary] = useState('#0A1F44');
const [accent, setAccent] = useState('#FF6B35');
const [preset, setPreset] = useState(0);
const applyPreset=i=>{ const p=THEME_PRESETS[i]; setPrimary(p.primary); setAccent(p.accent); setPreset(i); };
return (
Temas Predefinidos
{THEME_PRESETS.map((t,i)=>(
applyPreset(i)}
className={`p-3 rounded-xl border-2 flex items-center gap-3 transition-all ${preset===i?'border-blue-400 bg-blue-50':' border-slate-200 hover:border-slate-300'}`}>
{t.label}
{preset===i&&}
))}
{/* Live preview */}
Preview ao Vivo
JF
{['Dashboard','OSs','Clientes'].map(n=>
{n}
)}
);
}
function NotificationsTab() {
const [prefs, setPrefs] = useState({
osAtrasada:true, agendamento:true, contaVencer:true, osConcluida:true, emailDigest:false,
});
const toggle=k=>setPrefs(p=>({...p,[k]:!p[k]}));
const items = [
{ key:'osAtrasada', label:'OS com prazo vencido', desc:'Alertar quando uma OS ultrapassar o prazo previsto' },
{ key:'agendamento', label:'Agendamento próximo', desc:'Lembrete 1 hora antes do agendamento' },
{ key:'contaVencer', label:'Conta a receber vencendo', desc:'Alertar sobre OSs com pagamento pendente há mais de 7 dias' },
{ key:'osConcluida', label:'OS concluída pelo técnico', desc:'Notificar quando um técnico marcar uma OS como concluída' },
{ key:'emailDigest', label:'Resumo diário por e-mail', desc:'Receber um e-mail com o resumo do dia todo manhã' },
];
return (
{items.map(item=>(
toggle(item.key)}
className={`relative w-10 h-5.5 rounded-full transition-colors flex-shrink-0 mt-0.5 ${prefs[item.key]?'':'bg-slate-200'}`}
style={{height:22,background:prefs[item.key]?'#FF6B35':'#E2E8F0'}}>
))}
);
}
function Settings({ company, onSaveCompany, addToast }) {
const [tab, setTab] = useState('empresa');
const settingsTabs = [
{id:'empresa', label:'Empresa', icon:'Building2'},
{id:'usuarios', label:'Usuários', icon:'Users'},
{id:'aparencia', label:'Aparência', icon:'Palette'},
{id:'notificacoes', label:'Notificações', icon:'Bell'},
];
return (
{/* Tab sidebar */}
{settingsTabs.map(t=>(
setTab(t.id)}
className={`w-full flex items-center gap-3 px-3 py-2.5 rounded-xl text-sm font-medium transition-all mb-0.5 ${tab===t.id?'text-white':'text-slate-500 hover:bg-slate-50'}`}
style={tab===t.id?{background:'#0A1F44'}:{}}>
{t.label}
))}
{/* Content */}
{settingsTabs.find(t=>t.id===tab)?.label}
{tab==='empresa' && }
{tab==='usuarios' && }
{tab==='aparencia' && }
{tab==='notificacoes' && }
);
}
Object.assign(window, { Settings });