From 5f7fa10f149f5f4b1ee93f29f46cf3e22acc7bd7 Mon Sep 17 00:00:00 2001 From: Amy Chen Date: Mon, 30 Dec 2024 11:12:13 -0800 Subject: [PATCH 1/5] frontend logo, piwik updates --- .../public/images/logos/apps/logo_dark.png | Bin 0 -> 16149 bytes .../public/images/logos/apps/logo_light.png | Bin 0 -> 22003 bytes src/ui-client/src/containers/App.tsx | 6 ++ .../containers/Attestation/Attestation.tsx | 4 +- .../src/containers/Header/Header.tsx | 4 +- src/ui-client/src/styles/custom.css | 12 +++ src/ui-client/src/utils/envConfig.ts | 91 ++++++++++++++++++ src/ui-client/src/utils/piwik.ts | 76 +++++++++++++++ 8 files changed, 189 insertions(+), 4 deletions(-) create mode 100644 src/ui-client/public/images/logos/apps/logo_dark.png create mode 100644 src/ui-client/public/images/logos/apps/logo_light.png create mode 100644 src/ui-client/src/utils/envConfig.ts create mode 100644 src/ui-client/src/utils/piwik.ts diff --git a/src/ui-client/public/images/logos/apps/logo_dark.png b/src/ui-client/public/images/logos/apps/logo_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..b25c00ef2c72bf9d1fabc2b02606162b23376d06 GIT binary patch literal 16149 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

b^BfXj>6?v<1;#si_`s@Qw2uCCw~le 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 yOfxP59s>5uMc!{=VPRomVPRomVPRoWm-v4-%5 { this.handleSessionTokenRefresh(); dispatch(getIdToken()); dispatch(refreshServerStateLoop()); + fetchEnvData(); + getEnvs(); + console.log("env ", process.env) + addMatomoTracking(); } public componentDidUpdate() { diff --git a/src/ui-client/src/containers/Attestation/Attestation.tsx b/src/ui-client/src/containers/Attestation/Attestation.tsx index 9489b9229..0ea71fdfe 100644 --- a/src/ui-client/src/containers/Attestation/Attestation.tsx +++ b/src/ui-client/src/containers/Attestation/Attestation.tsx @@ -149,9 +149,9 @@ class Attestation extends React.PureComponent { {/* Top logo row (Leaf, ITHS, CD2H) */}

- leaf-logo + leaf-logo
- leaf + {/* leaf */} v{pkg.version}
diff --git a/src/ui-client/src/containers/Header/Header.tsx b/src/ui-client/src/containers/Header/Header.tsx index facb1f006..a339efa97 100644 --- a/src/ui-client/src/containers/Header/Header.tsx +++ b/src/ui-client/src/containers/Header/Header.tsx @@ -56,8 +56,8 @@ class Header extends React.PureComponent {
- leaf-logo -
leaf
+ leaf-logo + {/*
leaf
*/}
diff --git a/src/ui-client/src/styles/custom.css b/src/ui-client/src/styles/custom.css index a1aad51c2..ac7943fb7 100644 --- a/src/ui-client/src/styles/custom.css +++ b/src/ui-client/src/styles/custom.css @@ -3,6 +3,9 @@ margin-left: 8px; font-size: 1.8rem; } +#header-container .header-role:has(.header-role-icon-phi) { + display: none; +} .header-content-side .header-title { /* Example @@ -125,8 +128,17 @@ button.concept-search-roots-dropdown-toggle.dropdown-toggle.btn.btn-secondary:ho } /* Attestation modal */ +.attestation-leaf-logo { + border-radius: 0; +} .attestation-modal-wrap .attestation-title { margin-left: 4px; font-size: 2rem; } + +/* Visualize */ +.visualization-no-data-container { + color: #777; + margin-top: 24px; +} \ No newline at end of file diff --git a/src/ui-client/src/utils/envConfig.ts b/src/ui-client/src/utils/envConfig.ts new file mode 100644 index 000000000..dcfd62787 --- /dev/null +++ b/src/ui-client/src/utils/envConfig.ts @@ -0,0 +1,91 @@ +export function fetchEnvData() { + if (window["appConfig"] && Object.keys(window["appConfig"]).length) { + console.log("Window config variables added. "); + return window["appConfig"]; + } + let xhr = new XMLHttpRequest(); + const setConfig = function () { + if (!xhr.readyState === xhr.DONE) { + return; + } + if (xhr.status !== 200) { + console.log("Request failed! "); + return; + } + let envObj = null; + try { + envObj = JSON.parse(xhr.responseText); + } catch (e) { + console.log("Parsing error ", e); + } + window["appConfig"] = {}; + //assign window process env variables for access by app + //won't be overridden when Node initializing env variables + if (envObj) { + for (var key in envObj) { + if (!window["appConfig"][key]) { + window["appConfig"][key] = envObj[key]; + } + } + } + }; + xhr.open("GET", "/env.json", false); + xhr.onreadystatechange = function () { + //in the event of a communication error (such as the server going down), + //or error happens when parsing data + //an exception will be thrown in the onreadystatechange method when accessing the response properties, e.g. status. + try { + setConfig(); + } catch (e) { + console.log("Caught exception " + e); + } + }; + try { + if (xhr) { + xhr.send(); + } + } catch (e) { + console.log("Request failed to send. Error: ", e); + } + xhr.ontimeout = function (e) { + // XMLHttpRequest timed out. + console.log("request to fetch env.json file timed out ", e); + }; + xhr.onerror = (e) => { + console.log(e); + }; + return xhr; +} + +export function getEnv(key) { + //window application global variables + if (window["appConfig"] && window["appConfig"][key]) + return window["appConfig"][key]; + const envDefined = typeof process !== "undefined" && process.env; + //enviroment variables as defined by Node + if (envDefined && process.env[key]) return process.env[key]; + return ""; +} + +export function getEnvs() { + let arrEnvs = []; + const blacklist = ["SECRET", "KEY", "TOKEN", "CREDENTIALS"]; + if (window["appConfig"]) { + const keys = Object.keys(window["appConfig"]); + keys.forEach((key) => { + if (blacklist.indexOf(key.toUpperCase()) !== -1) return true; + arrEnvs.push({ key: key, value: window["appConfig"][key] }); + }); + } + const envDefined = typeof process !== "undefined" && process.env; + if (envDefined) { + const envKeys = Object.keys(process.env); + envKeys.forEach((key) => { + if (blacklist.indexOf(key.toUpperCase()) !== -1) return true; + arrEnvs.push({ key: key, value: process.env[key] }); + }); + } + + console.log("Environment variables ", arrEnvs); + return arrEnvs; +} diff --git a/src/ui-client/src/utils/piwik.ts b/src/ui-client/src/utils/piwik.ts new file mode 100644 index 000000000..2fc7eaba5 --- /dev/null +++ b/src/ui-client/src/utils/piwik.ts @@ -0,0 +1,76 @@ +import { getEnv } from "./envConfig"; + +/* + * decode Jwt token + */ +export function parseJwt(token) { + var base64Url = token.split(".")[1]; + var base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); + var jsonPayload = decodeURIComponent( + atob(base64) + .split("") + .map(function (c) { + return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2); + }) + .join("") + ); + return JSON.parse(jsonPayload); +} +/* + * get access token information stored in sessionStorage + */ +export function getTokenInfoFromStorage() { + if (typeof window.sessionStorage === "undefined") return null; + let token; + var keys = Object.keys(window.sessionStorage); + keys.forEach(function (key) { + var obj; + try { + obj = JSON.parse(window.sessionStorage.getItem(key)); + } catch (e) { + obj = null; + } + if (obj && obj["tokenResponse"] && obj["tokenResponse"]["access_token"]) { + token = parseJwt(obj["tokenResponse"]["access_token"]); + } + }); + return token; +} +export function getMatomoTrackingSiteId() { + return getEnv(`REACT_APP_MATOMO_SITE_ID`); +} +export function getUserIdFromAccessToken() { + const accessToken = getTokenInfoFromStorage(); + if (!accessToken) return null; + if (accessToken.profile) return accessToken.profile; + if (accessToken.fhirUser) return accessToken.fhirUser; + return accessToken["preferred_username"]; +} +export function addMatomoTracking() { + // already generated script, return + if (document.querySelector("#matomoScript")) return; + const userId = getUserIdFromAccessToken(); + // no user Id return + if (!userId) return; + const siteId = getMatomoTrackingSiteId(); + // no site Id return + if (!siteId) return; + // init global piwik tracking object + window._paq = []; + window._paq.push(["trackPageView"]); + window._paq.push(["enableLinkTracking"]); + window._paq.push(["setSiteId", siteId]); + window._paq.push(["setUserId", userId]); + + let u = "https://piwik.cirg.washington.edu/"; + window._paq.push(["setTrackerUrl", u + "matomo.php"]); + let d = document, + g = d.createElement("script"), + headElement = document.querySelector("head"); + g.type = "text/javascript"; + g.async = true; + g.defer = true; + g.setAttribute("src", u + "matomo.js"); + g.setAttribute("id", "matomoScript"); + headElement.appendChild(g); +} From 07ad19ad9af980234c0d97f9cd7f11baabe0db3b Mon Sep 17 00:00:00 2001 From: Amy Chen Date: Mon, 30 Dec 2024 11:14:55 -0800 Subject: [PATCH 2/5] remove debug statement --- src/ui-client/src/containers/App.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ui-client/src/containers/App.tsx b/src/ui-client/src/containers/App.tsx index e2a76930c..013dc78c6 100644 --- a/src/ui-client/src/containers/App.tsx +++ b/src/ui-client/src/containers/App.tsx @@ -78,7 +78,6 @@ class App extends React.Component { dispatch(refreshServerStateLoop()); fetchEnvData(); getEnvs(); - console.log("env ", process.env) addMatomoTracking(); } From c29e581a62cc9ea27273f72321e666e5e79bd6f9 Mon Sep 17 00:00:00 2001 From: Amy Chen Date: Mon, 30 Dec 2024 13:39:12 -0800 Subject: [PATCH 3/5] remove piwik changes --- src/ui-client/src/containers/App.tsx | 7 +-- src/ui-client/src/utils/envConfig.ts | 91 ---------------------------- src/ui-client/src/utils/piwik.ts | 76 ----------------------- 3 files changed, 1 insertion(+), 173 deletions(-) delete mode 100644 src/ui-client/src/utils/envConfig.ts delete mode 100644 src/ui-client/src/utils/piwik.ts diff --git a/src/ui-client/src/containers/App.tsx b/src/ui-client/src/containers/App.tsx index 013dc78c6..88a9525f3 100644 --- a/src/ui-client/src/containers/App.tsx +++ b/src/ui-client/src/containers/App.tsx @@ -33,8 +33,6 @@ import DataImportContainer from '../containers/DataImport/DataImport'; import UserQuestionModal from './UserQuestionModal/UserQuestionModal'; import { SavedQueryMap } from '../models/Query'; import { sleep } from '../utils/Sleep'; -import { fetchEnvData, getEnvs } from '../utils/envConfig'; -import { addMatomoTracking } from "../utils/piwik"; import NotificationModal from '../components/Modals/NotificationModal/NotificationModal'; import MaintainenceModal from '../components/Modals/MaintainenceModal/MaintainenceModal'; import './App.css'; @@ -71,14 +69,11 @@ class App extends React.Component { private lastHeartbeat = new Date(); public componentDidMount() { - const { dispatch } = this.props; + const { dispatch, auth } = this.props; this.handleBrowserHeartbeat(); this.handleSessionTokenRefresh(); dispatch(getIdToken()); dispatch(refreshServerStateLoop()); - fetchEnvData(); - getEnvs(); - addMatomoTracking(); } public componentDidUpdate() { diff --git a/src/ui-client/src/utils/envConfig.ts b/src/ui-client/src/utils/envConfig.ts deleted file mode 100644 index dcfd62787..000000000 --- a/src/ui-client/src/utils/envConfig.ts +++ /dev/null @@ -1,91 +0,0 @@ -export function fetchEnvData() { - if (window["appConfig"] && Object.keys(window["appConfig"]).length) { - console.log("Window config variables added. "); - return window["appConfig"]; - } - let xhr = new XMLHttpRequest(); - const setConfig = function () { - if (!xhr.readyState === xhr.DONE) { - return; - } - if (xhr.status !== 200) { - console.log("Request failed! "); - return; - } - let envObj = null; - try { - envObj = JSON.parse(xhr.responseText); - } catch (e) { - console.log("Parsing error ", e); - } - window["appConfig"] = {}; - //assign window process env variables for access by app - //won't be overridden when Node initializing env variables - if (envObj) { - for (var key in envObj) { - if (!window["appConfig"][key]) { - window["appConfig"][key] = envObj[key]; - } - } - } - }; - xhr.open("GET", "/env.json", false); - xhr.onreadystatechange = function () { - //in the event of a communication error (such as the server going down), - //or error happens when parsing data - //an exception will be thrown in the onreadystatechange method when accessing the response properties, e.g. status. - try { - setConfig(); - } catch (e) { - console.log("Caught exception " + e); - } - }; - try { - if (xhr) { - xhr.send(); - } - } catch (e) { - console.log("Request failed to send. Error: ", e); - } - xhr.ontimeout = function (e) { - // XMLHttpRequest timed out. - console.log("request to fetch env.json file timed out ", e); - }; - xhr.onerror = (e) => { - console.log(e); - }; - return xhr; -} - -export function getEnv(key) { - //window application global variables - if (window["appConfig"] && window["appConfig"][key]) - return window["appConfig"][key]; - const envDefined = typeof process !== "undefined" && process.env; - //enviroment variables as defined by Node - if (envDefined && process.env[key]) return process.env[key]; - return ""; -} - -export function getEnvs() { - let arrEnvs = []; - const blacklist = ["SECRET", "KEY", "TOKEN", "CREDENTIALS"]; - if (window["appConfig"]) { - const keys = Object.keys(window["appConfig"]); - keys.forEach((key) => { - if (blacklist.indexOf(key.toUpperCase()) !== -1) return true; - arrEnvs.push({ key: key, value: window["appConfig"][key] }); - }); - } - const envDefined = typeof process !== "undefined" && process.env; - if (envDefined) { - const envKeys = Object.keys(process.env); - envKeys.forEach((key) => { - if (blacklist.indexOf(key.toUpperCase()) !== -1) return true; - arrEnvs.push({ key: key, value: process.env[key] }); - }); - } - - console.log("Environment variables ", arrEnvs); - return arrEnvs; -} diff --git a/src/ui-client/src/utils/piwik.ts b/src/ui-client/src/utils/piwik.ts deleted file mode 100644 index 2fc7eaba5..000000000 --- a/src/ui-client/src/utils/piwik.ts +++ /dev/null @@ -1,76 +0,0 @@ -import { getEnv } from "./envConfig"; - -/* - * decode Jwt token - */ -export function parseJwt(token) { - var base64Url = token.split(".")[1]; - var base64 = base64Url.replace(/-/g, "+").replace(/_/g, "/"); - var jsonPayload = decodeURIComponent( - atob(base64) - .split("") - .map(function (c) { - return "%" + ("00" + c.charCodeAt(0).toString(16)).slice(-2); - }) - .join("") - ); - return JSON.parse(jsonPayload); -} -/* - * get access token information stored in sessionStorage - */ -export function getTokenInfoFromStorage() { - if (typeof window.sessionStorage === "undefined") return null; - let token; - var keys = Object.keys(window.sessionStorage); - keys.forEach(function (key) { - var obj; - try { - obj = JSON.parse(window.sessionStorage.getItem(key)); - } catch (e) { - obj = null; - } - if (obj && obj["tokenResponse"] && obj["tokenResponse"]["access_token"]) { - token = parseJwt(obj["tokenResponse"]["access_token"]); - } - }); - return token; -} -export function getMatomoTrackingSiteId() { - return getEnv(`REACT_APP_MATOMO_SITE_ID`); -} -export function getUserIdFromAccessToken() { - const accessToken = getTokenInfoFromStorage(); - if (!accessToken) return null; - if (accessToken.profile) return accessToken.profile; - if (accessToken.fhirUser) return accessToken.fhirUser; - return accessToken["preferred_username"]; -} -export function addMatomoTracking() { - // already generated script, return - if (document.querySelector("#matomoScript")) return; - const userId = getUserIdFromAccessToken(); - // no user Id return - if (!userId) return; - const siteId = getMatomoTrackingSiteId(); - // no site Id return - if (!siteId) return; - // init global piwik tracking object - window._paq = []; - window._paq.push(["trackPageView"]); - window._paq.push(["enableLinkTracking"]); - window._paq.push(["setSiteId", siteId]); - window._paq.push(["setUserId", userId]); - - let u = "https://piwik.cirg.washington.edu/"; - window._paq.push(["setTrackerUrl", u + "matomo.php"]); - let d = document, - g = d.createElement("script"), - headElement = document.querySelector("head"); - g.type = "text/javascript"; - g.async = true; - g.defer = true; - g.setAttribute("src", u + "matomo.js"); - g.setAttribute("id", "matomoScript"); - headElement.appendChild(g); -} From ffad9939aece94e9d5d2b1c277ac2538e14605a6 Mon Sep 17 00:00:00 2001 From: Amy Chen Date: Tue, 31 Dec 2024 04:33:45 -0800 Subject: [PATCH 4/5] Update App.tsx --- src/ui-client/src/containers/App.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui-client/src/containers/App.tsx b/src/ui-client/src/containers/App.tsx index 88a9525f3..8316e120b 100644 --- a/src/ui-client/src/containers/App.tsx +++ b/src/ui-client/src/containers/App.tsx @@ -69,7 +69,7 @@ class App extends React.Component { private lastHeartbeat = new Date(); public componentDidMount() { - const { dispatch, auth } = this.props; + const { dispatch } = this.props; this.handleBrowserHeartbeat(); this.handleSessionTokenRefresh(); dispatch(getIdToken()); From 5988c211ebcd397c4919c227e316af3c1cfa5939 Mon Sep 17 00:00:00 2001 From: Amy Chen Date: Tue, 31 Dec 2024 08:46:32 -0800 Subject: [PATCH 5/5] remove commented out code per feedback Co-authored-by: Ivan Cvitkovic --- src/ui-client/src/containers/Attestation/Attestation.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ui-client/src/containers/Attestation/Attestation.tsx b/src/ui-client/src/containers/Attestation/Attestation.tsx index 0ea71fdfe..734c04abb 100644 --- a/src/ui-client/src/containers/Attestation/Attestation.tsx +++ b/src/ui-client/src/containers/Attestation/Attestation.tsx @@ -151,7 +151,6 @@ class Attestation extends React.PureComponent {
leaf-logo
- {/* leaf */} v{pkg.version}