fix: remove mui theme provider (#2055)

This commit is contained in:
Himself65
2023-04-20 14:31:54 -05:00
committed by GitHub
parent d24c43e750
commit 0a0f825a15
9 changed files with 66 additions and 138 deletions
@@ -1,4 +1,9 @@
import { MenuItem, MuiClickAwayListener, PureMenu } from '@affine/component';
import {
baseTheme,
MenuItem,
MuiClickAwayListener,
PureMenu,
} from '@affine/component';
import { useTranslation } from '@affine/i18n';
import {
MoreVerticalIcon,
@@ -7,7 +12,6 @@ import {
PlusIcon,
} from '@blocksuite/icons';
import type { PageMeta } from '@blocksuite/store';
import { useTheme } from '@mui/material';
import { useMemo, useRef, useState } from 'react';
import { useBlockSuiteMetaHelper } from '../../../../hooks/affine/use-block-suite-meta-helper';
@@ -39,9 +43,6 @@ export const OperationButton = ({
onMenuClose,
onRename,
}: OperationButtonProps) => {
const {
zIndex: { modal: modalIndex },
} = useTheme();
const { t } = useTranslation();
const timer = useRef<ReturnType<typeof setTimeout>>();
@@ -49,7 +50,7 @@ export const OperationButton = ({
const [operationMenuOpen, setOperationMenuOpen] = useState(false);
const [pinboardMenuOpen, setPinboardMenuOpen] = useState(false);
const [confirmModalOpen, setConfirmModalOpen] = useState(false);
const menuIndex = useMemo(() => modalIndex + 1, [modalIndex]);
const menuIndex = useMemo(() => parseInt(baseTheme.zIndexModal) + 1, []);
const { removeToTrash } = useBlockSuiteMetaHelper(blockSuiteWorkspace);
return (
@@ -62,7 +62,7 @@ export const StyledCard = styled('div')<{
...displayFlex('flex-start', 'flex-start'),
marginBottom: '24px',
transition: 'background .2s',
background: theme.palette.mode === 'light' ? '#FFF' : '#2C2C2C',
background: 'var(--affine-background-primary-color)',
':hover': {
background: 'var(--affine-hover-color)',
'.add-icon': {
@@ -41,28 +41,6 @@ export const StyleWorkspaceTitle = styled('div')(({ theme }) => {
};
});
export const StyledCard = styled('div')<{
active?: boolean;
}>(({ theme, active }) => {
const borderColor = active ? 'var(--affine-primary-color)' : 'transparent';
return {
width: '310px',
height: '124px',
cursor: 'pointer',
padding: '16px',
boxShadow: '0px 0px 8px rgba(0, 0, 0, 0.1)',
borderRadius: '12px',
border: `1px solid ${borderColor}`,
...displayFlex('flex-start', 'flex-start'),
marginBottom: '24px',
transition: 'background .2s',
background: theme.palette.mode === 'light' ? '#FFF' : '#2C2C2C',
':hover': {
background: 'var(--affine-hover-color)',
},
};
});
export const StyledCreateWorkspaceCard = styled('div')(({ theme }) => {
return {
width: '310px',
+1
View File
@@ -1,4 +1,5 @@
import '@affine/component/theme/global.css';
import '@affine/component/theme/theme.css';
import { config, setupGlobal } from '@affine/env';
import { createI18n, I18nextProvider } from '@affine/i18n';
+3 -68
View File
@@ -1,72 +1,7 @@
import type {
AffineCssVariables,
AffineTheme,
ThemeProviderProps,
} from '@affine/component';
import { AffineMuiThemeProvider, getTheme, muiThemes } from '@affine/component';
import { GlobalStyles } from '@mui/material';
import kebabCase from 'kebab-case';
import { ThemeProvider as NextThemeProvider, useTheme } from 'next-themes';
import type { ThemeProviderProps } from '@affine/component';
import { ThemeProvider as NextThemeProvider } from 'next-themes';
import type { PropsWithChildren } from 'react';
import type React from 'react';
import { memo, useEffect, useMemo, useState } from 'react';
import { useCurrentMode } from '../hooks/current/use-current-mode';
const CssVariablesInjector = memo<{
theme: AffineTheme;
}>(function ThemeInjector({ theme }) {
return (
<GlobalStyles
styles={{
// '#__next': {
// ...globalThemeVariables(themeStyle),
// },
':root': {
...Object.entries(theme).reduce((variables, [key, value]) => {
variables[
`--affine-${kebabCase(key)}` as keyof AffineCssVariables
] = value;
return variables;
}, {} as AffineCssVariables),
},
body: {
color: 'var(--affine-text-primary-colorr)',
},
html: {
fontFamily: theme.fontFamily,
fontSize: theme.fontBase,
lineHeight: theme.lineHeight,
},
}}
/>
);
});
const ThemeProviderInner = memo<React.PropsWithChildren>(
function ThemeProviderInner({ children }) {
const { resolvedTheme: theme } = useTheme();
const editorMode = useCurrentMode();
// SSR will always render the light theme, so we need to defer the theme if user selected dark mode
const [deferTheme, setDeferTheme] = useState<'light' | 'dark'>('light');
const themeStyle = useMemo(
() => getTheme(deferTheme, editorMode),
[deferTheme, editorMode]
);
useEffect(() => {
window.apis?.onThemeChange(theme === 'dark' ? 'dark' : 'light');
setDeferTheme(theme === 'dark' ? 'dark' : 'light');
}, [theme]);
return (
<AffineMuiThemeProvider theme={muiThemes}>
<CssVariablesInjector theme={themeStyle} />
{children}
</AffineMuiThemeProvider>
);
}
);
const themes = ['dark', 'light'];
@@ -76,7 +11,7 @@ export const ThemeProvider = ({
}: PropsWithChildren<ThemeProviderProps>) => {
return (
<NextThemeProvider themes={themes} enableSystem={true} {...props}>
<ThemeProviderInner>{children}</ThemeProviderInner>
{children}
</NextThemeProvider>
);
};