import { motion, AnimatePresence } from 'framer-motion'; import { useState, useEffect } from 'react'; import { Link } from 'react-router-dom'; import { ArrowLeft, Settings, Wrench, Cloud, AlertTriangle, Users, Truck, Package, Download, Upload, RotateCcw, KeyRound, Trash2 } from 'lucide-react'; import { ThemeToggle } from '../components/ThemeToggle'; import { TiposAtividadeConfig } from '../components/config/TiposAtividadeConfig'; import { CondicoesClimaticasConfig } from '../components/config/CondicoesClimaticasConfig'; import { TiposOcorrenciaConfig } from '../components/config/TiposOcorrenciaConfig'; import { FuncoesCargosConfig } from '../components/config/FuncoesCargosConfig'; import { TiposEquipamentoConfig } from '../components/config/TiposEquipamentoConfig'; import { MateriaisConfig } from '../components/config/MateriaisConfig'; import { useConfigStore } from '../stores/configStore'; import ManageInvites from '../components/ManageInvites'; import { supabase } from '../lib/supabase'; type TabType = 'atividades' | 'clima' | 'ocorrencias' | 'funcoes' | 'equipamentos' | 'materiais' | 'convites'; interface Tab { id: TabType; label: string; icon: React.ElementType; description: string; component: React.ComponentType; } const tabs: Tab[] = [ { id: 'atividades', label: 'Tipos de Atividades', icon: Wrench, description: 'Configure os tipos de atividades disponíveis para os RDOs', component: TiposAtividadeConfig }, { id: 'clima', label: 'Condições Climáticas', icon: Cloud, description: 'Gerencie as opções de condições climáticas', component: CondicoesClimaticasConfig }, { id: 'ocorrencias', label: 'Tipos de Ocorrências', icon: AlertTriangle, description: 'Configure os tipos de ocorrências e incidentes', component: TiposOcorrenciaConfig }, { id: 'funcoes', label: 'Funções/Cargos', icon: Users, description: 'Gerencie as funções e cargos da equipe', component: FuncoesCargosConfig }, { id: 'equipamentos', label: 'Tipos de Equipamentos', icon: Truck, description: 'Configure os tipos de equipamentos disponíveis', component: TiposEquipamentoConfig }, { id: 'materiais', label: 'Materiais', icon: Package, description: 'Gerencie os tipos de materiais utilizados', component: MateriaisConfig }, { id: 'convites', label: 'Convites', icon: KeyRound, description: 'Gerencie convites para novos membros da organização', component: ManageInvites } ]; export default function Configuracoes() { const [activeTab, setActiveTab] = useState('atividades'); const [showImportExport, setShowImportExport] = useState(false); const { exportConfig, importConfig, resetToDefaults, fetchAll } = useConfigStore(); useEffect(() => { // Sincroniza configurações com o banco ao entrar na tela fetchAll(); }, [fetchAll]); const handleExport = () => { const config = exportConfig(); const blob = new Blob([config], { type: 'application/json' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = `rdo-configuracoes-${new Date().toISOString().split('T')[0]}.json`; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(url); }; const handleImport = (event: React.ChangeEvent) => { const file = event.target.files?.[0]; if (file) { const reader = new FileReader(); reader.onload = (e) => { const content = e.target?.result as string; importConfig(content); alert('Configurações importadas com sucesso!'); }; reader.readAsText(file); } }; const handleReset = () => { if (confirm('Tem certeza que deseja restaurar todas as configurações para os valores padrão? Esta ação não pode ser desfeita.')) { resetToDefaults(); alert('Configurações restauradas para os valores padrão!'); } }; const activeTabData = tabs.find(tab => tab.id === activeTab); const ActiveComponent = activeTabData?.component; return (
{/* Header */}

Configurações

Gerencie as listas de seleção do sistema

{showImportExport && (
)}
{/* Grid de Tabs 2x3 */}
{tabs.map((tab) => { const Icon = tab.icon; return ( ); })}
{/* Conteúdo Principal */}
{ActiveComponent && }
); }