diff --git a/client/src/App/App.jsx b/client/src/App/App.jsx index 4f074e5e9..8c7d9e42a 100644 --- a/client/src/App/App.jsx +++ b/client/src/App/App.jsx @@ -16,42 +16,28 @@ import TechPageContainer from "../pages/tech/tech.page.container"; import { setOnline } from "../redux/application/application.actions"; import { selectOnline } from "../redux/application/application.selectors"; import { checkUserSession } from "../redux/user/user.actions"; -import { - selectBodyshop, - selectCurrentUser, -} from "../redux/user/user.selectors"; +import { selectBodyshop, selectCurrentUser } from "../redux/user/user.selectors"; import PrivateRoute from "../utils/private-route"; import "./App.styles.scss"; -import handleBeta from "../utils/handleBeta"; -const ResetPassword = lazy(() => - import("../pages/reset-password/reset-password.component") -); +const ResetPassword = lazy(() => import("../pages/reset-password/reset-password.component")); const ManagePage = lazy(() => import("../pages/manage/manage.page.container")); const SignInPage = lazy(() => import("../pages/sign-in/sign-in.page")); const CsiPage = lazy(() => import("../pages/csi/csi.container.page")); -const MobilePaymentContainer = lazy(() => - import("../pages/mobile-payment/mobile-payment.container") -); +const MobilePaymentContainer = lazy(() => import("../pages/mobile-payment/mobile-payment.container")); const mapStateToProps = createStructuredSelector({ currentUser: selectCurrentUser, online: selectOnline, - bodyshop: selectBodyshop, + bodyshop: selectBodyshop }); const mapDispatchToProps = (dispatch) => ({ checkUserSession: () => dispatch(checkUserSession()), - setOnline: (isOnline) => dispatch(setOnline(isOnline)), + setOnline: (isOnline) => dispatch(setOnline(isOnline)) }); -export function App({ - bodyshop, - checkUserSession, - currentUser, - online, - setOnline, -}) { +export function App({ bodyshop, checkUserSession, currentUser, online, setOnline }) { const client = useClient(); useEffect(() => { @@ -108,8 +94,6 @@ export function App({ /> ); - handleBeta(); - return ( }> @@ -129,32 +113,16 @@ export function App({ - + - + - + - + diff --git a/client/src/components/header/header.component.jsx b/client/src/components/header/header.component.jsx index d22e37d89..3109aa45e 100644 --- a/client/src/components/header/header.component.jsx +++ b/client/src/components/header/header.component.jsx @@ -11,9 +11,8 @@ import Icon, { FileAddFilled, FileAddOutlined, FileFilled, - //GlobalOutlined, HomeFilled, - ImportOutlined, InfoCircleOutlined, + ImportOutlined, LineChartOutlined, PaperClipOutlined, PhoneOutlined, @@ -23,56 +22,39 @@ import Icon, { TeamOutlined, ToolFilled, UnorderedListOutlined, - UserOutlined, + UserOutlined } from "@ant-design/icons"; import { useTreatments } from "@splitsoftware/splitio-react"; -import {Layout, Menu, Switch, Tooltip} from "antd"; -import React, {useEffect, useState} from "react"; +import { Layout, Menu } from "antd"; +import React from "react"; import { useTranslation } from "react-i18next"; import { BsKanban } from "react-icons/bs"; -import { - FaCalendarAlt, - FaCarCrash, - FaCreditCard, - FaFileInvoiceDollar, -} from "react-icons/fa"; +import { FaCalendarAlt, FaCarCrash, FaCreditCard, FaFileInvoiceDollar } from "react-icons/fa"; import { GiPayMoney, GiPlayerTime, GiSettingsKnobs } from "react-icons/gi"; import { IoBusinessOutline } from "react-icons/io5"; import { RiSurveyLine } from "react-icons/ri"; import { connect } from "react-redux"; import { Link } from "react-router-dom"; import { createStructuredSelector } from "reselect"; -import { - selectRecentItems, - selectSelectedHeader, -} from "../../redux/application/application.selectors"; +import { selectRecentItems, selectSelectedHeader } from "../../redux/application/application.selectors"; import { setModalContext } from "../../redux/modals/modals.actions"; import { signOutStart } from "../../redux/user/user.actions"; -import { - selectBodyshop, - selectCurrentUser, -} from "../../redux/user/user.selectors"; -import {handleBeta, setBeta, checkBeta} from "../../utils/handleBeta"; +import { selectBodyshop, selectCurrentUser } from "../../redux/user/user.selectors"; const mapStateToProps = createStructuredSelector({ currentUser: selectCurrentUser, recentItems: selectRecentItems, selectedHeader: selectSelectedHeader, - bodyshop: selectBodyshop, + bodyshop: selectBodyshop }); const mapDispatchToProps = (dispatch) => ({ - setBillEnterContext: (context) => - dispatch(setModalContext({ context: context, modal: "billEnter" })), - setTimeTicketContext: (context) => - dispatch(setModalContext({ context: context, modal: "timeTicket" })), - setPaymentContext: (context) => - dispatch(setModalContext({ context: context, modal: "payment" })), - setReportCenterContext: (context) => - dispatch(setModalContext({ context: context, modal: "reportCenter" })), + setBillEnterContext: (context) => dispatch(setModalContext({ context: context, modal: "billEnter" })), + setTimeTicketContext: (context) => dispatch(setModalContext({ context: context, modal: "timeTicket" })), + setPaymentContext: (context) => dispatch(setModalContext({ context: context, modal: "payment" })), + setReportCenterContext: (context) => dispatch(setModalContext({ context: context, modal: "reportCenter" })), signOutStart: () => dispatch(signOutStart()), - setCardPaymentContext: (context) => - dispatch(setModalContext({ context: context, modal: "cardPayment" })), + setCardPaymentContext: (context) => dispatch(setModalContext({ context: context, modal: "cardPayment" })) }); function Header({ @@ -86,37 +68,26 @@ function Header({ setPaymentContext, setReportCenterContext, recentItems, - setCardPaymentContext, + setCardPaymentContext }) { - const { Simple_Inventory } = useTreatments( - ["Simple_Inventory"], - {}, - bodyshop && bodyshop.imexshopid - ); - const { DmsAp } = useTreatments( - ["DmsAp"], - {}, - bodyshop && bodyshop.imexshopid - ); - const { ImEXPay } = useTreatments( - ["ImEXPay"], - {}, - bodyshop && bodyshop.imexshopid - ); - const [betaSwitch, setBetaSwitch] = useState(false); + const { Simple_Inventory } = useTreatments(["Simple_Inventory"], {}, bodyshop && bodyshop.imexshopid); + const { DmsAp } = useTreatments(["DmsAp"], {}, bodyshop && bodyshop.imexshopid); + const { ImEXPay } = useTreatments(["ImEXPay"], {}, bodyshop && bodyshop.imexshopid); const { t } = useTranslation(); - useEffect(() => { - const isBeta = checkBeta(); - setBetaSwitch(isBeta); - }, []); + const deleteBetaCookie = () => { + const cookieExists = document.cookie.split("; ").some((row) => row.startsWith(`betaSwitchImex=`)); + if (cookieExists) { + const domain = window.location.hostname.split(".").slice(-2).join("."); + document.cookie = `betaSwitchImex=; expires=Thu, 01 Jan 1970 00:00:00 GMT; path=/; domain=.${domain}`; + console.log(`betaSwitchImex cookie deleted`); + } else { + console.log(`betaSwitchImex cookie does not exist`); + } + }; - const betaSwitchChange = (checked) => { - setBeta(checked); - setBetaSwitch(checked); - handleBeta(); - } + deleteBetaCookie(); return ( @@ -134,11 +105,7 @@ function Header({ }> {t("menus.header.schedule")} - } - title={t("menus.header.jobs")} - > + } title={t("menus.header.jobs")}> }> {t("menus.header.activejobs")} @@ -149,9 +116,7 @@ function Header({ {t("menus.header.parts-queue")} }> - - {t("menus.header.availablejobs")} - + {t("menus.header.availablejobs")} }> {t("menus.header.newjob")} @@ -162,25 +127,17 @@ function Header({ }> - - {t("menus.header.productionlist")} - + {t("menus.header.productionlist")} }> - - {t("menus.header.productionboard")} - + {t("menus.header.productionboard")} }> {t("menus.header.scoreboard")} - } - title={t("menus.header.customers")} - > + } title={t("menus.header.customers")}> }> {t("menus.header.owners")} @@ -188,36 +145,19 @@ function Header({ {t("menus.header.vehicles")} - } - title={t("menus.header.courtesycars")} - > + } title={t("menus.header.courtesycars")}> }> - - {t("menus.header.courtesycars-all")} - + {t("menus.header.courtesycars-all")} }> - - {t("menus.header.courtesycars-contracts")} - + {t("menus.header.courtesycars-contracts")} }> - - {t("menus.header.courtesycars-newcontract")} - + {t("menus.header.courtesycars-newcontract")} - } - title={t("menus.header.accounting")} - > - } - > + } title={t("menus.header.accounting")}> + }> {t("menus.header.bills")} { setBillEnterContext({ actions: {}, - context: {}, + context: {} }); }} > @@ -235,13 +175,8 @@ function Header({ {Simple_Inventory.treatment === "on" && ( <> - } - > - - {t("menus.header.inventory")} - + }> + {t("menus.header.inventory")} )} @@ -254,7 +189,7 @@ function Header({ onClick={() => { setPaymentContext({ actions: {}, - context: null, + context: null }); }} icon={} @@ -267,7 +202,7 @@ function Header({ onClick={() => { setCardPaymentContext({ actions: {}, - context: {}, + context: {} }); }} icon={} @@ -277,9 +212,7 @@ function Header({ )} }> - - {t("menus.header.timetickets")} - + {t("menus.header.timetickets")} {t("menus.header.entertimeticket")} - } - > + }> - - {t("menus.header.accounting-receivables")} - + {t("menus.header.accounting-receivables")} - {(!( - (bodyshop && bodyshop.cdk_dealerid) || - (bodyshop && bodyshop.pbs_serialnumber) - ) || + {(!((bodyshop && bodyshop.cdk_dealerid) || (bodyshop && bodyshop.pbs_serialnumber)) || DmsAp.treatment === "on") && ( - - {t("menus.header.accounting-payables")} - + {t("menus.header.accounting-payables")} )} - {!( - (bodyshop && bodyshop.cdk_dealerid) || - (bodyshop && bodyshop.pbs_serialnumber) - ) && ( + {!((bodyshop && bodyshop.cdk_dealerid) || (bodyshop && bodyshop.pbs_serialnumber)) && ( - - {t("menus.header.accounting-payments")} - + {t("menus.header.accounting-payments")} )} - - {t("menus.header.export-logs")} - + {t("menus.header.export-logs")} @@ -340,19 +255,11 @@ function Header({ {t("menus.header.phonebook")} }> - - {t("menus.header.temporarydocs")} - + {t("menus.header.temporarydocs")} - } - > + }> }> - - {t("menus.header.shop_config")} - + {t("menus.header.shop_config")} }> {t("menus.header.dashboard")} @@ -363,32 +270,20 @@ function Header({ onClick={() => { setReportCenterContext({ actions: {}, - context: {}, + context: {} }); }} > {t("menus.header.reportcenter")} - } - > - - {t("menus.header.shop_vendors")} - + }> + {t("menus.header.shop_vendors")} }> {t("menus.header.shop_csi")} - + signOutStart()}> {t("user.actions.signout")} @@ -444,17 +339,6 @@ function Header({ ))} - - - - Try the new ImEX Online - - - - ); diff --git a/client/src/firebase/firebase.utils.js b/client/src/firebase/firebase.utils.js index 9632ce148..d140c1d6b 100644 --- a/client/src/firebase/firebase.utils.js +++ b/client/src/firebase/firebase.utils.js @@ -5,7 +5,6 @@ import { getFirestore } from "firebase/firestore"; import { getMessaging, getToken, onMessage } from "firebase/messaging"; import { store } from "../redux/store"; import axios from "axios"; -import { checkBeta } from "../utils/handleBeta"; const config = JSON.parse(process.env.REACT_APP_FIREBASE_CONFIG); initializeApp(config); @@ -51,7 +50,7 @@ export { messaging }; export const requestForToken = () => { return getToken(messaging, { - vapidKey: process.env.REACT_APP_FIREBASE_PUBLIC_VAPID_KEY, + vapidKey: process.env.REACT_APP_FIREBASE_PUBLIC_VAPID_KEY }) .then((currentToken) => { if (currentToken) { @@ -59,9 +58,7 @@ export const requestForToken = () => { // Perform any other necessary action with the token } else { // Show permission request UI - console.log( - "No registration token available. Request permission to generate one." - ); + console.log("No registration token available. Request permission to generate one."); } }) .catch((err) => { @@ -80,24 +77,17 @@ export const onMessageListener = () => export const logImEXEvent = (eventName, additionalParams, stateProp = null) => { const state = stateProp || store.getState(); const eventParams = { - shop: - (state.user && state.user.bodyshop && state.user.bodyshop.shopname) || - null, - user: - (state.user && state.user.currentUser && state.user.currentUser.email) || - null, - ...additionalParams, + shop: (state.user && state.user.bodyshop && state.user.bodyshop.shopname) || null, + user: (state.user && state.user.currentUser && state.user.currentUser.email) || null, + ...additionalParams }; axios.post("/ioevent", { - useremail: - (state.user && state.user.currentUser && state.user.currentUser.email) || - null, - bodyshopid: - (state.user && state.user.bodyshop && state.user.bodyshop.id) || null, + useremail: (state.user && state.user.currentUser && state.user.currentUser.email) || null, + bodyshopid: (state.user && state.user.bodyshop && state.user.bodyshop.id) || null, operationName: eventName, variables: additionalParams, dbevent: false, - env: checkBeta() ? "beta" : "master", + env: "master" }); // console.log( diff --git a/client/src/utils/handleBeta.js b/client/src/utils/handleBeta.js deleted file mode 100644 index dcb0d18d1..000000000 --- a/client/src/utils/handleBeta.js +++ /dev/null @@ -1,47 +0,0 @@ -export const BETA_KEY = "betaSwitchImex"; - -export const checkBeta = () => { - const cookie = document.cookie.split("; ").find((row) => row.startsWith(BETA_KEY)); - return cookie ? cookie.split("=")[1] === "true" : false; -}; - -export const setBeta = (value) => { - const domain = window.location.hostname.split(".").slice(-2).join("."); - document.cookie = `${BETA_KEY}=${value}; path=/; domain=.${domain}`; -}; - -export const handleBeta = () => { - if (window.location.hostname.startsWith("localhost")) { - console.log("Not on beta or test, so no need to handle beta."); - return; - } - - const isBeta = checkBeta(); - const currentHostName = window.location.hostname; - - // Determine if the host name starts with "beta" or "www.beta" - const isBetaHost = currentHostName.startsWith("beta."); - const isBetaHostWithWWW = currentHostName.startsWith("www.beta."); - - if (isBeta) { - // If beta is on and we are not on a beta domain, redirect to the beta version - if (!isBetaHost && !isBetaHostWithWWW) { - const newHostName = currentHostName.startsWith("www.") - ? `www.beta.${currentHostName.replace(/^www\./, "")}` - : `beta.${currentHostName}`; - const href = `${window.location.protocol}//${newHostName}${window.location.pathname}${window.location.search}${window.location.hash}`; - window.location.replace(href); - } - // Otherwise, if beta is on and we're already on a beta domain, stay there - } else { - // If beta is off and we are on a beta domain, redirect to the non-beta version - if (isBetaHost || isBetaHostWithWWW) { - const newHostName = currentHostName.replace(/^www\.beta\./, "www.").replace(/^beta\./, ""); - const href = `${window.location.protocol}//${newHostName}${window.location.pathname}${window.location.search}${window.location.hash}`; - window.location.replace(href); - } - // Otherwise, if beta is off and we're not on a beta domain, stay there - } -}; - -export default handleBeta;