Files
nahodka-front/src/stores/chatPostStore.js
2026-08-13 00:37:41 +03:00

67 lines
1.8 KiB
JavaScript

const STORAGE_KEY = "nakhodka:chatPosts";
const postByChatId = new Map();
/** Восстанавливает кеш постов из localStorage (выживает при перезагрузке страницы). */
function loadFromStorage() {
try {
const raw = localStorage.getItem(STORAGE_KEY);
if (!raw) return;
const obj = JSON.parse(raw);
for (const [chatId, post] of Object.entries(obj)) {
postByChatId.set(chatId, post);
}
} catch (e) {
// Повреждённый/пустой storage игнорируем
}
}
/** Пишет текущий кеш постов в localStorage. */
function persist() {
try {
const obj = {};
postByChatId.forEach((post, chatId) => {
obj[chatId] = post;
});
localStorage.setItem(STORAGE_KEY, JSON.stringify(obj));
} catch (e) {
// Недостаточно места / приватный режим — игнорируем
}
}
loadFromStorage();
export function setPostForChat(chatId, post) {
postByChatId.set(chatId, post);
persist();
}
export function getPostForChat(chatId) {
return postByChatId.get(chatId);
}
export function cachePostsFromChats(chats) {
for (const chat of chats) {
if (chat.post) {
postByChatId.set(chat.id, chat.post);
}
}
if (chats.length) persist();
}
/** Удаляет запись при удалении конкретного чата. */
export function removePostForChat(chatId) {
postByChatId.delete(chatId);
persist();
}
/** Полностью очищает кеш — вызывать при logout(), чтобы не хранить данные предыдущей сессии. */
export function clearPostCache() {
postByChatId.clear();
try {
localStorage.removeItem(STORAGE_KEY);
} catch (e) {
// ignore
}
}