Implement Settings context

This commit is contained in:
2024-10-03 22:20:43 +02:00
parent 93e675e0c7
commit d21233a67f
5 changed files with 206 additions and 106 deletions

View File

@@ -0,0 +1,66 @@
import React, { createContext, useState, useContext, useEffect } from 'react';
import { fetchUserSettings, saveUserSettings } from '../services/api';
const SettingsContext = createContext();
export const useSettings = () => {
return useContext(SettingsContext);
};
export const SettingsProvider = ({ children }) => {
const [settings, setSettings] = useState({
theme: 'light',
autoSave: false,
gitEnabled: false,
gitUrl: '',
gitUser: '',
gitToken: '',
gitAutoCommit: false,
gitCommitMsgTemplate: '',
});
const [loading, setLoading] = useState(true);
useEffect(() => {
const loadSettings = async () => {
try {
const userSettings = await fetchUserSettings(1); // Assuming user ID 1 for now
setSettings(userSettings.settings);
} catch (error) {
console.error('Failed to load user settings:', error);
} finally {
setLoading(false);
}
};
loadSettings();
}, []);
const updateSettings = async (newSettings) => {
try {
await saveUserSettings({
userId: 1, // Assuming user ID 1 for now
settings: newSettings,
});
setSettings(newSettings);
} catch (error) {
console.error('Failed to save settings:', error);
throw error;
}
};
const updateTheme = (newTheme) => {
setSettings((prevSettings) => ({
...prevSettings,
theme: newTheme,
}));
};
return (
<SettingsContext.Provider
value={{ settings, updateSettings, updateTheme, loading }}
>
{children}
</SettingsContext.Provider>
);
};