Skip to content

Instantly share code, notes, and snippets.

@yuripramos
Created July 11, 2020 12:15
Show Gist options
  • Save yuripramos/ef610fe788272f24aa7fe4e1cdd7958b to your computer and use it in GitHub Desktop.
Save yuripramos/ef610fe788272f24aa7fe4e1cdd7958b to your computer and use it in GitHub Desktop.
const state = useContext(MessagesContext);
const [textValue, setTextValue] = useState("");
const [isEmojiEnabled, setIsEmojiEnabled] = useState(false);
const toggleEmoji = () => setIsEmojiEnabled(!isEmojiEnabled);
const myStateRef = useRef(textValue);
const setMyState = (data: any) => {
myStateRef.current = data;
setTextValue(data);
};
const addEmoji = (e: any) => {
let emoji = e.native;
let text = myStateRef.current + emoji;
setMyState(text);
};
// Persisting values with refs because listeners didn't update the last value of useState hook
useEffect(() => {
if (state.sendingMethod === "keypress") {
let keysPressed: any = {};
const listener = (event: KeyboardEvent) => {
keysPressed[event.key] = true;
if (keysPressed["Control"] && keysPressed["Enter"]) {
state.sendChatAction({
from: state.username,
msg: myStateRef.current,
time: Date.now()
});
setMyState("");
}
};
document.addEventListener("keydown", listener);
document.addEventListener("keyup", event => {
delete keysPressed[event.key];
});
return () => {
document.removeEventListener("keydown", listener);
};
}
}, []);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment