AI рефакторинг !

This commit is contained in:
2025-07-21 18:19:18 +03:00
parent 5737e37386
commit 47e0c7f81c
20 changed files with 1262 additions and 392 deletions

View 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)
}
},
}
}