Files
ToBePlayed-Frontend/src/hooks/useSaveAppearance.js
T

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]);
}