import { SaveAdapter } from '../useAutoSave' interface SavedLocalStorageData { templateId: string formulaData: Record> 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>) { // Имитируем задержку 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) } }, } }