diff --git a/json-server/db.json b/json-server/db.json index c72a3ee..2e85eb6 100644 --- a/json-server/db.json +++ b/json-server/db.json @@ -762,7 +762,7 @@ }, "avatar": "https://mobimg.b-cdn.net/v3/fetch/22/2207633df03a819cd72889249c8361a8.jpeg?w=1470&r=0.5625", "jsonSettings": { - "theme": "app_light_theme", + "theme": "app_dark_theme", "isFirstVisit": true, "settingsPageHasBeenOpen": false, "isArticlesPageWasOpened": true diff --git a/src/app/App.tsx b/src/app/App.tsx index 33d14ad..acc92d3 100644 --- a/src/app/App.tsx +++ b/src/app/App.tsx @@ -9,7 +9,7 @@ import { getUserInited, initAuthData } from '@/entities/User'; import { useTheme } from '@/shared/lib/hook/useTheme/useTheme'; import { useAppDispatch } from '@/shared/lib/hook/useAppDispatch/useAppDispatch'; import { MainLayout } from '@/shared/layouts/MainLayout'; -import { PageLoader } from '@/features/PageLoader'; +import { AppLoaderLayout } from '@/shared/layouts/AppLoaderLayout'; function App() { const { theme } = useTheme(); @@ -21,7 +21,11 @@ function App() { }, [dispatch]); if (!inited) { - return ; + return ( +
+ +
+ ); } return ( diff --git a/src/app/providers/ThemeProvider/ui/ThemeProvider.tsx b/src/app/providers/ThemeProvider/ui/ThemeProvider.tsx index aa07375..b162e9c 100644 --- a/src/app/providers/ThemeProvider/ui/ThemeProvider.tsx +++ b/src/app/providers/ThemeProvider/ui/ThemeProvider.tsx @@ -2,12 +2,15 @@ import React, { ReactNode, useEffect, useMemo, useState } from 'react'; import { ThemeContext } from '@/shared/lib/context/ThemeContext'; import { Theme } from '@/shared/const/theme'; import { useJsonSettings } from '@/entities/User'; +import { LOCAL_STORAGE_THEME_KEY } from '@/shared/const/localstorage'; interface ThemeProviderProps { initialTheme?: Theme; children?: ReactNode; } +const fallbackTheme = localStorage.getItem(LOCAL_STORAGE_THEME_KEY) as Theme; + const ThemeProvider = (props: ThemeProviderProps) => { const { initialTheme, children } = props; @@ -15,7 +18,7 @@ const ThemeProvider = (props: ThemeProviderProps) => { const [isThemeInited, setIsThemeInited] = useState(false); const [theme, setTheme] = useState( - initialTheme || defaultTheme || Theme.LIGHT, + initialTheme || fallbackTheme || defaultTheme || Theme.LIGHT, ); useEffect(() => { @@ -28,6 +31,7 @@ const ThemeProvider = (props: ThemeProviderProps) => { // for scroll theme changes useEffect(() => { document.body.className = theme; + localStorage.setItem(LOCAL_STORAGE_THEME_KEY, theme); }, [theme]); const defaultProps = useMemo( diff --git a/src/shared/layouts/AppLoaderLayout/AppLoaderLayout.module.scss b/src/shared/layouts/AppLoaderLayout/AppLoaderLayout.module.scss new file mode 100644 index 0000000..d4babea --- /dev/null +++ b/src/shared/layouts/AppLoaderLayout/AppLoaderLayout.module.scss @@ -0,0 +1,3 @@ +.header { + padding: 16px; +} diff --git a/src/shared/layouts/AppLoaderLayout/AppLoaderLayout.tsx b/src/shared/layouts/AppLoaderLayout/AppLoaderLayout.tsx new file mode 100644 index 0000000..24e508e --- /dev/null +++ b/src/shared/layouts/AppLoaderLayout/AppLoaderLayout.tsx @@ -0,0 +1,26 @@ +import { memo } from 'react'; +import { Skeleton } from '@/shared/ui/redesigned/Skeleton'; +import { HStack, VStack } from '@/shared/ui/redesigned/Stack'; +import { MainLayout } from '../MainLayout'; +import cls from './AppLoaderLayout.module.scss'; + +export const AppLoaderLayout = memo(() => ( + + + + } + content={ + + + + + + + + + } + sidebar={} + /> +)); diff --git a/src/shared/layouts/AppLoaderLayout/index.ts b/src/shared/layouts/AppLoaderLayout/index.ts new file mode 100644 index 0000000..905baf0 --- /dev/null +++ b/src/shared/layouts/AppLoaderLayout/index.ts @@ -0,0 +1 @@ +export { AppLoaderLayout } from './AppLoaderLayout';