import React, { useState, useEffect } from "react"; import "./App.css"; import "./components/Loading.css"; import { BrowserRouter as Router, Route, Routes, useNavigate, useLocation, } from "react-router-dom"; import socket from "./services/socketService"; import Dashboard from "./pages/Dashboard"; import LoginPage from "./pages/LoginPage"; import CafePage from "./pages/CafePage"; import SearchResult from "./pages/SearchResult"; import Cart from "./pages/Cart"; import Invoice from "./pages/Invoice"; import Footer from "./components/Footer"; import GuestSideLogin from "./pages/GuestSideLogin"; import GuestSide from "./pages/GuestSide"; import { getItemTypesWithItems } from "./helpers/itemHelper.js"; import { getConnectedGuestSides, getClerks, removeConnectedGuestSides, } from "./helpers/userHelpers.js"; import { getLocalStorage, removeLocalStorage, } from "./helpers/localStorageHelpers"; import { calculateTotals } from "./helpers/cartHelpers"; import Modal from "./components/Modal"; // Import your modal component function App() { const location = useLocation(); const navigate = useNavigate(); const [user, setUser] = useState([]); const [shopClerks, setShopClerks] = useState([]); const [guestSideOfClerk, setGuestSideOfClerk] = useState(null); const [guestSides, setGuestSides] = useState([]); const [shopId, setShopId] = useState(""); const [tableId, setTableId] = useState(""); const [totalItemsCount, setTotalItemsCount] = useState(0); const [deviceType, setDeviceType] = useState(""); const [shop, setShop] = useState([]); const [shopItems, setShopItems] = useState([]); const [isModalOpen, setIsModalOpen] = useState(false); const [modalContent, setModalContent] = useState(null); useEffect(() => { const calculateTotalsFromLocalStorage = () => { const { totalCount } = calculateTotals(shopId); setTotalItemsCount(totalCount); }; calculateTotalsFromLocalStorage(); const handleStorageChange = () => { calculateTotalsFromLocalStorage(); }; window.addEventListener("localStorageUpdated", handleStorageChange); return () => { window.removeEventListener("localStorageUpdated", handleStorageChange); }; }, [shopId]); const handleSetParam = ({ shopId, tableId }) => { console.log(shopId, tableId); setShopId(shopId); setTableId(tableId); }; useEffect(() => { async function fetchData() { console.log("gettingItems"); try { const { response, cafe, data } = await getItemTypesWithItems(shopId); if (response.status === 200) { setShop(cafe); setShopItems(data); socket.on("transaction_created", () => { console.log("transaction created"); }); } } catch (error) { console.error("Error fetching shop items:", error); } } if (shopId !== "") fetchData(); }, [shopId]); const rmConnectedGuestSides = async (gueseSideSessionId) => { const sessionLeft = await removeConnectedGuestSides(gueseSideSessionId); setGuestSides(sessionLeft.guestSideList); }; useEffect(() => { if (socket == null) return; if (getLocalStorage("authGuestSide")) { socket.emit("checkGuestSideToken", { token: getLocalStorage("authGuestSide"), }); } else { socket.emit("checkUserToken", { token: getLocalStorage("auth"), shopId, }); } socket.on("transaction_created", async (data) => { console.log("transaction notification"); setModal("new_transaction"); }); socket.on("checkUserTokenRes", async (data) => { if (data.status !== 200) { removeLocalStorage("auth"); setDeviceType("guestDevice"); } else { setUser(data.data.user); if (data.data.user.password == "unsetunsetunset") setModal("complete_account"); if (data.data.user.cafeId == shopId) { const connectedGuestSides = await getConnectedGuestSides(); setGuestSides(connectedGuestSides.sessionDatas); console.log("getting guest side"); setDeviceType("clerk"); } else { setDeviceType("guestDevice"); } if (data.data.user.roleId == 1) { // shopClerks is can only be obtained by the shop owner // so every user that is admin will try to getting shopClerks, even not yet proven that this is their shop const shopClerks = await getClerks(shopId); setShopClerks(shopClerks); } } }); socket.on("checkGuestSideTokenRes", (data) => { if (data.status !== 200) { removeLocalStorage("authGuestSide"); navigate("/guest-side"); } else { setGuestSideOfClerk({ clerkId: data.sessionData.clerkId, clerkUsername: data.sessionData.clerkUsername, }); setDeviceType("guestSide"); } }); socket.on("signout-guest-session", () => { navigate("/guest-side"); }); return () => { socket.off("signout-guest-session"); }; }, [socket, shopId]); const handleModalFromURL = () => { const queryParams = new URLSearchParams(location.search); const modal = queryParams.get("modal"); if (modal) setModal(modal); }; useEffect(() => { handleModalFromURL(); }, [shopId]); useEffect(() => { console.log(shopId + tableId); }, [navigate]); // Function to open the modal const setModal = (content) => { setIsModalOpen(true); setModalContent(content); document.body.style.overflow = "hidden"; navigate(`?modal=` + content, { replace: true }); }; // Function to close the modal const closeModal = () => { setIsModalOpen(false); document.body.style.overflow = "auto"; const queryParams = new URLSearchParams(location.search); // Remove the 'modal' parameter queryParams.delete("modal"); // Update the URL without the 'modal' parameter navigate({ search: queryParams.toString() }, { replace: true }); }; return (
} /> } />
} />
} />
} />
} /> } /> } />
{modalContent}
); } const AppWrapper = () => ( ); export default AppWrapper;