/* * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. * SPDX-License-Identifier: Apache-2.0 */ import React, { ReactNode, useState, useEffect } from "react"; import { Link } from "react-router-dom"; import { FontAwesomeIcon } from "@fortawesome/react-fontawesome"; import { faWindowClose } from "@fortawesome/free-solid-svg-icons"; import Logo from "../components/Logo"; import { Auth } from "@aws-amplify/auth"; import { usePublicSettings, useFavicon, useFileLoaded, useCurrentAuthenticatedUser, } from "../hooks"; import { useTranslation } from "react-i18next"; import Header from "../components/Header"; import { Helmet } from "react-helmet"; import defaultFavicon from "../favicon.svg"; import ReactGA from "react-ga"; interface LayoutProps { children?: ReactNode; } function PublicLayout(props: LayoutProps) { const { settings, loadingSettings } = usePublicSettings(); const { favicon, loadingFile } = useFavicon(settings.customFaviconS3Key); const { username, isFederatedId } = useCurrentAuthenticatedUser(); const [toHide, setToHide] = useState(true); const { t } = useTranslation(); const signOut = async (event: React.MouseEvent) => { event.preventDefault(); setTimeout(async () => { try { await Auth.signOut(); if (!isFederatedId) { window.location.href = "/admin"; } } catch (error) { console.log("error signing out: ", error); event.preventDefault(); } }); }; useFileLoaded(setToHide, loadingFile, loadingSettings, settings, "favicon"); let collectAnalytics = false; if (settings.analyticsTrackingId && settings.analyticsTrackingId !== "NA") { collectAnalytics = true; ReactGA.initialize(settings.analyticsTrackingId, { debug: false, gaOptions: { siteSpeedSampleRate: 100, }, }); } useEffect(() => { if (collectAnalytics) { ReactGA.pageview(window.location.pathname + window.location.search); } }, []); return ( <> {loadingFile || loadingSettings || toHide ? ( ) : ( )}
{t("SkipToMainContent")}
{props.children}
); } export const withPublicLayout = (component: React.ComponentType): React.FunctionComponent<{}> => { return function () { return {React.createElement(component)}; }; }; export default withPublicLayout;