nitro-v36-with-renderer-v36
/
src /
components /
wired /
views /
triggers /
WiredTriggerPressKeybindView.tsx
WiredTriggerPressKeybindView.tsx 2.8 Ko
Télécharger le fichier
import { FC, KeyboardEvent, useEffect, useState } from 'react';
import { localizeWithFallback, WiredFurniType } from '../../../../api';
import { Text } from '../../../../common';
import { useWired } from '../../../../hooks';
import { WiredTriggerBaseView } from './WiredTriggerBaseView';
import { Checkbox } from '../../../../common/Checkbox';
import { NativeTextTree } from '../../../../common/native-text/NativeTextTree';
export const WiredTriggerPressKeybindView: FC<{}> = () =>
{
const { trigger = null, setIntParams = null } = useWired();
const [ matchEnabled, setMatchEnabled ] = useState(false);
const [ keyCode, setKeyCode ] = useState(0);
const [ keyLabel, setKeyLabel ] = useState('');
useEffect(() =>
{
if(!trigger) return;
const value = ((trigger.intData?.length ?? 0) > 0) ? trigger.intData[0] : 0;
setMatchEnabled(value > 0);
setKeyCode(value);
setKeyLabel(value > 0 ? ('Key code ' + value) : '');
}, [ trigger ]);
const captureKey = (event: KeyboardEvent<HTMLInputElement>) =>
{
event.preventDefault();
setKeyCode(event.keyCode);
setKeyLabel(event.key === ' ' ? 'Space' : event.key);
};
// The server matches on this key code (0 = any key); the runtime keypress is sent to header 9311.
const save = () => setIntParams([ matchEnabled ? Math.max(0, keyCode) : 0 ]);
return (
<NativeTextTree>
<WiredTriggerBaseView hasSpecialInput={ true } requiresFurni={ WiredFurniType.STUFF_SELECTION_OPTION_NONE } save={ save }>
<div className="flex flex-col gap-1">
<Text bold>{localizeWithFallback('wiredfurni.params.presskeybind', 'Press keybind')}</Text>
<Text small>{localizeWithFallback('wiredfurni.params.presskeybind.info', 'Fires when a user presses a key in the room. Leave unchecked to match any key.')}</Text>
<div className="flex items-center gap-1">
<Checkbox checked={ matchEnabled } id="keybindMatchEnabled" onCheckedChange={(nextChecked) => setMatchEnabled(nextChecked)} />
<Text>{localizeWithFallback('wiredfurni.params.presskeybind.specific', 'Only a specific key')}</Text>
</div>
{ matchEnabled &&
<input
className="form-control form-control-sm"
type="text"
readOnly
placeholder={ localizeWithFallback('wiredfurni.params.presskeybind.placeholder', 'Click here, then press a key') }
value={ keyLabel }
onKeyDown={ captureKey } /> }
</div>
</WiredTriggerBaseView>
</NativeTextTree>
);
};
