staging
zomars 2022-04-05 11:16:42 -06:00
parent 4461de5e78
commit 0af4334766
6 changed files with 63 additions and 5 deletions

View File

@ -1,12 +1,19 @@
import { CreditCardIcon, KeyIcon, UserGroupIcon, UserIcon } from "@heroicons/react/solid";
import { useRouter } from "next/router";
import React from "react";
import LicenseRequired from "@ee/components/LicenseRequired";
import ErrorBoundary from "@lib/ErrorBoundary";
import { useLocale } from "@lib/hooks/useLocale";
import NavTabs from "./NavTabs";
export default function SettingsShell({ children }: { children: React.ReactNode }) {
const { t } = useLocale();
const { asPath } = useRouter();
console.log("asPath", asPath);
const tabs = [
{
@ -31,12 +38,18 @@ export default function SettingsShell({ children }: { children: React.ReactNode
},
];
const Wrapper = LicenseRequired;
return (
<>
<div className="sm:mx-auto">
<NavTabs tabs={tabs} />
</div>
<main className="max-w-4xl">{children}</main>
<Wrapper>
<main className="max-w-4xl">
<ErrorBoundary>{children}</ErrorBoundary>
</main>
</Wrapper>
</>
);
}

View File

@ -28,6 +28,7 @@ import LicenseBanner from "@ee/components/LicenseBanner";
import TrialBanner from "@ee/components/TrialBanner";
import HelpMenuItem from "@ee/components/support/HelpMenuItem";
import ErrorBoundary from "@lib/ErrorBoundary";
import classNames from "@lib/classNames";
import { NEXT_PUBLIC_BASE_URL } from "@lib/config/constants";
import { shouldShowOnboarding } from "@lib/getting-started";
@ -371,7 +372,7 @@ export default function Shell(props: {
"px-4 sm:px-6 md:px-8",
props.flexChildrenContainer && "flex flex-1 flex-col"
)}>
{props.children}
<ErrorBoundary>{props.children}</ErrorBoundary>
</div>
{/* show bottom navigation for md and smaller (tablet and phones) */}
{status === "authenticated" && (

View File

@ -0,0 +1,32 @@
import React, { ErrorInfo } from "react";
class ErrorBoundary extends React.Component<{}, { error: Error | null; errorInfo: ErrorInfo | null }> {
constructor(props: {} | Readonly<{}>) {
super(props);
this.state = { error: null, errorInfo: null };
}
componentDidCatch?(error: Error, errorInfo: ErrorInfo) {
// Catch errors in any components below and re-render with error message
this.setState({ error, errorInfo });
// You can also log error messages to an error reporting service here
}
render() {
if (this.state.errorInfo) {
// Error path
return (
<div>
<h2>Something went wrong.</h2>
<details style={{ whiteSpace: "pre-wrap" }}>
{this.state.error && this.state.error.toString()}
</details>
</div>
);
}
// Normally, just render children
return this.props.children;
}
}
export default ErrorBoundary;

View File

@ -17,7 +17,8 @@ import { trpc } from "./trpc";
const I18nextAdapter = appWithTranslation(({ children }: { children?: ReactNode }) => <>{children}</>);
// Workaround for https://github.com/vercel/next.js/issues/8592
export type AppProps = NextAppProps & {
export type AppProps = Omit<NextAppProps, "Component"> & {
Component: NextAppProps["Component"] & { requiresLicense?: boolean };
/** Will be defined only is there was an error */
err?: Error;
};

View File

@ -4,6 +4,7 @@ import Head from "next/head";
import superjson from "superjson";
import "@calcom/embed-core/src/embed-iframe";
import LicenseRequired from "@ee/components/LicenseRequired";
import AppProviders, { AppProps } from "@lib/app-providers";
import { seoConfig } from "@lib/config/next-seo.config";
@ -31,7 +32,13 @@ function MyApp(props: AppProps) {
<Head>
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
</Head>
<Component {...pageProps} err={err} />
{Component.requiresLicense ? (
<LicenseRequired>
<Component {...pageProps} err={err} />
</LicenseRequired>
) : (
<Component {...pageProps} err={err} />
)}
</AppProviders>
</ContractsProvider>
);

View File

@ -17,7 +17,7 @@ import Shell, { useMeQuery } from "@components/Shell";
import TeamCreateModal from "@components/team/TeamCreateModal";
import TeamList from "@components/team/TeamList";
export default function Teams() {
function Teams() {
const { t } = useLocale();
const { status } = useSession();
const loading = status === "loading";
@ -90,3 +90,7 @@ export default function Teams() {
</Shell>
);
}
Teams.requiresLicense = false;
export default Teams;