CE-1123 store values in localStorage from backend from manageSession call; add googleAnalytics utils & function to recordAnalytics

This commit is contained in:
2024-04-15 12:53:43 -05:00
parent 731eab7136
commit 68d3119c6a
2 changed files with 45 additions and 8 deletions

View File

@ -33,12 +33,8 @@ import CssBaseline from "@mui/material/CssBaseline";
import Icon from "@mui/material/Icon"; import Icon from "@mui/material/Icon";
import {ThemeProvider} from "@mui/material/styles"; import {ThemeProvider} from "@mui/material/styles";
import {LicenseInfo} from "@mui/x-license-pro"; import {LicenseInfo} from "@mui/x-license-pro";
import jwt_decode from "jwt-decode";
import React, {JSXElementConstructor, Key, ReactElement, useEffect, useState,} from "react";
import {useCookies} from "react-cookie";
import {Navigate, Route, Routes, useLocation, useSearchParams,} from "react-router-dom";
import {Md5} from "ts-md5/dist/md5";
import CommandMenu from "CommandMenu"; import CommandMenu from "CommandMenu";
import jwt_decode from "jwt-decode";
import QContext from "QContext"; import QContext from "QContext";
import Sidenav from "qqq/components/horseshoe/sidenav/SideNav"; import Sidenav from "qqq/components/horseshoe/sidenav/SideNav";
import theme from "qqq/components/legacy/Theme"; import theme from "qqq/components/legacy/Theme";
@ -53,8 +49,13 @@ import EntityEdit from "qqq/pages/records/edit/RecordEdit";
import RecordQuery from "qqq/pages/records/query/RecordQuery"; import RecordQuery from "qqq/pages/records/query/RecordQuery";
import RecordDeveloperView from "qqq/pages/records/view/RecordDeveloperView"; import RecordDeveloperView from "qqq/pages/records/view/RecordDeveloperView";
import RecordView from "qqq/pages/records/view/RecordView"; import RecordView from "qqq/pages/records/view/RecordView";
import GoogleAnalyticsUtils from "qqq/utils/GoogleAnalyticsUtils";
import Client from "qqq/utils/qqq/Client"; import Client from "qqq/utils/qqq/Client";
import ProcessUtils from "qqq/utils/qqq/ProcessUtils"; import ProcessUtils from "qqq/utils/qqq/ProcessUtils";
import React, {JSXElementConstructor, Key, ReactElement, useEffect, useState,} from "react";
import {useCookies} from "react-cookie";
import {Navigate, Route, Routes, useLocation, useSearchParams,} from "react-router-dom";
import {Md5} from "ts-md5/dist/md5";
const qController = Client.getInstance(); const qController = Client.getInstance();
@ -160,7 +161,7 @@ export default function App()
if (shouldStoreNewToken(accessToken, lsAccessToken)) if (shouldStoreNewToken(accessToken, lsAccessToken))
{ {
console.log("Sending accessToken to backend, requesting a sessionUUID..."); console.log("Sending accessToken to backend, requesting a sessionUUID...");
const newSessionUuid = await qController.manageSession(accessToken, null); const {uuid: newSessionUuid, values} = await qController.manageSession(accessToken, null);
///////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////
// the request to the backend should send a header to set the cookie, so we don't need to do it ourselves. // // the request to the backend should send a header to set the cookie, so we don't need to do it ourselves. //
@ -168,6 +169,7 @@ export default function App()
// setCookie(SESSION_UUID_COOKIE_NAME, newSessionUuid, {path: "/"}); // setCookie(SESSION_UUID_COOKIE_NAME, newSessionUuid, {path: "/"});
localStorage.setItem("accessToken", accessToken); localStorage.setItem("accessToken", accessToken);
localStorage.setItem("sessionValues", JSON.stringify(values));
console.log("Got new sessionUUID from backend, and stored new accessToken"); console.log("Got new sessionUUID from backend, and stored new accessToken");
} }
else else
@ -575,7 +577,7 @@ export default function App()
console.error(e); console.error(e);
if (e instanceof QException) if (e instanceof QException)
{ {
if ((e as QException).status === "401") if ((e as QException).status === 401)
{ {
console.log("Exception is a QException with status = 401. Clearing some of localStorage & cookies"); console.log("Exception is a QException with status = 401. Clearing some of localStorage & cookies");
qController.clearAuthenticationMetaDataLocalStorage(); qController.clearAuthenticationMetaDataLocalStorage();
@ -654,7 +656,7 @@ export default function App()
}, },
); );
const [pageHeader, setPageHeader] = useState("" as string | JSX.Element); const [pageHeader, setPageHeaderState] = useState("" as string | JSX.Element);
const [accentColor, setAccentColor] = useState("#0062FF"); const [accentColor, setAccentColor] = useState("#0062FF");
const [accentColorLight, setAccentColorLight] = useState("#C0D6F7") const [accentColorLight, setAccentColorLight] = useState("#C0D6F7")
const [tableMetaData, setTableMetaData] = useState(null); const [tableMetaData, setTableMetaData] = useState(null);
@ -663,6 +665,35 @@ export default function App()
const [keyboardHelpOpen, setKeyboardHelpOpen] = useState(false); const [keyboardHelpOpen, setKeyboardHelpOpen] = useState(false);
const [helpHelpActive] = useState(queryParams.has("helpHelp")); const [helpHelpActive] = useState(queryParams.has("helpHelp"));
const [googleAnalyticsUtils] = useState(new GoogleAnalyticsUtils());
/*******************************************************************************
**
*******************************************************************************/
function setPageHeader(header: string | JSX.Element)
{
setPageHeaderState(header);
if(typeof header == "string")
{
recordAnalytics(header)
}
else
{
recordAnalytics("Title not available")
}
}
/*******************************************************************************
**
*******************************************************************************/
function recordAnalytics(title: string)
{
googleAnalyticsUtils.recordAnalytics(location, title)
}
return ( return (
appRoutes && ( appRoutes && (
@ -682,6 +713,7 @@ export default function App()
setTableProcesses: (tableProcesses: QProcessMetaData[]) => setTableProcesses(tableProcesses), setTableProcesses: (tableProcesses: QProcessMetaData[]) => setTableProcesses(tableProcesses),
setDotMenuOpen: (dotMenuOpent: boolean) => setDotMenuOpen(dotMenuOpent), setDotMenuOpen: (dotMenuOpent: boolean) => setDotMenuOpen(dotMenuOpent),
setKeyboardHelpOpen: (keyboardHelpOpen: boolean) => setKeyboardHelpOpen(keyboardHelpOpen), setKeyboardHelpOpen: (keyboardHelpOpen: boolean) => setKeyboardHelpOpen(keyboardHelpOpen),
recordAnalytics: recordAnalytics,
pathToLabelMap: pathToLabelMap, pathToLabelMap: pathToLabelMap,
branding: branding branding: branding
}}> }}>

View File

@ -47,6 +47,11 @@ interface QContext
tableProcesses?: QProcessMetaData[]; tableProcesses?: QProcessMetaData[];
setTableProcesses?: (tableProcesses: QProcessMetaData[]) => void; setTableProcesses?: (tableProcesses: QProcessMetaData[]) => void;
///////////////////////////////////////////
// function to record an analytics event //
///////////////////////////////////////////
recordAnalytics?: (title: string) => void;
/////////////////////////////////// ///////////////////////////////////
// constants - no setters needed // // constants - no setters needed //
/////////////////////////////////// ///////////////////////////////////