import { useState, useEffect, useRef, useCallback } from 'react'; /** * Черновик сообщения с персистентностью в localStorage. * * Текст неотправленного сообщения живёт только в памяти (useState) и пропадает * при перезагрузке страницы (обновление Service Worker после деплоя, редирект * авторизации, дискард вкладки). Хук сохраняет текст по ключу и восстанавливает * при монтировании и при смене ключа (другой чат). Очистка — обычным setValue(''). */ export function usePersistentDraft(storageKey: string): [string, (value: string) => void] { const [value, setValue] = useState(() => { try { return localStorage.getItem(storageKey) ?? ''; } catch { return ''; } }); const keyRef = useRef(storageKey); keyRef.current = storageKey; // Смена чата — восстанавливаем черновик этого чата useEffect(() => { try { setValue(localStorage.getItem(storageKey) ?? ''); } catch { setValue(''); } }, [storageKey]); const set = useCallback((next: string) => { setValue(next); try { if (next) localStorage.setItem(keyRef.current, next); else localStorage.removeItem(keyRef.current); } catch { /* localStorage недоступен (приватный режим и т.п.) */ } }, []); return [value, set]; }