2020-04-06 20:27:35 +00:00
import './style.css'
import App from 'next/app'
import NProgress from 'nprogress'
import Router from 'next/router'
import ProductSubnav from '../components/subnav'
import MegaNav from '@hashicorp/react-mega-nav'
import Footer from '../components/footer'
2020-04-28 17:53:30 +00:00
import AlertBanner from '@hashicorp/react-alert-banner'
2020-04-06 20:27:35 +00:00
import { ConsentManager , open } from '@hashicorp/react-consent-manager'
import consentManagerConfig from '../lib/consent-manager-config'
import bugsnagClient from '../lib/bugsnag'
2020-04-28 17:53:30 +00:00
import anchorLinkAnalytics from '../lib/anchor-link-analytics'
import alertBannerData , { ALERT _BANNER _ACTIVE } from '../data/alert-banner'
2020-04-06 20:27:35 +00:00
import Error from './_error'
import Head from 'next/head'
import HashiHead from '@hashicorp/react-head'
Router . events . on ( 'routeChangeStart' , NProgress . start )
Router . events . on ( 'routeChangeError' , NProgress . done )
Router . events . on ( 'routeChangeComplete' , ( url ) => {
setTimeout ( ( ) => window . analytics . page ( url ) , 0 )
NProgress . done ( )
} )
// Bugsnag
const ErrorBoundary = bugsnagClient . getPlugin ( 'react' )
class NextApp extends App {
static async getInitialProps ( { Component , ctx } ) {
let pageProps = { }
if ( Component . getInitialProps ) {
pageProps = await Component . getInitialProps ( ctx )
} else if ( Component . isMDXComponent ) {
// fix for https://github.com/mdx-js/mdx/issues/382
const mdxLayoutComponent = Component ( { } ) . props . originalType
if ( mdxLayoutComponent . getInitialProps ) {
pageProps = await mdxLayoutComponent . getInitialProps ( ctx )
}
}
return { pageProps }
}
2020-04-15 17:23:08 +00:00
componentDidMount ( ) {
anchorLinkAnalytics ( )
}
componentDidUpdate ( ) {
anchorLinkAnalytics ( )
}
2020-04-06 20:27:35 +00:00
render ( ) {
const { Component , pageProps } = this . props
return (
< ErrorBoundary FallbackComponent = { Error } >
< HashiHead
is = { Head }
title = "Consul by HashiCorp"
siteName = "Consul by HashiCorp"
2020-05-14 05:23:18 +00:00
description = "Consul is a service networking solution to automate network configurations, discover services, and enable secure connectivity across any cloud or runtime."
2020-04-06 20:27:35 +00:00
image = "https://www.consul.io/img/og-image.png"
stylesheet = { [
{ href : '/css/nprogress.css' } ,
{
href :
'https://fonts.googleapis.com/css?family=Open+Sans:300,400,600,700&display=swap' ,
} ,
] }
icon = { [ { href : '/favicon.ico' } ] }
preload = { [
{ href : '/fonts/klavika/medium.woff2' , as : 'font' } ,
{ href : '/fonts/gilmer/light.woff2' , as : 'font' } ,
{ href : '/fonts/gilmer/regular.woff2' , as : 'font' } ,
{ href : '/fonts/gilmer/medium.woff2' , as : 'font' } ,
{ href : '/fonts/gilmer/bold.woff2' , as : 'font' } ,
{ href : '/fonts/metro-sans/book.woff2' , as : 'font' } ,
{ href : '/fonts/metro-sans/regular.woff2' , as : 'font' } ,
{ href : '/fonts/metro-sans/semi-bold.woff2' , as : 'font' } ,
{ href : '/fonts/metro-sans/bold.woff2' , as : 'font' } ,
{ href : '/fonts/dejavu/mono.woff2' , as : 'font' } ,
] }
/ >
2020-04-28 17:53:30 +00:00
{ ALERT _BANNER _ACTIVE && (
< AlertBanner { ... alertBannerData } theme = "consul" / >
) }
2020-04-06 20:27:35 +00:00
< MegaNav product = "Consul" / >
< ProductSubnav / >
< div className = "content" >
< Component { ... pageProps } / >
< / d i v >
< Footer openConsentManager = { open } / >
< ConsentManager { ... consentManagerConfig } / >
< / E r r o r B o u n d a r y >
)
}
}
export default NextApp