diff --git a/next.config.js b/next.config.js
index e924d60..46af0c4 100644
--- a/next.config.js
+++ b/next.config.js
@@ -1,4 +1,5 @@
module.exports = {
+ reactStrictMode: true,
env: {
PUBLIC_URL: "",
},
diff --git a/pages/[[...slug]].tsx b/pages/[[...slug]].tsx
index 7c9ad24..f1c9d14 100644
--- a/pages/[[...slug]].tsx
+++ b/pages/[[...slug]].tsx
@@ -1,4 +1,4 @@
-// import NextIndexWrapper from '../src'
+// import App from '../src'
// next/dynamic is used to prevent breaking incompatibilities
// with SSR from window.SOME_VAR usage, if this is not used
@@ -8,8 +8,8 @@ import dynamic from "next/dynamic";
// try changing "ssr" to true below to test for incompatibilities, if
// no errors occur the above static import can be used instead and the
// below removed
-const NextIndexWrapper = dynamic(() => import("../src"), { ssr: false });
+const App = dynamic(() => import("../src/app/App"), { ssr: false });
export default function Page(props: any) {
- return ;
+ return ;
}
diff --git a/pages/_app.tsx b/pages/_app.tsx
index 12a8f4a..f09d8ff 100644
--- a/pages/_app.tsx
+++ b/pages/_app.tsx
@@ -1,7 +1,37 @@
+import React from "react";
import Head from "next/head";
import type { AppProps } from "next/app";
+import * as Sentry from "@sentry/react";
+import { Integrations } from "@sentry/tracing";
+import { Auth0Provider } from "@auth0/auth0-react";
+import { CSSReset, ChakraProvider, extendTheme } from "@chakra-ui/react";
+import { ApolloProvider } from "@apollo/client";
+import { useAuth0 } from "@auth0/auth0-react";
+import { mode } from "@chakra-ui/theme-tools";
+
+import buildApolloClient from "../src/app/apolloClient";
+
+const theme = extendTheme({
+ styles: {
+ global: (props) => ({
+ html: {
+ // HACK: Chakra sets body as the relative position element, which is
+ // fine, except its `min-height: 100%` doesn't actually work
+ // unless paired with height on the root element too!
+ height: "100%",
+ },
+ body: {
+ background: mode("gray.50", "gray.800")(props),
+ color: mode("green.800", "green.50")(props),
+ transition: "all 0.25s",
+ },
+ }),
+ },
+});
export default function DTIApp({ Component, pageProps }: AppProps) {
+ React.useEffect(() => setupLogging(), []);
+
return (
<>
@@ -9,7 +39,81 @@ export default function DTIApp({ Component, pageProps }: AppProps) {
-
+
+
+
+
+
+
+
+
>
);
}
+
+function ApolloProviderWithAuth0({ children }: { children: React.ReactNode }) {
+ const auth0 = useAuth0();
+ const auth0Ref = React.useRef(auth0);
+
+ React.useEffect(() => {
+ auth0Ref.current = auth0;
+ }, [auth0]);
+
+ const client = React.useMemo(
+ () => buildApolloClient(() => auth0Ref.current),
+ []
+ );
+ return {children};
+}
+
+function setupLogging() {
+ Sentry.init({
+ dsn:
+ "https://c55875c3b0904264a1a99e5b741a221e@o506079.ingest.sentry.io/5595379",
+ autoSessionTracking: true,
+ integrations: [
+ new Integrations.BrowserTracing({
+ beforeNavigate: (context) => ({
+ ...context,
+ // Assume any path segment starting with a digit is an ID, and replace
+ // it with `:id`. This will help group related routes in Sentry stats.
+ // NOTE: I'm a bit uncertain about the timing on this for tracking
+ // client-side navs... but we now only track first-time
+ // pageloads, and it definitely works correctly for them!
+ name: window.location.pathname.replaceAll(/\/[0-9][^/]*/g, "/:id"),
+ }),
+
+ // We have a _lot_ of location changes that don't actually signify useful
+ // navigations, like in the wardrobe page. It could be useful to trace
+ // them with better filtering someday, but frankly we don't use the perf
+ // features besides Web Vitals right now, and those only get tracked on
+ // first-time pageloads, anyway. So, don't track client-side navs!
+ startTransactionOnLocationChange: false,
+ }),
+ ],
+ denyUrls: [
+ // Don't log errors that were probably triggered by extensions and not by
+ // our own app. (Apparently Sentry's setting to ignore browser extension
+ // errors doesn't do this anywhere near as consistently as I'd expect?)
+ //
+ // Adapted from https://gist.github.com/impressiver/5092952, as linked in
+ // https://docs.sentry.io/platforms/javascript/configuration/filtering/.
+ /^chrome-extension:\/\//,
+ /^moz-extension:\/\//,
+ ],
+
+ // Since we're only tracking first-page loads and not navigations, 100%
+ // sampling isn't actually so much! Tune down if it becomes a problem, tho.
+ tracesSampleRate: 1.0,
+ });
+}
diff --git a/src/app/App.js b/src/app/App.js
index d131ab3..102cccc 100644
--- a/src/app/App.js
+++ b/src/app/App.js
@@ -1,19 +1,12 @@
import React from "react";
-import { ApolloProvider } from "@apollo/client";
-import { Auth0Provider } from "@auth0/auth0-react";
-import { CSSReset, ChakraProvider, extendTheme, Box } from "@chakra-ui/react";
-import { mode } from "@chakra-ui/theme-tools";
+import { Box } from "@chakra-ui/react";
import {
BrowserRouter as Router,
Switch,
Route,
useLocation,
} from "react-router-dom";
-import * as Sentry from "@sentry/react";
-import { Integrations } from "@sentry/tracing";
-import { useAuth0 } from "@auth0/auth0-react";
-import buildApolloClient from "./apolloClient";
import PageLayout from "./PageLayout";
import WardrobePageLayout from "./WardrobePage/WardrobePageLayout";
import { loadable } from "./util";
@@ -56,64 +49,6 @@ const ItemSearchPageToolbar = loadable(
{ fallback: }
);
-const theme = extendTheme({
- styles: {
- global: (props) => ({
- html: {
- // HACK: Chakra sets body as the relative position element, which is
- // fine, except its `min-height: 100%` doesn't actually work
- // unless paired with height on the root element too!
- height: "100%",
- },
- body: {
- background: mode("gray.50", "gray.800")(props),
- color: mode("green.800", "green.50")(props),
- transition: "all 0.25s",
- },
- }),
- },
-});
-
-Sentry.init({
- dsn:
- "https://c55875c3b0904264a1a99e5b741a221e@o506079.ingest.sentry.io/5595379",
- autoSessionTracking: true,
- integrations: [
- new Integrations.BrowserTracing({
- beforeNavigate: (context) => ({
- ...context,
- // Assume any path segment starting with a digit is an ID, and replace
- // it with `:id`. This will help group related routes in Sentry stats.
- // NOTE: I'm a bit uncertain about the timing on this for tracking
- // client-side navs... but we now only track first-time
- // pageloads, and it definitely works correctly for them!
- name: window.location.pathname.replaceAll(/\/[0-9][^/]*/g, "/:id"),
- }),
-
- // We have a _lot_ of location changes that don't actually signify useful
- // navigations, like in the wardrobe page. It could be useful to trace
- // them with better filtering someday, but frankly we don't use the perf
- // features besides Web Vitals right now, and those only get tracked on
- // first-time pageloads, anyway. So, don't track client-side navs!
- startTransactionOnLocationChange: false,
- }),
- ],
- denyUrls: [
- // Don't log errors that were probably triggered by extensions and not by
- // our own app. (Apparently Sentry's setting to ignore browser extension
- // errors doesn't do this anywhere near as consistently as I'd expect?)
- //
- // Adapted from https://gist.github.com/impressiver/5092952, as linked in
- // https://docs.sentry.io/platforms/javascript/configuration/filtering/.
- /^chrome-extension:\/\//,
- /^moz-extension:\/\//,
- ],
-
- // Since we're only tracking first-page loads and not navigations, 100%
- // sampling isn't actually so much! Tune down if it becomes a problem, tho.
- tracesSampleRate: 1.0,
-});
-
/**
* App is the entry point of our application. There's not a ton of exciting
* stuff happening here, mostly just setting up some globals and theming!
@@ -124,92 +59,80 @@ function App() {
return (
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
);
}
@@ -224,19 +147,4 @@ function ScrollToTop() {
return null;
}
-function ApolloProviderWithAuth0({ children }) {
- const auth0 = useAuth0();
- const auth0Ref = React.useRef(auth0);
-
- React.useEffect(() => {
- auth0Ref.current = auth0;
- }, [auth0]);
-
- const client = React.useMemo(
- () => buildApolloClient(() => auth0Ref.current),
- []
- );
- return {children};
-}
-
export default App;
diff --git a/src/index.js b/src/index.js
deleted file mode 100644
index 64301aa..0000000
--- a/src/index.js
+++ /dev/null
@@ -1,10 +0,0 @@
-import React from "react";
-import App from "./app/App";
-
-export default function NextIndexWrapper() {
- return (
-
-
-
- );
-}