mirror of
https://github.com/Frooodle/Stirling-PDF.git
synced 2025-11-16 01:21:16 +01:00
# Description of Changes Refactor user preferences to all be in one service and all stored in localStorage instead of indexeddb. This allows simpler & quicker accessing of them, and ensures that they're all neatly stored in one consistent place instead of spread out over local storage.
57 lines
1.6 KiB
TypeScript
57 lines
1.6 KiB
TypeScript
import React, { createContext, useContext, useState, useCallback } from 'react';
|
|
import { preferencesService, UserPreferences } from '../services/preferencesService';
|
|
|
|
interface PreferencesContextValue {
|
|
preferences: UserPreferences;
|
|
updatePreference: <K extends keyof UserPreferences>(
|
|
key: K,
|
|
value: UserPreferences[K]
|
|
) => void;
|
|
resetPreferences: () => void;
|
|
}
|
|
|
|
const PreferencesContext = createContext<PreferencesContextValue | undefined>(undefined);
|
|
|
|
export const PreferencesProvider: React.FC<{ children: React.ReactNode }> = ({ children }) => {
|
|
const [preferences, setPreferences] = useState<UserPreferences>(() => {
|
|
// Load preferences synchronously on mount
|
|
return preferencesService.getAllPreferences();
|
|
});
|
|
|
|
const updatePreference = useCallback(
|
|
<K extends keyof UserPreferences>(key: K, value: UserPreferences[K]) => {
|
|
preferencesService.setPreference(key, value);
|
|
setPreferences((prev) => ({
|
|
...prev,
|
|
[key]: value,
|
|
}));
|
|
},
|
|
[]
|
|
);
|
|
|
|
const resetPreferences = useCallback(() => {
|
|
preferencesService.clearAllPreferences();
|
|
setPreferences(preferencesService.getAllPreferences());
|
|
}, []);
|
|
|
|
return (
|
|
<PreferencesContext.Provider
|
|
value={{
|
|
preferences,
|
|
updatePreference,
|
|
resetPreferences,
|
|
}}
|
|
>
|
|
{children}
|
|
</PreferencesContext.Provider>
|
|
);
|
|
};
|
|
|
|
export const usePreferences = (): PreferencesContextValue => {
|
|
const context = useContext(PreferencesContext);
|
|
if (!context) {
|
|
throw new Error('usePreferences must be used within a PreferencesProvider');
|
|
}
|
|
return context;
|
|
};
|