58 lines
1.5 KiB
JavaScript
58 lines
1.5 KiB
JavaScript
/**
|
|
* Gestionnaire d'état pour le localStorage
|
|
*/
|
|
const AppState = {
|
|
STORAGE_KEY: 'portfolio_contact_form',
|
|
EXCLUDED_FIELDS: ['csrf_token', 'password', 'recaptcha_token'],
|
|
|
|
isStorageAvailable() {
|
|
try {
|
|
const test = '__storage_test__';
|
|
localStorage.setItem(test, test);
|
|
localStorage.removeItem(test);
|
|
return true;
|
|
} catch (e) {
|
|
return false;
|
|
}
|
|
},
|
|
|
|
saveFormData(data) {
|
|
if (!this.isStorageAvailable()) return;
|
|
|
|
try {
|
|
const filteredData = {};
|
|
Object.keys(data).forEach((key) => {
|
|
if (!this.EXCLUDED_FIELDS.includes(key)) {
|
|
filteredData[key] = data[key];
|
|
}
|
|
});
|
|
|
|
localStorage.setItem(this.STORAGE_KEY, JSON.stringify(filteredData));
|
|
} catch (e) {
|
|
console.warn('Impossible de sauvegarder dans localStorage:', e);
|
|
}
|
|
},
|
|
|
|
getFormData() {
|
|
if (!this.isStorageAvailable()) return null;
|
|
|
|
try {
|
|
const data = localStorage.getItem(this.STORAGE_KEY);
|
|
return data ? JSON.parse(data) : null;
|
|
} catch (e) {
|
|
console.warn('Impossible de charger depuis localStorage:', e);
|
|
return null;
|
|
}
|
|
},
|
|
|
|
clearFormData() {
|
|
if (!this.isStorageAvailable()) return;
|
|
|
|
try {
|
|
localStorage.removeItem(this.STORAGE_KEY);
|
|
} catch (e) {
|
|
// Silencieux
|
|
}
|
|
}
|
|
};
|