| /** |
| * Copyright (c) Facebook, Inc. and its affiliates. |
| * |
| * This source code is licensed under the MIT license found in the |
| * LICENSE file in the root directory of this source tree. |
| */ |
| |
| import React, { useEffect } from 'react'; |
| import clsx from 'clsx'; |
| import ErrorBoundary from '@docusaurus/ErrorBoundary'; |
| import { |
| PageMetadata, |
| SkipToContentFallbackId, |
| ThemeClassNames, |
| } from '@docusaurus/theme-common'; |
| import { useLocation } from '@docusaurus/router'; |
| import {useKeyboardNavigation} from '@docusaurus/theme-common/internal'; |
| import SkipToContent from '@theme/SkipToContent'; |
| import AnnouncementBar from '@theme/AnnouncementBar'; |
| import Navbar from '@theme/Navbar'; |
| import Footer from '@theme/Footer'; |
| import LayoutProvider from '@theme/Layout/Provider'; |
| import ErrorPageContent from '@theme/ErrorPageContent'; |
| import type {Props} from '@theme/Layout'; |
| import mixpanel from 'mixpanel-browser'; |
| import BrowserLanguage from './BrowserLanguage'; |
| |
| import styles from './styles.module.css'; |
| |
| export default function Layout(props: Props): JSX.Element { |
| const { |
| children, |
| noFooter, |
| wrapperClassName, |
| // Not really layout-related, but kept for convenience/retro-compatibility |
| title, |
| description, |
| } = props; |
| |
| const location = useLocation(); |
| |
| useKeyboardNavigation(); |
| |
| useEffect(() => { |
| mixpanel.init('84c6c96fab326b95afbbd54aadda641b'); |
| }, []) |
| |
| useEffect(() => { |
| mixpanel.track_pageview(); |
| }, [location]); |
| |
| return ( |
| <LayoutProvider> |
| <PageMetadata title={title} description={description} /> |
| |
| <SkipToContent /> |
| |
| <AnnouncementBar /> |
| |
| <Navbar /> |
| <BrowserLanguage /> |
| |
| <div |
| id={SkipToContentFallbackId} |
| className={clsx( |
| ThemeClassNames.wrapper.main, |
| styles.mainWrapper, |
| wrapperClassName, |
| )}> |
| <ErrorBoundary fallback={(params) => <ErrorPageContent {...params} />}> |
| {children} |
| </ErrorBoundary> |
| </div> |
| |
| {!noFooter && <Footer />} |
| </LayoutProvider> |
| ); |
| } |