saleor-apps-redis_apl/apps/invoices/src/pages/_app.tsx
Lukasz Ostrowski 1b3680465f
Invoices redesign to Macaw Next (#445)
* Removed old macaw and material

* Add trpc router that fetches shop address info

* Config page layout with header and address

* display default addres

* Draft channels list

* add v2 config model

* Render address overrides

* Render address overrides ui

* connect address form

* reset address form

* implement removing conifg

* connect dashboard sites

* update webhook

* Add ConfigV1 to ConfigV2 transformer

* Cleanup v1 router, abstract v2

* Implement runtime migrations

* Implement migration service in controllers

* test for configuration service

* test for app cofnig

* draft test for router

* refactor webhook

* Unify Address schema to single one

* Extractr data fetching from form
2023-05-09 12:17:54 +02:00

61 lines
1.9 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 { ThemeSynchronizer } from "../lib/theme-synchronizer";
/**
* 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}>
<ThemeProvider defaultTheme="defaultLight">
<ThemeSynchronizer />
<RoutePropagator />
<Box padding={8} __maxWidth={1440}>
<Component {...pageProps} />
</Box>
</ThemeProvider>
</AppBridgeProvider>
</NoSSRWrapper>
);
}
export default trpcClient.withTRPC(NextApp);