mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-04-22 04:58:38 +00:00
- Rename React components/pages/utilities that contain JSX to `.jsx` across `web/src` - Update import paths and re-exports to match new `.jsx` extensions - Fix Vite entry by switching `web/index.html` from `/src/index.js` to `/src/index.jsx` - Verified remaining `.js` files are plain JS (hooks/helpers/constants) and do not require JSX - No runtime behavior changes; extension and reference alignment only Context: Resolves the Vite pre-transform error caused by the stale `/src/index.js` entry after migrating to `.jsx`.
56 lines
1.7 KiB
JavaScript
56 lines
1.7 KiB
JavaScript
/*
|
|
Copyright (C) 2025 QuantumNous
|
|
|
|
This program is free software: you can redistribute it and/or modify
|
|
it under the terms of the GNU Affero General Public License as
|
|
published by the Free Software Foundation, either version 3 of the
|
|
License, or (at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU Affero General Public License for more details.
|
|
|
|
You should have received a copy of the GNU Affero General Public License
|
|
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
|
|
|
For commercial licensing, please contact support@quantumnous.com
|
|
*/
|
|
|
|
import { createContext, useCallback, useContext, useState } from 'react';
|
|
|
|
const ThemeContext = createContext(null);
|
|
export const useTheme = () => useContext(ThemeContext);
|
|
|
|
const SetThemeContext = createContext(null);
|
|
export const useSetTheme = () => useContext(SetThemeContext);
|
|
|
|
export const ThemeProvider = ({ children }) => {
|
|
const [theme, _setTheme] = useState(() => {
|
|
try {
|
|
return localStorage.getItem('theme-mode') || null;
|
|
} catch {
|
|
return null;
|
|
}
|
|
});
|
|
|
|
const setTheme = useCallback((input) => {
|
|
_setTheme(input ? 'dark' : 'light');
|
|
|
|
const body = document.body;
|
|
if (!input) {
|
|
body.removeAttribute('theme-mode');
|
|
localStorage.setItem('theme-mode', 'light');
|
|
} else {
|
|
body.setAttribute('theme-mode', 'dark');
|
|
localStorage.setItem('theme-mode', 'dark');
|
|
}
|
|
}, []);
|
|
|
|
return (
|
|
<SetThemeContext.Provider value={setTheme}>
|
|
<ThemeContext.Provider value={theme}>{children}</ThemeContext.Provider>
|
|
</SetThemeContext.Provider>
|
|
);
|
|
};
|