/** * Needs a doc string. */ import React, { useState, useEffect, useRef } from "react"; import Sockette from "sockette"; import { Link } from "react-router-dom"; import "./spy.css"; export function DocumentSpy({ onMessage }) { // null - never connected before // true - connected // false - no longer connected const [connected, setConnected] = useState(null); const [lastMessage, setLastMessage] = useState(null); const [websocketError, setWebsocketError] = useState(null); const wssRef = useRef(); useEffect(() => { let mounted = true; wssRef.current = new Sockette("ws://localhost:8080", { timeout: 5e3, maxAttempts: 25, onopen: (e) => { if (mounted) setConnected(true); }, onmessage: (e) => { const data = JSON.parse(e.data); onMessage(data); if (mounted) setLastMessage(data); }, onreconnect: (e) => {}, onmaximum: (e) => {}, onclose: (e) => { if (mounted) setConnected(false); }, onerror: (e) => { if (mounted) setWebsocketError(e); }, }); return () => { mounted = false; wssRef.current && wssRef.current.close(); }; }, [onMessage]); if (connected === null) { return null; } return (
{websocketError ? ( WebSocket error! ) : ( Document Spy {connected ? "connected 👀" : "not connected 👎🏽"} )}{" "} {lastMessage && }
); } function ShowLastMessage({ hasEDITOR, documentUri, changedFile }: any) { function clickToOpenHandler(event) { event.preventDefault(); console.log(`Going to try to open ${changedFile.path} in your editor`); fetch(`/_open?filepath=${changedFile.path}`); } return ( Last changed URL {documentUri}{" "} {hasEDITOR && ( Open in your editor )} ); }