import React, { useEffect } from 'react' import { io } from 'socket.io-client' import { Box } from '@chakra-ui/react' import { Canvas } from 'react-three-fiber' import MenuOverlay from './MenuOverlay' import Error from './Error' import Scene from '../3d' import useStore, { UserTransforms } from '../store' import useLogin from '../hooks/useLogin' import { Redirect } from 'react-router-dom' const Museo: React.FC = () => { const { response, isLoading } = useLogin<{ authenticated: boolean }>('auth/check') const setSocket = useStore((state) => state.setSocket) const setError = useStore((state) => state.setError) const error = useStore((state) => state.error) const setUserTransforms = useStore((state) => state.setUserTransforms) useEffect(() => { if (!response || isLoading) { return } const socket = io() setSocket(socket) socket.on('disconnect', () => setError('SOCKET')) socket.on('broadcast-transforms', (payload: UserTransforms) => { setUserTransforms(payload) }) return () => { socket.close() setSocket(null) } }, [response, isLoading]) if (isLoading || !response) return null return response.authenticated === false ? ( ) : ( {error ? ( ) : ( <> )} ) } export default Museo