Skip to content

Commit e615d2b

Browse files
committed
Merge branch 'refactor/frontend-structure' into develop
2 parents b5a86e2 + fc0bd91 commit e615d2b

File tree

129 files changed

+8522
-3636
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

129 files changed

+8522
-3636
lines changed

apps/frontend/src-temp/App.tsx

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
/**
2+
* @file App.tsx
3+
* @description Root application component. Manages global state (theme, language)
4+
* and base routing using react-router-dom.
5+
* * @author serjimen
6+
* @date 2026-03-03
7+
* @version 1.2.0
8+
*/
9+
10+
import { useState, useEffect, useCallback } from 'react';
11+
import { Routes, Route } from 'react-router-dom';
12+
import type { JSX } from 'react';
13+
14+
// Pages
15+
import { MainPage } from './pages/mainpage/MainPage';
16+
import { AuthPage } from './pages/authpage/AuthPage';
17+
18+
// Types
19+
import type { LanguageCode } from './components/navbar/Navbar.types';
20+
21+
// =============================================================================
22+
// CONSTANTS & CONFIGURATION
23+
// =============================================================================
24+
25+
const STORAGE_KEY_THEME = 'prismatica-dark-mode';
26+
const MEDIA_QUERY_DARK_MODE = '(prefers-color-scheme: dark)';
27+
const THEME_ATTRIBUTE = 'data-theme';
28+
29+
// =============================================================================
30+
// UTILITY FUNCTIONS
31+
// =============================================================================
32+
33+
const getInitialDarkMode = (): boolean => {
34+
try {
35+
const savedPref = localStorage.getItem(STORAGE_KEY_THEME);
36+
if (savedPref !== null) return JSON.parse(savedPref) as boolean;
37+
return window.matchMedia(MEDIA_QUERY_DARK_MODE).matches;
38+
} catch {
39+
return false;
40+
}
41+
};
42+
43+
const persistThemePreference = (isDarkMode: boolean): void => {
44+
try {
45+
localStorage.setItem(STORAGE_KEY_THEME, JSON.stringify(isDarkMode));
46+
} catch {
47+
/* ignore */
48+
}
49+
};
50+
51+
// =============================================================================
52+
// COMPONENT
53+
// =============================================================================
54+
55+
export default function App(): JSX.Element {
56+
// ---------------------------------------------------------------------------
57+
// STATE
58+
// ---------------------------------------------------------------------------
59+
60+
const [isDarkMode, setIsDarkMode] = useState<boolean>(getInitialDarkMode);
61+
const [currentLanguage, setCurrentLanguage] = useState<LanguageCode>('ES');
62+
63+
// ---------------------------------------------------------------------------
64+
// SIDE EFFECTS
65+
// ---------------------------------------------------------------------------
66+
67+
useEffect(() => {
68+
document.documentElement.setAttribute(
69+
THEME_ATTRIBUTE,
70+
isDarkMode ? 'dark' : 'light',
71+
);
72+
persistThemePreference(isDarkMode);
73+
}, [isDarkMode]);
74+
75+
// ---------------------------------------------------------------------------
76+
// EVENT HANDLERS
77+
// ---------------------------------------------------------------------------
78+
79+
const handleToggleTheme = useCallback((): void => {
80+
setIsDarkMode((prev) => !prev);
81+
}, []);
82+
83+
const handleLanguageChange = useCallback((language: LanguageCode): void => {
84+
setCurrentLanguage(language);
85+
}, []);
86+
87+
// ---------------------------------------------------------------------------
88+
// RENDER (Routing)
89+
// ---------------------------------------------------------------------------
90+
91+
return (
92+
<Routes>
93+
<Route
94+
path="/"
95+
element={
96+
<MainPage
97+
isDarkMode={isDarkMode}
98+
onToggleTheme={handleToggleTheme}
99+
currentLanguage={currentLanguage}
100+
onLanguageChange={handleLanguageChange}
101+
/>
102+
}
103+
/>
104+
<Route
105+
path="/auth"
106+
element={
107+
<AuthPage
108+
isDarkMode={isDarkMode}
109+
onToggleTheme={handleToggleTheme}
110+
currentLanguage={currentLanguage}
111+
onLanguageChange={handleLanguageChange}
112+
/>
113+
}
114+
/>
115+
</Routes>
116+
);
117+
}

apps/frontend/src/components/authforms/AuthForms.tsx renamed to apps/frontend/src-temp/components/authforms/AuthForms.tsx

File renamed without changes.

apps/frontend/src/components/authforms/AuthForms.types.tsx renamed to apps/frontend/src-temp/components/authforms/AuthForms.types.tsx

File renamed without changes.
File renamed without changes.
File renamed without changes.

apps/frontend/src/components/herosection/HeroSection.constants.ts renamed to apps/frontend/src-temp/components/herosection/HeroSection.constants.ts

File renamed without changes.

apps/frontend/src/components/herosection/HeroSection.tsx renamed to apps/frontend/src-temp/components/herosection/HeroSection.tsx

File renamed without changes.

apps/frontend/src/components/herosection/HeroSection.types.ts renamed to apps/frontend/src-temp/components/herosection/HeroSection.types.ts

File renamed without changes.
File renamed without changes.

apps/frontend/src/components/imageslider/ImageSlider.tsx renamed to apps/frontend/src-temp/components/imageslider/ImageSlider.tsx

File renamed without changes.

0 commit comments

Comments
 (0)