From 7679b1552b06512134d03800baff9bfc188a7b97 Mon Sep 17 00:00:00 2001 From: QiShaoXuan Date: Wed, 21 Dec 2022 18:21:09 +0800 Subject: [PATCH] chore: isolate workspace layout from _app --- .../src/components/workspace-layout/index.tsx | 34 ++++++++++++ .../src/components/workspace-layout/styles.ts | 18 +++++++ packages/app/src/pages/_app.tsx | 53 +++++-------------- packages/app/src/pages/affine.tsx | 2 - .../workspace/[workspaceId]/[pageId].tsx | 13 +++-- .../src/pages/workspace/[workspaceId]/all.tsx | 9 +++- .../workspace/[workspaceId]/favorite.tsx | 9 +++- .../pages/workspace/[workspaceId]/trash.tsx | 9 +++- 8 files changed, 96 insertions(+), 51 deletions(-) create mode 100644 packages/app/src/components/workspace-layout/index.tsx create mode 100644 packages/app/src/components/workspace-layout/styles.ts diff --git a/packages/app/src/components/workspace-layout/index.tsx b/packages/app/src/components/workspace-layout/index.tsx new file mode 100644 index 0000000000..2eb06a3400 --- /dev/null +++ b/packages/app/src/components/workspace-layout/index.tsx @@ -0,0 +1,34 @@ +import HelpIsland from '@/components/help-island'; +import { WorkSpaceSliderBar } from '@/components/workspace-slider-bar'; +import { useRouter } from 'next/router'; +import { StyledPage, StyledWrapper } from './styles'; +import { AppStateProvider } from '@/providers/app-state-provider/provider'; +import ConfirmProvider from '@/providers/confirm-provider'; +import { ModalProvider } from '@/providers/global-modal-provider'; +import ProviderComposer from '@/components/provider-composer'; +import { PropsWithChildren } from 'react'; + +export const WorkspaceLayout = ({ children }: PropsWithChildren) => { + const router = useRouter(); + return ( + , + , + , + ]} + > + + + + {children} + + + + + ); +}; + +export default WorkspaceLayout; diff --git a/packages/app/src/components/workspace-layout/styles.ts b/packages/app/src/components/workspace-layout/styles.ts new file mode 100644 index 0000000000..7bffcc3bd8 --- /dev/null +++ b/packages/app/src/components/workspace-layout/styles.ts @@ -0,0 +1,18 @@ +import { styled } from '@/styles'; + +export const StyledPage = styled('div')(({ theme }) => { + return { + height: '100vh', + backgroundColor: theme.colors.pageBackground, + transition: 'background-color .5s', + display: 'flex', + flexGrow: '1', + }; +}); + +export const StyledWrapper = styled('div')(({ theme }) => { + return { + flexGrow: 1, + position: 'relative', + }; +}); diff --git a/packages/app/src/pages/_app.tsx b/packages/app/src/pages/_app.tsx index a5f11dc2ff..e9031d3c79 100644 --- a/packages/app/src/pages/_app.tsx +++ b/packages/app/src/pages/_app.tsx @@ -3,63 +3,34 @@ import dynamic from 'next/dynamic'; import '../../public/globals.css'; import '../../public/variable.css'; import './temporary.css'; -import { ModalProvider } from '@/providers/global-modal-provider'; -import { AppStateProvider } from '@/providers/app-state-provider/provider'; import { Logger } from '@toeverything/pathfinder-logger'; -import { WorkSpaceSliderBar } from '@/components/workspace-slider-bar'; import '@fontsource/space-mono'; import '@fontsource/poppins'; import '../utils/print-build-info'; -import { styled } from '@/styles'; import ProviderComposer from '@/components/provider-composer'; -import ConfirmProvider from '@/providers/confirm-provider'; -import HelpIsland from '@/components/help-island'; -import { useRouter } from 'next/router'; +import type { ReactElement, ReactNode } from 'react'; +import type { NextPage } from 'next'; const ThemeProvider = dynamic(() => import('@/providers/themeProvider'), { ssr: false, }); -const StyledPage = styled('div')(({ theme }) => { - return { - height: '100vh', - backgroundColor: theme.colors.pageBackground, - transition: 'background-color .5s', - display: 'flex', - flexGrow: '1', - }; -}); +export type NextPageWithLayout

= NextPage & { + getLayout?: (page: ReactElement) => ReactNode; +}; -const StyledWrapper = styled('div')(({ theme }) => { - return { - flexGrow: 1, - position: 'relative', - }; -}); +type AppPropsWithLayout = AppProps & { + Component: NextPageWithLayout; +}; -function MyApp({ Component, pageProps }: AppProps) { - const router = useRouter(); +function MyApp({ Component, pageProps }: AppPropsWithLayout) { + const getLayout = Component.getLayout || (page => page); return ( <> - , - , - , - , - ]} - > - - - - - - - + ]}> + {getLayout()} ); diff --git a/packages/app/src/pages/affine.tsx b/packages/app/src/pages/affine.tsx index fed40e1f36..31bc1a53bf 100644 --- a/packages/app/src/pages/affine.tsx +++ b/packages/app/src/pages/affine.tsx @@ -1,5 +1,4 @@ import { displayFlex, styled } from '@/styles'; -import { ThemeModeSwitch } from '@/components/theme-mode-switch'; import { Loading } from '@/components/loading'; import Modal from '@/ui/modal'; import { useState } from 'react'; @@ -20,7 +19,6 @@ const Affine = () => { return ( <> -