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';