import { useEffect, useState } from "react"; import { useAtom } from "jotai"; import { VoiceAssistAtom, CurrentRollAtom, CurrentGRNAtom, TranscribeAtom, rollsAtom, grnsAtom, searchAtom } from "./Variables"; import { Routes, Route, useNavigate } from "react-router-dom"; import { CusNavbar } from "./Components/CusNavbar"; import RollCard from "./Components/RollCard"; import HomePage from "./Pages/HomePage"; import ErrorPage from "./Pages/ErrorPage"; import AddRollPage from "./Pages/AddRollPage"; import TranscribePage from "./Pages/TranscribePage"; import RollDetailPage from "./Pages/RollDetailPage"; import GRNCard from "./Components/GRNCard"; import GRNDetailPage from "./Pages/GRNDetailPage"; function App() { const [search, setSearch] = useAtom(searchAtom); const [rolls, setRolls] = useAtom(rollsAtom); const [grns, setGrns] = useAtom(grnsAtom); const [voiceAssist, setVoiceAssist] = useAtom(VoiceAssistAtom); const [currentRoll, setCurrentRoll] = useAtom(CurrentRollAtom); const [currentGRN, setCurrentGRN] = useAtom(CurrentGRNAtom); const [transcribe, setTranscribe] = useAtom(TranscribeAtom); const [sidebar, setSidebar] = useState(true); const navigate = useNavigate(); useEffect(() => { if (localStorage.getItem("currentGRN")) { setCurrentGRN(JSON.parse(localStorage.getItem("currentGRN"))); } fetch("/api/grns") .then((res) => res.json()) .then((data) => { setGrns(data["data"]); voiceAssist.on(["open *", "grn *", "open grn *"], true).then((i, wildcard) => { wildcard = wildcard.replace(/\s/g, "").replace(/-/g, ""); let found = false; for (let index = 0; index < data["data"].length; index++) { if (data["data"][index].GRN.toLowerCase() == wildcard.toLowerCase()) { setCurrentGRN(data["data"][index]); localStorage.setItem("currentGRN", JSON.stringify(data["data"][index])); setTranscribe((prev) => [...prev.slice(0, -1), { msg: "open GRN " + wildcard, isCommand: true }]); navigate("/grn"); found = true; } } if (!found) { voiceAssist.say("No GRN found with that Number"); } }); }) .catch((err) => console.error(err)); voiceAssist.emptyCommands(); voiceAssist.on(["search *"], true).then((i, wildcard) => { wildcard = wildcard.replace(/ /g, ""); setSearch(wildcard); setTranscribe((prev) => [...prev.slice(0, -1), { msg: "search " + wildcard, isCommand: true }]); }); voiceAssist.on(["transcribe"]).then((i) => { setTranscribe((prev) => [...prev.slice(0, -1), { msg: "transcribe", isCommand: true }]); navigate("/transcribe"); }); voiceAssist.on(["home", "go to home"]).then((i) => { setTranscribe((prev) => [...prev.slice(0, -1), { msg: "home", isCommand: true }]); navigate("/"); }); voiceAssist.on(["refresh"]).then((i) => { window.location.reload(); }); voiceAssist.fatality(); setTimeout(() => { voiceAssist .initialize({ lang: "en-US", continuous: true, soundex: true, debug: true, executionKeyword: "and do it now", listen: true, name: "", speed: 1.2, // mode:"quick" }) .then(() => { console.log("Artyom has been succesfully initialized"); }) .catch((err) => { console.error("Artyom couldn't be initialized: ", err); }); }, 250); voiceAssist.redirectRecognizedTextOutput((recognized, isFinal) => { if (isFinal && recognized != "") { setTranscribe((prev) => [...prev, { msg: recognized, isCommand: false }]); } }); }, []); return (
{transcribe.length > 0 && (
{transcribe.map((item, index) => { if (transcribe.length - index > 4) return null; return (

{item?.msg}

); })}
)}
{ setSidebar(!sidebar); }} className={"absolute top-0 w-10 h-10 p-2 z-50 border border-t-0 border-primary-950 hover:bg-primary-100 cursor-pointer transition-all " + (sidebar ? "border-l-0 right-0 -scale-x-100" : "border-l-0 -right-10")} viewBox="-0.2 0 1 1" xmlns="http://www.w3.org/2000/svg" >
{ setSearch(event.target.value); }} value={search} className="peer w-[calc(100%-2.5rem)] h-full bg-transparent text-blue-gray-700 font-sans font-normal outline outline-0 focus:outline-0 disabled:bg-blue-gray-50 disabled:border-0 disabled:cursor-not-allowed transition-all placeholder-shown:border placeholder-shown:border-blue-gray-200 placeholder-shown:border-t-blue-gray-200 border focus:border-2 border-t-transparent focus:border-t-transparent placeholder:opacity-0 focus:placeholder:opacity-100 text-sm px-3 py-2.5 rounded-[7px] !pr-9 border-blue-gray-200 focus:border-gray-900" placeholder=" " />
{grns.map((grn, index) => { if (search && !grn.supplierName.toLowerCase().includes(search.toLowerCase()) && !grn.buyer.toLowerCase().includes(search.toLowerCase()) && !grn.GRN.toLowerCase().includes(search.toLowerCase())) return null; return ; })}
} /> {/* } /> */} } /> } /> } /> } />
); } export default App;