
* 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
64 lines
2 KiB
TypeScript
64 lines
2 KiB
TypeScript
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);
|