Public Access
36 lines
1.2 KiB
JavaScript
36 lines
1.2 KiB
JavaScript
import {useCallback} from 'react';
|
|
import {useTranslation} from 'react-i18next';
|
|
import {toast} from 'sonner';
|
|
import {usePreferences} from '../context/PreferencesContext.jsx';
|
|
import useSessionExpired from './useSessionExpired.js';
|
|
|
|
/**
|
|
* Returns `save(changes)`: changeAppearance plus the error messages and the session end on a 401. Resolves to
|
|
* true when saved.
|
|
*/
|
|
export default function useSaveAppearance() {
|
|
const {t} = useTranslation();
|
|
const {changeAppearance} = usePreferences();
|
|
const expireSession = useSessionExpired();
|
|
|
|
return useCallback(async (changes) => {
|
|
try {
|
|
const response = await changeAppearance(changes);
|
|
if (!response) return false;
|
|
if (response.status === 401) {
|
|
expireSession();
|
|
return false;
|
|
}
|
|
if (!response.ok) {
|
|
toast.error(t('SETTINGS.ERROR_SAVE'));
|
|
return false;
|
|
}
|
|
return true;
|
|
} catch (err) {
|
|
console.error('Appearance save error:', err);
|
|
toast.error(t('INFO.ERROR.NETWORK_FAILURE'));
|
|
return false;
|
|
}
|
|
}, [changeAppearance, expireSession, t]);
|
|
}
|