diff --git a/packages/desktop/src/providers/LocalStreamProvider.tsx b/packages/desktop/src/providers/LocalStreamProvider.tsx deleted file mode 100644 index 0d3ea6d..0000000 --- a/packages/desktop/src/providers/LocalStreamProvider.tsx +++ /dev/null @@ -1 +0,0 @@ -// Manage user's stream and diff --git a/packages/desktop/src/providers/SocketProvider.tsx b/packages/desktop/src/providers/SocketProvider.tsx index 7508d98..79adcfc 100644 --- a/packages/desktop/src/providers/SocketProvider.tsx +++ b/packages/desktop/src/providers/SocketProvider.tsx @@ -1,10 +1,13 @@ -import React, { useState, useEffect, useContext } from 'react'; +import React, { useState, useEffect, useContext, useCallback } from 'react'; import toast from 'react-hot-toast'; import { io, Socket } from 'socket.io-client'; import useAuth from './AuthProvider'; +import FlowState from '../tree/protected/FlowState'; interface ISocketProvider { $ws: Socket; + + handleFlowState?: () => void; } const SocketContext = React.createContext({ @@ -16,6 +19,8 @@ export function SocketProvider({ children }: { children: React.ReactNode }) { const [$ws, set$ws] = useState(null); + const [flowState, setFlowState] = useState(false); + useEffect(() => { if (!jwtToken) { set$ws(undefined); @@ -52,9 +57,23 @@ export function SocketProvider({ children }: { children: React.ReactNode }) { return () => { socketConnection.disconnect(); + socketConnection.removeAllListeners(); }; }, [set$ws, jwtToken]); + const handleFlowState = useCallback(() => { + setFlowState(true); + + $ws.disconnect(); + $ws.removeAllListeners(); + }, [setFlowState, $ws]); + + const handleReconnect = useCallback(() => { + setFlowState(false); + + $ws.connect(); + }, [setFlowState, $ws]); + if (!$ws) { return (
@@ -63,14 +82,18 @@ export function SocketProvider({ children }: { children: React.ReactNode }) { "Please wait for a solid connection. If that doesn't work, please click below or restart the application." } - +
); } - return {children}; + if (flowState) { + return ; + } + + return ( + {children} + ); } export default function useSockets() { diff --git a/packages/desktop/src/providers/PeerStreamProvider.tsx b/packages/desktop/src/providers/StreamProvider.tsx similarity index 100% rename from packages/desktop/src/providers/PeerStreamProvider.tsx rename to packages/desktop/src/providers/StreamProvider.tsx diff --git a/packages/desktop/src/tree/protected/FlowState.tsx b/packages/desktop/src/tree/protected/FlowState.tsx new file mode 100644 index 0000000..9bfd8cb --- /dev/null +++ b/packages/desktop/src/tree/protected/FlowState.tsx @@ -0,0 +1,49 @@ +import React, { useEffect, useState } from 'react'; +import FullMottoLogo, { LogoType } from '@nirvana/components/logo/fullMotto'; + +type Quote = { + content: string; + author: string; + length: number; + dateAdded: Date; + _id: string; + tags: string[]; +}; +export default function FlowState({ handleReconnect }: { handleReconnect: () => void }) { + const [quote, setQuote] = useState(null); + + useEffect(() => { + fetch('https://api.quotable.io/random') + .then((res) => res.json()) + .then((data: Quote) => { + console.warn(data); + + setQuote(data); + }) + .catch((error) => { + // do nothing, don't bother user, just don't show the quote + console.warn(error); + }); + }, []); + + return ( +
+ {/* */} + + + {quote && ( + + {`"${quote.content}"`} + {quote.author} + + )} + + +
+ ); +} diff --git a/packages/desktop/src/tree/protected/terminal/navbar/Navbar.tsx b/packages/desktop/src/tree/protected/terminal/navbar/Navbar.tsx index 3971b48..9a8942c 100644 --- a/packages/desktop/src/tree/protected/terminal/navbar/Navbar.tsx +++ b/packages/desktop/src/tree/protected/terminal/navbar/Navbar.tsx @@ -5,6 +5,7 @@ import React, { useMemo, useRef, useState } from 'react'; import { FaSearch } from 'react-icons/fa'; import useAuth from '../../../../providers/AuthProvider'; import useElectron from '../../../../providers/ElectronProvider'; +import useSockets from '../../../../providers/SocketProvider'; /** * TODO: add in video mode @@ -14,6 +15,8 @@ export default function NavBar() { const { user, handleLogout } = useAuth(); const { desktopMode } = useElectron(); + const { handleFlowState } = useSockets(); + const inputRef = useRef(null); const [searchInput, setSearchInput] = useState(''); @@ -120,22 +123,12 @@ export default function NavBar() { )} - {/* todo: move this ghost button to components */} - {/* {desktopMode === 'flowState' ? ( - - ) : ( - - )} */} +