9df4867fca
* WIP License server * WIP * Moves locations to App Store and Core * LocationType fixes * Runs db migrations post-deploy * WIP * WIP * Cleanup * WIP * WIP * Decouples translations from NavTabs * Adds admin submodule * Adds admin submodule * Sync dependencies * WIP * WIP * Updates submodules * Renames package * Updates submodules * Adds scripts for console * Updates license checker URL * Updates admin * Adds staging/prod admin console links * Update yarn.lock * Update NavTabs.tsx * WIP * Update admin * WIP * Adds hint to InputField * Update admin * Adds turbo admin dependecies * Update admin * Prevents redirection on form submit * Form warning fixes * Update admin * Form fixes * Update yarn.lock * Update admin * Update admin * Update admin * Adds withLicenseRequired HOC * Adds LicenseRequired to EE components * Admin deploy fix? * Updates submodules * Use relative inside lib * type fixes * Fixes turbo race condition * Relocates admin to console * Relocates admin to console * Update console * Update api * Update turbo.json * Update ErrorBoundary.tsx * Update defaultEvents.ts * Update checkLicense.ts * Update yarn.lock * Skip on E2E Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com>
69 lines
2.2 KiB
TypeScript
69 lines
2.2 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 { createTelemetryClient, TelemetryProvider } from "@lib/telemetry";
|
|
|
|
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>
|
|
);
|
|
const telemetryClient = useMemo(createTelemetryClient, []);
|
|
return (
|
|
<TelemetryProvider value={telemetryClient}>
|
|
{isPublicPage ? (
|
|
RemainingProviders
|
|
) : (
|
|
<DynamicHelpscoutProvider>
|
|
<DynamicIntercomProvider>{RemainingProviders}</DynamicIntercomProvider>
|
|
</DynamicHelpscoutProvider>
|
|
)}
|
|
</TelemetryProvider>
|
|
);
|
|
};
|
|
|
|
export default AppProviders;
|