diff --git a/components/pages/StyledApp.tsx b/components/pages/StyledApp.tsx index 0c7d91a8..cc48b3c2 100644 --- a/components/pages/StyledApp.tsx +++ b/components/pages/StyledApp.tsx @@ -1,16 +1,17 @@ +import { SessionConsumer } from 'contexts/session'; import type { FC } from 'react'; import { ThemeProvider } from 'styled-components'; import GlobalStyle from 'styles/GlobalStyle'; import themes from 'styles/themes.json'; -import type { StyledAppProps } from 'types/components/pages/StyledApp'; -const StyledApp: FC = ({ - children, - theme = themes.default -}) => ( +const StyledApp: FC = ({ children }) => ( <> - {children} + + {({ theme = themes.default }) => ( + {children} + )} + ); diff --git a/contexts/session.tsx b/contexts/session.tsx new file mode 100644 index 00000000..d20d6922 --- /dev/null +++ b/contexts/session.tsx @@ -0,0 +1,14 @@ +import useSessionContextState from 'hooks/useSessionContextState'; +import type { FC } from 'react'; +import { createContext } from 'react'; +import type { SessionContextState } from 'types/contexts/session'; + +const SessionContext = createContext({}); + +export const SessionProvider: FC = ({ children }) => ( + + {children} + +); + +export const SessionConsumer = SessionContext.Consumer; diff --git a/hooks/useSessionContextState.ts b/hooks/useSessionContextState.ts new file mode 100644 index 00000000..917a5ed5 --- /dev/null +++ b/hooks/useSessionContextState.ts @@ -0,0 +1,7 @@ +import type { SessionContextState } from 'types/contexts/session'; + +const useSessionContextState = (): SessionContextState => ({ + theme: undefined // TODO: Load user theme from localStorage +}); + +export default useSessionContextState; diff --git a/pages/_app.tsx b/pages/_app.tsx index 740c7ccc..5e783c05 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -1,5 +1,6 @@ import Metadata from 'components/pages/Metadata'; import StyledApp from 'components/pages/StyledApp'; +import { SessionProvider } from 'contexts/session'; import type { AppProps } from 'next/app'; import type { ReactElement } from 'react'; @@ -7,9 +8,11 @@ export default function App({ Component, pageProps }: AppProps): ReactElement { return ( <> - - - + + + + + ); } diff --git a/types/components/pages/StyledApp.ts b/types/contexts/session.ts similarity index 69% rename from types/components/pages/StyledApp.ts rename to types/contexts/session.ts index f1de6718..14ddf286 100644 --- a/types/components/pages/StyledApp.ts +++ b/types/contexts/session.ts @@ -1,5 +1,5 @@ import type { DefaultTheme } from 'styled-components'; -export type StyledAppProps = { +export type SessionContextState = { theme?: DefaultTheme; };