import * as React from 'react' import CloseButton from '@msgba/components/close-button' import { sendSaveRequest } from '@msgba/packet' export interface OverlayMenuProps { hiddenMenu: boolean setHiddenMenu: (c: boolean) => void emulationStarted: boolean setHiddenFormSelectFiles: (c: boolean) => void screenRef: React.RefObject isFullscreen: boolean setIsFullscreen: (c: boolean) => void overlayMenu: React.RefObject websocket: WebSocket | null onSaveResponseLambdas: Map void> }; type Style = Record export default function OverlayMenu ({ hiddenMenu, setHiddenMenu, emulationStarted, setHiddenFormSelectFiles, screenRef, isFullscreen, setIsFullscreen, overlayMenu, websocket, onSaveResponseLambdas }: OverlayMenuProps): JSX.Element { function exitMenu (): void { setHiddenMenu(true) } function openSelectFilesMenu (): void { setHiddenFormSelectFiles(false) } function toggleFullscreen (): void { if (isFullscreen) { document.exitFullscreen().catch((c: string) => { console.log(c) }) setIsFullscreen(false) } if (screenRef.current != null) { screenRef.current.requestFullscreen().then(() => { setIsFullscreen(true) }).catch((error: string) => { console.log(error) }) } } const styleSelectRom: Style = {} if (emulationStarted) { styleSelectRom.display = 'none' } const styleMenu: Style = {} if (hiddenMenu) { styleMenu.display = 'none' } let toggleFullscreenText: string = 'Set fullscreen' if (isFullscreen) { toggleFullscreenText = 'End fullscreen' } const saveButton = React.useRef(null) const [saveIdentifier, setSaveidentifier] = React.useState(0n) function onSave (): void { if (websocket == null) { console.log('No websocket still') return } const currentSave = saveIdentifier setSaveidentifier((c: bigint) => c + 1n) console.log('Reachs here') onSaveResponseLambdas.set(currentSave, (saveFile: Uint8Array) => { const anchor = document.createElement('a') const blobSaveResponseFile = new Blob([saveFile.buffer]) const fileReader = new FileReader() fileReader.onload = () => { if (typeof fileReader.result === 'string') { anchor.style.display = 'none' document.body.appendChild(anchor) anchor.href = fileReader.result anchor.download = 'ruby.ss1' anchor.click() return true } return false } fileReader.readAsDataURL(blobSaveResponseFile) }) console.log(onSaveResponseLambdas) sendSaveRequest(websocket, currentSave) } const styleSave: Style = {} if (!emulationStarted) { styleSave.display = 'none' } return ( ) }