stacker.news/pages/_app.js

71 lines
2.1 KiB
JavaScript

import '../styles/globals.scss'
import { ApolloProvider, gql } from '@apollo/client'
import { Provider } from 'next-auth/client'
import { FundErrorModal, FundErrorProvider } from '../components/fund-error'
import { MeProvider } from '../components/me'
import PlausibleProvider from 'next-plausible'
import { LightningProvider } from '../components/lightning'
import { ItemActModal, ItemActProvider } from '../components/item-act'
import getApolloClient from '../lib/apollo'
import NextNProgress from 'nextjs-progressbar'
import { PriceProvider } from '../components/price'
import Head from 'next/head'
function MyApp ({ Component, pageProps: { session, ...props } }) {
const client = getApolloClient()
/*
If we are on the client, we populate the apollo cache with the
ssr data
*/
if (typeof window !== 'undefined') {
const { apollo, data } = props
if (apollo) {
client.writeQuery({
query: gql`${apollo.query}`,
data: data,
variables: apollo.variables
})
}
}
const { me, price } = props
return (
<>
<NextNProgress
color='var(--primary)'
startPosition={0.3}
stopDelayMs={200}
height={2}
showOnShallow
options={{ showSpinner: false }}
/>
<Head>
<meta name='viewport' content='initial-scale=1.0, width=device-width' />
</Head>
<PlausibleProvider domain='stacker.news' trackOutboundLinks>
<Provider session={session}>
<ApolloProvider client={client}>
<MeProvider me={me}>
<PriceProvider price={price}>
<LightningProvider>
<FundErrorProvider>
<FundErrorModal />
<ItemActProvider>
<ItemActModal />
<Component {...props} />
</ItemActProvider>
</FundErrorProvider>
</LightningProvider>
</PriceProvider>
</MeProvider>
</ApolloProvider>
</Provider>
</PlausibleProvider>
</>
)
}
export default MyApp