saleor-apps-redis_apl/apps/crm/src/pages/_app.tsx

65 lines
2 KiB
TypeScript
Raw Normal View History

Introduce CRM App (#292) * Add template Cleanup Update queries Basic mailchimp client Add Oauth flow remove next auth * Auth flow, mailchimp button * Basic layouts * session saver for appbridge * ideas drop * basic iframe flow * iframe flow - with post message * saving token in backend * saving token in backend * Extracted settings manager * Refactor audience router * Remove old macaw ui * Nav and layout * display lists and wip add customer * Metadata updater * Allow iframe to NOT have app layout * Add segment coming soon * App layout * Add removing config button * Add iframe * Fix postmessages * Display lists * webhook settings * Connect webhook * remove comment * batch customer adding client * Update macaw * Fetching customers component * Add bulk sync * add temp ts-ignore until macaw is fixed * Improve ui * redesign * Extract sections * Redesign mailchimp login * Refactor sections * Extract mailchimp list picker * Add name mapping * WIP tags, extracted colocated queries to folders * Wip - not working CustomerUpdated subs * Add instructions * Fix webhook config state * Add external links * envs * Protected Oauth handler * Fix instructions * Squash some todos * Instructions update with gql * empty trygger * Add env validation * Fix error message * Update macaw and remove todos * Add metadata manager test * Replace Mailchimp enum to lowercase * Update oauth routes * Fix typo * Add loader to removing config box * Update labeler to include CRM app * Apply suggestions from CR * Fix linter
2023-04-06 07:26:56 +00:00
import "@saleor/macaw-ui/next/style";
import "../styles/globals.css";
import { AppBridge, AppBridgeProvider } from "@saleor/app-sdk/app-bridge";
import { RoutePropagator } from "@saleor/app-sdk/app-bridge/next";
import React, { ReactElement } from "react";
import { AppProps } from "next/app";
import { NoSSRWrapper } from "@saleor/apps-shared";
import { trpcClient } from "../modules/trpc/trpc-client";
import { Box, ThemeProvider } from "@saleor/macaw-ui/next";
import { NextPage } from "next";
import { GraphQLProvider } from "../lib/graphql-provider";
import { AppBridgeStorageSetter } from "../lib/app-bridge-persistence";
/**
* Ensure instance is a singleton.
* TODO: This is React 18 issue, consider hiding this workaround inside app-sdk
*/
export let appBridgeInstance: AppBridge | undefined;
if (typeof window !== "undefined" && !appBridgeInstance) {
appBridgeInstance = new AppBridge();
}
/**
* Implementation of layout pattern
* https://nextjs.org/docs/basic-features/layouts#per-page-layouts
*
* In this app, there are pages inside the iframe, which will not use AppBridge etc, so they need
* to provider custom tree of wrappers
*/
export type NextPageWithLayoutOverwrite<P = {}, IP = P> = NextPage<P, IP> & {
overwriteLayout?: (page: ReactElement) => ReactElement;
};
type AppPropsWithLayout = AppProps & {
Component: NextPageWithLayoutOverwrite;
};
function NextApp({ Component, pageProps: { session, ...pageProps } }: AppPropsWithLayout) {
if (Component.overwriteLayout) {
return Component.overwriteLayout(<Component {...pageProps} />);
}
return (
<NoSSRWrapper>
<AppBridgeProvider appBridgeInstance={appBridgeInstance}>
<GraphQLProvider>
<ThemeProvider defaultTheme="defaultLight">
<RoutePropagator />
<AppBridgeStorageSetter />
<Box padding={8}>
<Component {...pageProps} />
</Box>
</ThemeProvider>
</GraphQLProvider>
</AppBridgeProvider>
</NoSSRWrapper>
);
}
export default trpcClient.withTRPC(NextApp);