mirror of
https://github.com/He4eT/elseifplayer.git
synced 2026-05-04 17:07:22 +00:00
Add InputBox component
This commit is contained in:
parent
95c8ae8780
commit
a100cbef4f
2 changed files with 61 additions and 8 deletions
|
|
@ -1,8 +1,63 @@
|
||||||
import { h } from 'preact'
|
import { h } from 'preact'
|
||||||
// import { useState, useEffect } from 'preact/hooks'
|
// import { useState, useEffect } from 'preact/hooks'
|
||||||
|
|
||||||
|
/* eslint-disable */
|
||||||
|
const keyCodes = {
|
||||||
|
KEY_BACKSPACE: 8,
|
||||||
|
KEY_TAB: 9,
|
||||||
|
KEY_RETURN: 13,
|
||||||
|
KEY_ESC: 27,
|
||||||
|
KEY_PAGEUP: 33,
|
||||||
|
KEY_PAGEDOWN: 34,
|
||||||
|
KEY_END: 35,
|
||||||
|
KEY_HOME: 36,
|
||||||
|
KEY_LEFT: 37,
|
||||||
|
KEY_UP: 38,
|
||||||
|
KEY_RIGHT: 39,
|
||||||
|
KEY_DOWN: 40}
|
||||||
|
|
||||||
|
const keyNames = {
|
||||||
|
[keyCodes.KEY_BACKSPACE]: 'delete',
|
||||||
|
[keyCodes.KEY_TAB]: 'tab',
|
||||||
|
[keyCodes.KEY_RETURN]: 'return',
|
||||||
|
[keyCodes.KEY_ESC]: 'escape',
|
||||||
|
[keyCodes.KEY_PAGEUP]: 'pageup',
|
||||||
|
[keyCodes.KEY_PAGEDOWN]: 'pagedown',
|
||||||
|
[keyCodes.KEY_END]: 'end',
|
||||||
|
[keyCodes.KEY_HOME]: 'home',
|
||||||
|
[keyCodes.KEY_LEFT]: 'left',
|
||||||
|
[keyCodes.KEY_UP]: 'up',
|
||||||
|
[keyCodes.KEY_RIGHT]: 'right',
|
||||||
|
[keyCodes.KEY_DOWN]: 'down'}
|
||||||
|
/* eslint-enable */
|
||||||
|
|
||||||
export default function ({ currentWindow, inputType, sendMessage }) {
|
export default function ({ currentWindow, inputType, sendMessage }) {
|
||||||
|
const charHandler = event => {
|
||||||
|
event.preventDefault()
|
||||||
|
|
||||||
|
const key =
|
||||||
|
keyNames[event.keyCode] ||
|
||||||
|
event.key
|
||||||
|
|
||||||
|
sendMessage(key, currentWindow)
|
||||||
|
}
|
||||||
|
|
||||||
|
const lineHandler = ({ keyCode, target: { value } }) => {
|
||||||
|
if (keyCode === keyCodes.KEY_RETURN) {
|
||||||
|
sendMessage(value, currentWindow)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const inputHandlers = {
|
||||||
|
'char': {
|
||||||
|
onKeyDown: charHandler
|
||||||
|
},
|
||||||
|
'line': {
|
||||||
|
onKeyPress: lineHandler
|
||||||
|
}
|
||||||
|
}
|
||||||
return (
|
return (
|
||||||
<div>InputBox</div>
|
<input {...inputHandlers[inputType]}
|
||||||
|
type="text"/>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -58,8 +58,6 @@ export default function ({ vmParts: { file, engine } }) {
|
||||||
const [inputType, setInputType] = useState(null)
|
const [inputType, setInputType] = useState(null)
|
||||||
const [inbox, setInbox] = useState([])
|
const [inbox, setInbox] = useState([])
|
||||||
|
|
||||||
const [messages, setMessages] = useState([])
|
|
||||||
|
|
||||||
const [vm, setVm] = useState(null)
|
const [vm, setVm] = useState(null)
|
||||||
const [sendMessage, setSendMessage] = useState(null)
|
const [sendMessage, setSendMessage] = useState(null)
|
||||||
|
|
||||||
|
|
@ -86,10 +84,6 @@ export default function ({ vmParts: { file, engine } }) {
|
||||||
: null)
|
: null)
|
||||||
}, [vm])
|
}, [vm])
|
||||||
|
|
||||||
useEffect(() => {
|
|
||||||
window.send = x => sendMessage(x, currentWindow)
|
|
||||||
}, [sendMessage, currentWindow])
|
|
||||||
|
|
||||||
return status.stage !== 'ready'
|
return status.stage !== 'ready'
|
||||||
? (<div>{status.details}</div>)
|
? (<div>{status.details}</div>)
|
||||||
: (<section>
|
: (<section>
|
||||||
|
|
@ -97,6 +91,10 @@ export default function ({ vmParts: { file, engine } }) {
|
||||||
inbox,
|
inbox,
|
||||||
currentWindow
|
currentWindow
|
||||||
}}/>
|
}}/>
|
||||||
<InputBox/>
|
<InputBox {...{
|
||||||
|
currentWindow,
|
||||||
|
inputType,
|
||||||
|
sendMessage
|
||||||
|
}}/>
|
||||||
</section>)
|
</section>)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue