Player: add the singleWindow option

This commit is contained in:
He4eT 2021-07-19 23:37:22 +05:00
commit e72481f7dc
4 changed files with 45 additions and 18 deletions

View file

@ -37,7 +37,9 @@ const Handlers = ({
setInputType, setInputType,
setInbox setInbox
}) => ({ }) => ({
onInit: _ => setStatus({ stage: 'ready' }), onInit: _ => {
setStatus({ stage: 'ready' })
},
/* */ /* */
onUpdateWindows: windows => { onUpdateWindows: windows => {
setWindows(windows) setWindows(windows)
@ -49,8 +51,12 @@ const Handlers = ({
setCurrentWindowId(id) setCurrentWindowId(id)
setInputType(type) setInputType(type)
}, },
onUpdateContent: setInbox, onUpdateContent: inbox => {
onDisable: _ => setInputType(null), setInbox(inbox)
},
onDisable: _ => {
setInputType(null)
},
/* */ /* */
onFileNameRequest: (tosave, usage, _, setFileName) => { onFileNameRequest: (tosave, usage, _, setFileName) => {
setFileName({ setFileName({
@ -66,10 +72,14 @@ const Handlers = ({
localStorage.setItem(`fake-fs/${filename}`, encode(content)) localStorage.setItem(`fake-fs/${filename}`, encode(content))
}, },
/* */ /* */
onExit: _ => setInputType(null) onExit: _ => {
setInputType(null)
}
}) })
export default function ({ vmParts: { file, engine } }) { export default function ({
vmParts: { file, engine }, singleWindow
}) {
const [status, setStatus] = useState(INITIAL_STATUS) const [status, setStatus] = useState(INITIAL_STATUS)
const [windows, setWindows] = useState([]) const [windows, setWindows] = useState([])
@ -123,7 +133,9 @@ export default function ({ vmParts: { file, engine } }) {
<section className='output'>{ <section className='output'>{
windows windows
.sort(byTop) .sort(byTop)
// .filter(({id}) => id === currentWindowId) .filter(singleWindow
? ({id}) => id === currentWindowId
: _ => true)
.map(textWindow(inbox))} .map(textWindow(inbox))}
</section> </section>
<InputBox {...{ <InputBox {...{

View file

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

View file

@ -21,6 +21,12 @@ function App () {
const themeEngine = useThemeEngine() const themeEngine = useThemeEngine()
const [location] = useHashLocation() const [location] = useHashLocation()
const playerView = (themeEngine, singleWindow) => params =>
(<PlayerView {...{
...themeEngine,
...params,
singleWindow}}/>)
return ( return (
<Router hook={useHashLocation}> <Router hook={useHashLocation}>
<div className={[ <div className={[
@ -37,18 +43,20 @@ function App () {
<Route path='/games/'> <Route path='/games/'>
<GamesView /> <GamesView />
</Route> </Route>
<Route path='/play/:encodedUrl'> <Route path='/play/:encodedUrl'>
{params => <PlayerView {...{ { playerView(themeEngine, false) }
...themeEngine, </Route>
...params <Route path='/play/:encodedUrl/focus'>
}} />} { playerView(themeEngine, true) }
</Route>
<Route path='/play/:encodedUrl/:theme/focus'>
{ playerView(themeEngine, true) }
</Route> </Route>
<Route path='/play/:encodedUrl/:theme'> <Route path='/play/:encodedUrl/:theme'>
{params => <PlayerView {...{ { playerView(themeEngine, false) }
...themeEngine,
...params
}} />}
</Route> </Route>
<Route> <Route>
<NotFoundView /> <NotFoundView />
</Route> </Route>

View file

@ -7,7 +7,9 @@ import './PlayerView.css'
const decode = encodedUrl => decodeURIComponent(encodedUrl) const decode = encodedUrl => decodeURIComponent(encodedUrl)
export default function ({ setTheme, theme, encodedUrl }) { export default function ({
setTheme, theme, encodedUrl, singleWindow
}) {
useEffect(() => setTheme(theme), [theme]) useEffect(() => setTheme(theme), [theme])
const [targetUrl, setTargetUrl] = useState(decode(encodedUrl)) const [targetUrl, setTargetUrl] = useState(decode(encodedUrl))
@ -18,7 +20,9 @@ export default function ({ setTheme, theme, encodedUrl }) {
return ( return (
<main> <main>
<UrlPlayer url={targetUrl} /> <UrlPlayer {...{
url: targetUrl,
singleWindow}}/>
</main> </main>
) )
} }