import { NewRobotIdE } from "@robotical/webapp-types/dist-types/src/store/SelectedRaftContext"; import CogIcon from "../../../assets/connect-button/cog_selected.svg"; import MartyIcon from "../../../assets/connect-button/marty_selected.svg"; import MicroBitIcon from "../../../assets/connect-button/microbit-small.svg"; import styles from "./styles.module.css"; import { RaftTypeE } from "@robotical/webapp-types/dist-types/src/types/raft"; import modalState from "../../../state-observables/modal/ModalState"; import { FaTimes } from "react-icons/fa"; import type MicroBitWebBluetooth from "../../../microbit/MicroBitWebBluetooth"; import { useEffect, useState } from "react"; type Props = { microBit?: MicroBitWebBluetooth | null; }; export default function NewGraphModal({ microBit = null }: Props) { const [connectedMicroBit, setConnectedMicroBit] = useState(() => microBit?.isConnected() ? microBit : null ); const connectedRaftsArray = window.applicationManager?.connectedRaftsContext || []; const connectedRafts = connectedRaftsArray.filter( (raft) => raft.id !== NewRobotIdE.NEW ); const handleDeviceClick = (deviceId: string) => { modalState.closeModal(deviceId); }; useEffect(() => { if (!microBit?.isConnected()) { setConnectedMicroBit(null); return; } setConnectedMicroBit(microBit); const unsubscribe = microBit.addDisconnectListener(() => setConnectedMicroBit(null) ); if (!microBit.isConnected()) { setConnectedMicroBit(null); } return unsubscribe; }, [microBit]); const hasConnectedDevices = connectedRafts.length > 0 || Boolean(connectedMicroBit); return (
{ hasConnectedDevices ?

Select a connected device for this graph

:

No devices are connected. Close this dialog and connect a device to continue.

}
{connectedRafts.map((raft, index) => { let raftIcon; if (raft.type === RaftTypeE.COG) { raftIcon = CogIcon; } else if (raft.type === RaftTypeE.MARTY) { raftIcon = MartyIcon; } const robotName = raft.name?.trim() || `${raft.type} robot`; return ( ) })} {connectedMicroBit && ( )}
); }