'use client' import React, { useEffect, useCallback } from 'react' import { useRouter, useSearchParams } from 'next/navigation' import Sidebar from '../../../components/ui/Sidebar' import useNavigationStore from '../../store/navigationStore' import Monitoring from '../../../components/navigation/Monitoring' import FloorNavigation from '../../../components/navigation/FloorNavigation' import DetectorMenu from '../../../components/navigation/DetectorMenu' import Notifications from '../../../components/notifications/Notifications' import NotificationDetectorInfo from '../../../components/notifications/NotificationDetectorInfo' import ModelViewer from '../../../components/model/ModelViewer' import detectorsData from '../../../data/detectors.json' interface DetectorType { detector_id: number name: string object: string status: string checked: boolean type: string location: string floor: number notifications: Array<{ id: number type: string message: string timestamp: string acknowledged: boolean priority: string }> } interface NotificationType { id: number detector_id: number detector_name: string type: string status: string message: string timestamp: string location: string object: string acknowledged: boolean priority: string } const NavigationPage: React.FC = () => { const router = useRouter() const searchParams = useSearchParams() const { currentObject, setCurrentObject, showMonitoring, showFloorNavigation, showNotifications, selectedDetector, showDetectorMenu, selectedNotification, showNotificationDetectorInfo, closeMonitoring, closeFloorNavigation, closeNotifications, setSelectedDetector, setShowDetectorMenu, setSelectedNotification, setShowNotificationDetectorInfo } = useNavigationStore() const urlObjectId = searchParams.get('objectId') const urlObjectTitle = searchParams.get('objectTitle') const objectId = currentObject.id || urlObjectId const objectTitle = currentObject.title || urlObjectTitle const handleModelLoaded = useCallback(() => { }, []) const handleModelError = useCallback((error: string) => { console.error('Model loading error:', error) }, []) useEffect(() => { if (urlObjectId && urlObjectTitle && (!currentObject.id || currentObject.id !== urlObjectId)) { setCurrentObject(urlObjectId, urlObjectTitle) } }, [urlObjectId, urlObjectTitle, currentObject.id, setCurrentObject]) const handleBackClick = () => { router.push('/dashboard') } const handleDetectorMenuClick = (detector: DetectorType) => { if (selectedDetector?.detector_id === detector.detector_id && showDetectorMenu) { setShowDetectorMenu(false) setSelectedDetector(null) } else { setSelectedDetector(detector) setShowDetectorMenu(true) } } const closeDetectorMenu = () => { setShowDetectorMenu(false) setSelectedDetector(null) } const handleNotificationClick = (notification: NotificationType) => { if (selectedNotification?.id === notification.id && showNotificationDetectorInfo) { setShowNotificationDetectorInfo(false) setSelectedNotification(null) } else { setSelectedNotification(notification) setShowNotificationDetectorInfo(true) } } const closeNotificationDetectorInfo = () => { setShowNotificationDetectorInfo(false) setSelectedNotification(null) } const getStatusText = (status: string) => { switch (status) { case 'active': return 'Активен' case 'inactive': return 'Неактивен' case 'error': return 'Ошибка' case 'maintenance': return 'Обслуживание' default: return 'Неизвестно' } } return (
{showMonitoring && (
)} {showFloorNavigation && (
)} {showNotifications && (
)} {showNotifications && showNotificationDetectorInfo && selectedNotification && (() => { const detectorData = Object.values(detectorsData.detectors).find( detector => detector.detector_id === selectedNotification.detector_id ); return detectorData ? (
) : null; })()} {showFloorNavigation && showDetectorMenu && selectedDetector && ( )}
) } export default NavigationPage