import { useEffect, useState } from "react";
import { useDispatch, useSelector } from "react-redux";
import Header from "components/Header";
import Test from "components/Test";
import Result from "components/Result";
import Footer from "components/Footer";
import { State } from "store/reducer";
import { setTimerId } from "store/actions";
import { recordTest } from "helpers/recordTest";
import "stylesheets/themes.scss";
import CommandPallet from "components/CommandPallet";
export default function App() {
const {
time: { timerId, timer },
word: { currWord, typedWord, activeWordRef },
} = useSelector((state: State) => state);
const dispatch = useDispatch();
const [showPallet, setShowPallet] = useState(false);
useEffect(() => {
document.onkeydown = (e) => {
if (e.ctrlKey && e.key === "k") {
setShowPallet((s) => !s);
e.preventDefault();
} else if (
e.key.length === 1 ||
e.key === "Backspace" ||
e.key === "Tab"
) {
recordTest(e.key, e.ctrlKey);
e.preventDefault();
}
};
return () => {
document.onkeydown = null;
};
}, [dispatch]);
useEffect(() => {
let idx = typedWord.length - 1;
const currWordEl = activeWordRef?.current!;
if (currWordEl) {
currWordEl.children[idx + 1].classList.add(
currWord[idx] !== typedWord[idx] ? "wrong" : "right"
);
}
}, [currWord, typedWord, activeWordRef]);
useEffect(() => {
let idx = typedWord.length;
const currWordEl = activeWordRef?.current!;
if (currWordEl && idx < currWord.length)
currWordEl.children[idx + 1].classList.remove("wrong", "right");
}, [currWord.length, typedWord, activeWordRef]);
useEffect(() => {
if (!timer && timerId) {
clearInterval(timerId);
dispatch(setTimerId(null));
}
}, [dispatch, timer, timerId]);
return (
<>
{showPallet && }
{timer ? : }
>
);
}