Player: pass functions to the InbutBox

This commit is contained in:
He4eT 2023-05-29 01:02:33 +03:00 committed by Alexey
commit 4173349481
5 changed files with 51 additions and 9 deletions

View file

@ -38,6 +38,8 @@ export default function InputBox ({
windows, windows,
currentWindowId, currentWindowId,
sendMessage, sendMessage,
onFullscreenRequest,
setMenuOpen,
}) { }) {
const [targetWindow, setTargetWindow] = useState(null) const [targetWindow, setTargetWindow] = useState(null)
const [inputText, setInputText] = useState('') const [inputText, setInputText] = useState('')
@ -126,9 +128,6 @@ export default function InputBox ({
}, },
} }
const enterFullscreen = () =>
document.documentElement.requestFullscreen()
return ( return (
<input {...inputHandlers[inputType]} <input {...inputHandlers[inputType]}
className='inputBox' className='inputBox'
@ -136,7 +135,7 @@ export default function InputBox ({
value={inputText} value={inputText}
autofocus autofocus
autocomplete='off' autocomplete='off'
onDblClick={enterFullscreen} onDblClick={onFullscreenRequest}
onInput={({ target: { value } }) => setInputText(value)} onInput={({ target: { value } }) => setInputText(value)}
type='text' /> type='text' />
) )

View file

@ -6,12 +6,26 @@ import ThemeSelector from
import './MenuOverlay.css' import './MenuOverlay.css'
export default function MenuOverlay ({ themeEngine }) { export default function MenuOverlay ({
themeEngine, onFullscreenRequest, menuOpen, setMenuOpen,
}) {
const dialog = useRef(null) const dialog = useRef(null)
useEffect(() => {
const dialogOpen = dialog.current.open
if (menuOpen && !dialogOpen) {
dialog.current.showModal()
}
if (!menuOpen && dialogOpen) {
dialog.current.close()
}
}, [menuOpen])
useEffect(() => { useEffect(() => {
const closeHandler = () => { const closeHandler = () => {
console.log('dialog closed') setMenuOpen(false)
} }
dialog.current.addEventListener('close', closeHandler) dialog.current.addEventListener('close', closeHandler)
@ -27,8 +41,16 @@ export default function MenuOverlay ({ themeEngine }) {
ElseIfPlayer ElseIfPlayer
</Link> </Link>
</div> </div>
<div className='appearance'> <div className='appearance'>
<button>Request fullscreen</button> <button
onClick={() => {
dialog.current.close()
onFullscreenRequest()
}}
>
Request fullscreen
</button>
<button <button
onClick={() => themeEngine.setRandomTheme()} onClick={() => themeEngine.setRandomTheme()}
> >
@ -41,6 +63,7 @@ export default function MenuOverlay ({ themeEngine }) {
}} /> }} />
</label> </label>
</div> </div>
<div> <div>
<button <button
onClick={() => dialog.current.close()} onClick={() => dialog.current.close()}

View file

@ -35,7 +35,10 @@ const runMachine = ({ engine: Engine, wasmBinary, storyfile, handlers }) => {
} }
export default function Player ({ export default function Player ({
vmParts: { storyfile, engine, wasmBinary }, singleWindow, vmParts: { storyfile, engine, wasmBinary },
onFullscreenRequest,
setMenuOpen,
singleWindow,
}) { }) {
const [status, setStatus] = useState(INITIAL_STATUS) const [status, setStatus] = useState(INITIAL_STATUS)
@ -113,6 +116,8 @@ export default function Player ({
windows, windows,
currentWindowId, currentWindowId,
sendMessage, sendMessage,
onFullscreenRequest,
setMenuOpen,
}} /> }} />
</section>) </section>)
} }

View file

@ -57,7 +57,9 @@ const prepareVM = ({ url, setStatus, setParts }) => {
}) })
} }
export default function UrlPlayer ({ url, singleWindow }) { export default function UrlPlayer ({
url, singleWindow, onFullscreenRequest, setMenuOpen,
}) {
const [status, setStatus] = useState(INITIAL_STATUS) const [status, setStatus] = useState(INITIAL_STATUS)
const [vmParts, setParts] = useState(null) const [vmParts, setParts] = useState(null)
@ -73,6 +75,8 @@ export default function UrlPlayer ({ url, singleWindow }) {
return vmParts return vmParts
? (<Player {...{ ? (<Player {...{
vmParts, vmParts,
onFullscreenRequest,
setMenuOpen,
singleWindow, singleWindow,
}} />) }} />)
: (<Status {...status} />) : (<Status {...status} />)

View file

@ -21,13 +21,24 @@ export default function PlayerView ({
setTargetUrl(decode(encodedUrl)) setTargetUrl(decode(encodedUrl))
}, [encodedUrl]) }, [encodedUrl])
const [menuOpen, setMenuOpen] = useState(false)
const onFullscreenRequest = () => {
document.documentElement.requestFullscreen()
}
return ( return (
<main> <main>
<MenuOverlay {...{ <MenuOverlay {...{
themeEngine, themeEngine,
onFullscreenRequest,
menuOpen,
setMenuOpen,
}}/> }}/>
<UrlPlayer {...{ <UrlPlayer {...{
url: targetUrl, url: targetUrl,
onFullscreenRequest,
setMenuOpen,
singleWindow, singleWindow,
}} /> }} />
</main> </main>