AI рефакторинг !
This commit is contained in:
86
src/hook/adapters/localStorageSaveAdapter.ts
Normal file
86
src/hook/adapters/localStorageSaveAdapter.ts
Normal file
@@ -0,0 +1,86 @@
|
||||
import { SaveAdapter } from '../useAutoSave'
|
||||
|
||||
interface SavedLocalStorageData {
|
||||
templateId: string
|
||||
formulaData: Record<string, Record<string, any>>
|
||||
timestamp: string
|
||||
version: number
|
||||
}
|
||||
|
||||
// Ключ для localStorage
|
||||
const getStorageKey = (templateId: string) => {
|
||||
return `formula_data_${templateId}`
|
||||
}
|
||||
|
||||
/**
|
||||
* Адаптер для сохранения в localStorage
|
||||
*/
|
||||
export function createLocalStorageSaveAdapter(templateId: string): SaveAdapter {
|
||||
let versionCounter = 1
|
||||
|
||||
// Инициализируем версию из существующих данных
|
||||
try {
|
||||
const storageKey = getStorageKey(templateId)
|
||||
const savedDataStr = localStorage.getItem(storageKey)
|
||||
if (savedDataStr) {
|
||||
const parsedData: SavedLocalStorageData = JSON.parse(savedDataStr)
|
||||
versionCounter = parsedData.version + 1
|
||||
}
|
||||
} catch (error) {
|
||||
console.warn('⚠️ Ошибка при загрузке данных из localStorage:', error)
|
||||
}
|
||||
|
||||
return {
|
||||
async save(data: Record<string, Record<string, any>>) {
|
||||
// Имитируем задержку API для реалистичности
|
||||
await new Promise(resolve =>
|
||||
setTimeout(resolve, 200 + Math.random() * 300)
|
||||
)
|
||||
|
||||
// Иногда имитируем ошибку (2% вероятность)
|
||||
if (Math.random() < 0.02) {
|
||||
throw new Error('Ошибка записи в хранилище')
|
||||
}
|
||||
|
||||
const savedData: SavedLocalStorageData = {
|
||||
templateId,
|
||||
formulaData: data,
|
||||
timestamp: new Date().toISOString(),
|
||||
version: versionCounter++,
|
||||
}
|
||||
|
||||
const storageKey = getStorageKey(templateId)
|
||||
localStorage.setItem(storageKey, JSON.stringify(savedData))
|
||||
},
|
||||
|
||||
async load() {
|
||||
try {
|
||||
const storageKey = getStorageKey(templateId)
|
||||
const savedDataStr = localStorage.getItem(storageKey)
|
||||
|
||||
if (savedDataStr) {
|
||||
const parsedData: SavedLocalStorageData = JSON.parse(savedDataStr)
|
||||
return parsedData.formulaData
|
||||
}
|
||||
|
||||
return {}
|
||||
} catch (error) {
|
||||
console.error(
|
||||
'❌ Ошибка при загрузке сохраненных данных из localStorage:',
|
||||
error
|
||||
)
|
||||
return {}
|
||||
}
|
||||
},
|
||||
|
||||
async clear() {
|
||||
try {
|
||||
const storageKey = getStorageKey(templateId)
|
||||
localStorage.removeItem(storageKey)
|
||||
versionCounter = 1
|
||||
} catch (error) {
|
||||
console.error('❌ Ошибка при очистке сохраненных данных:', error)
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user