From 4d0dfefd4ba7319075111fec5a15a53c1ec6f542 Mon Sep 17 00:00:00 2001 From: Jack Works Date: Wed, 30 Mar 2022 15:31:58 +0800 Subject: [PATCH] refactor: move MaskThemeProvider --- packages/mask/src/UIRoot.tsx | 47 ++++++---------------------- packages/theme/src/ThemeProvider.tsx | 42 +++++++++++++++++++++++++ packages/theme/src/index.ts | 1 + 3 files changed, 53 insertions(+), 37 deletions(-) create mode 100644 packages/theme/src/ThemeProvider.tsx diff --git a/packages/mask/src/UIRoot.tsx b/packages/mask/src/UIRoot.tsx index 31d738d9740c..f117c0b281f8 100644 --- a/packages/mask/src/UIRoot.tsx +++ b/packages/mask/src/UIRoot.tsx @@ -1,7 +1,6 @@ import { Suspense } from 'react' -import { CustomSnackbarProvider } from '@masknet/theme' import { Web3Provider } from '@masknet/web3-shared-evm' -import { CssBaseline, StyledEngineProvider, Theme, ThemeProvider } from '@mui/material' +import { CssBaseline, StyledEngineProvider, Theme } from '@mui/material' import { NetworkPluginID, PluginsWeb3ContextProvider, useAllPluginsWeb3State } from '@masknet/plugin-infra' import { I18NextProviderHMR } from '@masknet/shared' import { ErrorBoundary, ErrorBoundaryBuildInfoContext, useValueRef } from '@masknet/shared-base-ui' @@ -13,50 +12,20 @@ import { isFacebook } from './social-network-adaptor/facebook.com/base' import { pluginIDSettings } from './settings/settings' import { fixWeb3State } from './plugins/EVM/UI/Web3State' import { getBackgroundColor } from './utils' -import { MaskIconPaletteContext } from '@masknet/icons' import { isTwitter } from './social-network-adaptor/twitter.com/base' +import { MaskThemeProvider } from '@masknet/theme' + const identity = (jsx: React.ReactNode) => jsx as JSX.Element function compose(init: React.ReactNode, ...f: ((children: React.ReactNode) => JSX.Element)[]) { return f.reduceRight((prev, curr) => curr(prev), <>{init}) } -type MaskThemeProvider = React.PropsWithChildren<{ - baseline: boolean - useTheme(): Theme -}> -function MaskThemeProvider({ children, baseline, useTheme }: MaskThemeProvider) { - const theme = useTheme() - +function useMaskIconPalette(theme: Theme) { const backgroundColor = getBackgroundColor(document.body) const isDark = theme.palette.mode === 'dark' const isDarker = backgroundColor === 'rgb(0,0,0)' - return compose( - children, - (jsx) => ( - - {jsx} - - ), - (jsx) => , - (jsx) => ( - - ), - baseline - ? (jsx) => ( - <> - - {jsx} - - ) - : identity, - ) + return isDark ? (!isDarker && isTwitter(activatedSocialNetworkUI) ? 'dim' : 'dark') : 'light' } export interface MaskUIRootProps extends React.PropsWithChildren<{}> { kind: 'page' | 'sns' @@ -84,7 +53,11 @@ export function MaskUIRoot({ children, kind, useTheme }: MaskUIRootProps) { (jsx) => , kind === 'page' ? (jsx) => : identity, (jsx) => ( - + {jsx} diff --git a/packages/theme/src/ThemeProvider.tsx b/packages/theme/src/ThemeProvider.tsx new file mode 100644 index 000000000000..ad93110993a8 --- /dev/null +++ b/packages/theme/src/ThemeProvider.tsx @@ -0,0 +1,42 @@ +import { CssBaseline, Theme, ThemeProvider } from '@mui/material' +import { MaskIconPalette, MaskIconPaletteContext } from '@masknet/icons' +import { CustomSnackbarProvider } from './Components/Snackbar' + +function compose(init: React.ReactNode, ...f: ((children: React.ReactNode) => JSX.Element)[]) { + return f.reduceRight((prev, curr) => curr(prev), <>{init}) +} +const identity = (jsx: React.ReactNode) => jsx as JSX.Element + +export interface MaskThemeProvider extends React.PropsWithChildren<{}> { + baseline: boolean + useTheme(): Theme + useMaskIconPalette(theme: Theme): MaskIconPalette + CustomSnackbarOffsetY?: number +} +export function MaskThemeProvider(props: MaskThemeProvider) { + const { children, baseline, useTheme, useMaskIconPalette, CustomSnackbarOffsetY } = props + const theme = useTheme() + const MaskIconPalette = useMaskIconPalette(theme) + + return compose( + children, + (jsx) => {jsx}, + (jsx) => , + (jsx) => ( + + ), + baseline + ? (jsx) => ( + <> + + {jsx} + + ) + : identity, + ) +} diff --git a/packages/theme/src/index.ts b/packages/theme/src/index.ts index a51f9b24b3e3..abca4a92b789 100644 --- a/packages/theme/src/index.ts +++ b/packages/theme/src/index.ts @@ -37,6 +37,7 @@ function MaskTheme(mode: PaletteMode) { } export const MaskLightTheme = MaskTheme('light') export const MaskDarkTheme = MaskTheme('dark') +export * from './ThemeProvider' export * from './makeStyles' export * from './Components' export * from './hooks'