Files
calendar/apps/web/lib/app-providers.tsx
T
456a4ba581 Telemetry improvements (#2935)
* next-collect initial setup

* naming changes

* WIP

* WIP: added cookie name

* telemetry update

* fixes

* telemetry eventTypes fix

* tmp jitsu config for testing

* tmp jitsu key update (for tests)

* deploy commit

* cookieName fixes

* telemetry credentials update

* NextCollect updated to latest canary; added TELEMETRY_KEY to config

* TELEMETRY_KEY fix

removed browser_user_agent field from event

* removed _middleware.ts for test deploy

* _middleware.ts restored

* next-collect version bump

* yarn.lock fix

* Added license consent property, set default telemetry endpoint

* Switched to stable version of next-collect; restored LicenseProvider accidentally deleted during merge

* Switched to stable version of next-collect; restored LicenseProvider accidentally deleted during merge

* Updated to latest version of next-collect

* - Updated to latest version of next-collect
- Few improvements in event collection: isTeamBooking for all events, page_url for all events
- Do not send second page event on re-render of /team/[slug]

* Revert booking confirmed tracking

* Applied prettier + fix lint

Co-authored-by: Art Sk <kirsan007@gmail.com>
2022-06-02 10:19:01 -06:00

66 lines
2.0 KiB
TypeScript

import { SessionProvider } from "next-auth/react";
import { appWithTranslation } from "next-i18next";
import type { AppProps as NextAppProps, AppProps as NextJsAppProps } from "next/app";
import { ComponentProps, ReactNode, useMemo } from "react";
import DynamicHelpscoutProvider from "@ee/lib/helpscout/providerDynamic";
import DynamicIntercomProvider from "@ee/lib/intercom/providerDynamic";
import usePublicPage from "@lib/hooks/usePublicPage";
import { trpc } from "./trpc";
const I18nextAdapter = appWithTranslation<NextJsAppProps & { children: React.ReactNode }>(({ children }) => (
<>{children}</>
));
// Workaround for https://github.com/vercel/next.js/issues/8592
export type AppProps = Omit<NextAppProps, "Component"> & {
Component: NextAppProps["Component"] & { requiresLicense?: boolean };
/** Will be defined only is there was an error */
err?: Error;
};
type AppPropsWithChildren = AppProps & {
children: ReactNode;
};
const CustomI18nextProvider = (props: AppPropsWithChildren) => {
const { i18n, locale } = trpc.useQuery(["viewer.i18n"]).data ?? {
locale: "en",
};
const passedProps = {
...props,
pageProps: {
...props.pageProps,
...i18n,
},
router: locale ? { locale } : props.router,
} as unknown as ComponentProps<typeof I18nextAdapter>;
return <I18nextAdapter {...passedProps} />;
};
const AppProviders = (props: AppPropsWithChildren) => {
const session = trpc.useQuery(["viewer.session"]).data;
// No need to have intercom on public pages - Good for Page Performance
const isPublicPage = usePublicPage();
const RemainingProviders = (
<SessionProvider session={session || undefined}>
<CustomI18nextProvider {...props}>{props.children}</CustomI18nextProvider>
</SessionProvider>
);
if (isPublicPage) {
return RemainingProviders;
}
return (
<DynamicHelpscoutProvider>
<DynamicIntercomProvider>{RemainingProviders}</DynamicIntercomProvider>
</DynamicHelpscoutProvider>
);
};
export default AppProviders;