import React, { useState, useEffect } from 'react'; import { createClient } from '@supabase/supabase-js'; import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'; import { faTachometerAlt, faCalendarAlt, faTools, faWrench, faClipboardCheck, faChartLine, faUsersCog, faBell, faBars } from '@fortawesome/free-solid-svg-icons'; import Swal from 'sweetalert2'; import Dashboard from './components/Dashboard'; import Equipment from './components/Equipment'; // Initialize Supabase client const supabase = createClient( import.meta.env.VITE_SUPABASE_URL, import.meta.env.VITE_SUPABASE_ANON_KEY ); function App() { const [currentTab, setCurrentTab] = useState('dashboard'); const [equipment, setEquipment] = useState([]); const [maintenanceEvents, setMaintenanceEvents] = useState([]); const [isLoggedIn, setIsLoggedIn] = useState(false); const [sidebarCollapsed, setSidebarCollapsed] = useState(false); useEffect(() => { const checkUser = async () => { const { data: { user } } = await supabase.auth.getUser(); if (user) { setIsLoggedIn(true); loadData(); } }; checkUser(); }, []); const loadData = async () => { try { const [equipmentResult, eventsResult] = await Promise.all([ supabase.from('equipment').select('*').order('created_at', { ascending: false }), supabase.from('maintenance_events').select('*').order('date', { ascending: false }) ]); if (equipmentResult.error) throw equipmentResult.error; if (eventsResult.error) throw eventsResult.error; setEquipment(equipmentResult.data || []); setMaintenanceEvents(eventsResult.data || []); } catch (error) { console.error('Error loading data:', error); Swal.fire({ title: 'Ошибка', text: 'Не удалось загрузить данные', icon: 'error' }); } }; const handleLogin = async (e) => { e.preventDefault(); const formData = new FormData(e.target); const email = formData.get('email'); const password = formData.get('password'); try { const { error } = await supabase.auth.signInWithPassword({ email, password }); if (error) throw error; setIsLoggedIn(true); loadData(); } catch (error) { Swal.fire({ title: 'Ошибка входа', text: error.message, icon: 'error' }); } }; const handleLogout = async () => { await supabase.auth.signOut(); setIsLoggedIn(false); }; const handleAddEquipment = async (formData) => { try { const { error } = await supabase.from('equipment').insert([{ name: formData.get('name'), type: formData.get('type'), serial: formData.get('serial'), inventory: formData.get('inventory'), commission_date: formData.get('commissionDate'), maintenance_interval: parseInt(formData.get('interval')), description: formData.get('description'), status: 'active' }]); if (error) throw error; loadData(); Swal.fire({ title: 'Успешно', text: 'Оборудование добавлено', icon: 'success' }); } catch (error) { Swal.fire({ title: 'Ошибка', text: error.message, icon: 'error' }); } }; if (!isLoggedIn) { return (