'use client'; import { useState, useEffect } from 'react'; import Sidebar from '@/components/Sidebar'; import OrganizationDetailsModal from '@/components/OrganizationDetailsModal'; import OrganizationCreateModal from '@/components/OrganizationCreateModal'; import OrganizationEditModal from '@/components/OrganizationEditModal'; import SearchModal from '@/components/SearchModal'; import Logo from '@/components/Logo'; import { aircraftApi, Aircraft } from '@/lib/api'; export default function OrganizationsPage() { const [aircraft, setAircraft] = useState([]); const [loading, setLoading] = useState(true); const [operators, setOperators] = useState>(new Map()); const [selectedOrganization, setSelectedOrganization] = useState(null); const [isDetailsModalOpen, setIsDetailsModalOpen] = useState(false); const [isSearchModalOpen, setIsSearchModalOpen] = useState(false); const [searchOrganization, setSearchOrganization] = useState(null); const [isCreateModalOpen, setIsCreateModalOpen] = useState(false); const [isEditModalOpen, setIsEditModalOpen] = useState(false); const [editingOrganization, setEditingOrganization] = useState<{ name: string; type?: string; address?: string; contact?: string; email?: string; phone?: string } | null>(null); useEffect(() => { const loadData = async () => { try { const data = await aircraftApi.getAircraft(); setAircraft(data); // Группируем по операторам const operatorsMap = new Map(); data.forEach(a => { const operator = a.operator && a.operator !== 'Не указан' ? a.operator : 'Не указан'; if (!operatorsMap.has(operator)) { operatorsMap.set(operator, []); } operatorsMap.get(operator)!.push(a); }); setOperators(operatorsMap); } catch (error) { console.error('Ошибка загрузки данных:', error); } finally { setLoading(false); } }; loadData(); }, []); const operatorsList = Array.from(operators.entries()).sort((a, b) => b[1].length - a[1].length); const handleShowDetails = (operator: string) => { setSelectedOrganization(operator); setIsDetailsModalOpen(true); }; const handleSearch = (operator: string) => { setSearchOrganization(operator); setIsSearchModalOpen(true); }; const handleEditAircraft = (editedAircraft: Aircraft) => { // Обновляем данные в состоянии setAircraft(prev => prev.map(a => a.id === editedAircraft.id ? editedAircraft : a)); // Обновляем группировку по операторам const operatorsMap = new Map(); const updatedAircraft = aircraft.map(a => a.id === editedAircraft.id ? editedAircraft : a); updatedAircraft.forEach(a => { const operator = a.operator && a.operator !== 'Не указан' ? a.operator : 'Не указан'; if (!operatorsMap.has(operator)) { operatorsMap.set(operator, []); } operatorsMap.get(operator)!.push(a); }); setOperators(operatorsMap); alert(`Данные воздушного судна ${editedAircraft.registrationNumber} обновлены`); }; const getOrganizationAircraft = (operator: string): Aircraft[] => { return operators.get(operator) || []; }; const getSearchAircraft = (): Aircraft[] => { // Если searchOrganization null, ищем по всем aircraft // Если указана организация, ищем только в её aircraft if (searchOrganization === null) { return aircraft; } return operators.get(searchOrganization) || []; }; const handleCreateOrganization = (organizationData: any) => { // Здесь можно добавить логику сохранения новой организации // Пока просто показываем уведомление alert(`Организация "${organizationData.name}" успешно создана`); // В реальном приложении здесь был бы вызов API для сохранения }; const handleEdit = (operator: string) => { // Создаём объект организации из названия оператора setEditingOrganization({ name: operator, type: 'Авиакомпания', // По умолчанию, можно будет изменить в форме }); setIsEditModalOpen(true); }; const handleSaveOrganization = (updatedOrganization: any) => { // Здесь можно добавить логику обновления организации // Пока просто показываем уведомление alert(`Организация "${updatedOrganization.name}" успешно обновлена`); // В реальном приложении здесь был бы вызов API для обновления // Также нужно обновить названия операторов в aircraft, если изменилось название организации }; return (

Система контроля лётной годности воздушных судов · Безопасность и качество

Организации

Управление организациями и операторами воздушных судов

{loading ? (
Загрузка данных...
) : operatorsList.length > 0 ? (
{operatorsList.map(([operator, aircraftList]) => (

{operator}

{aircraftList.length} воздушных судов
{aircraftList.slice(0, 5).map(a => (
{a.registrationNumber}
{a.aircraftType}
))} {aircraftList.length > 5 && (
+{aircraftList.length - 5} ещё
)}
))}
) : (
ℹ️
Нет данных
Организации не найдены. Проверьте данные реестра.
)} { setIsDetailsModalOpen(false); setSelectedOrganization(null); }} organization={selectedOrganization || ''} aircraft={selectedOrganization ? getOrganizationAircraft(selectedOrganization) : []} onEdit={handleEditAircraft} /> { setIsSearchModalOpen(false); setSearchOrganization(null); }} aircraft={getSearchAircraft()} searchType="organization" /> setIsCreateModalOpen(false)} onCreate={handleCreateOrganization} /> { setIsEditModalOpen(false); setEditingOrganization(null); }} organization={editingOrganization} onSave={handleSaveOrganization} />
); }