68 lines
1.9 KiB
TypeScript
68 lines
1.9 KiB
TypeScript
import { UserSettings, ChatSession, AppLanguage } from "../types";
|
|
import { DEFAULT_LANGUAGE } from "../constants";
|
|
|
|
const KEYS = {
|
|
SETTINGS: "sociopal_settings",
|
|
SESSIONS: "sociopal_sessions",
|
|
CURRENT_SESSION: "sociopal_current_session_id"
|
|
};
|
|
|
|
export const loadSettings = (): UserSettings => {
|
|
const stored = localStorage.getItem(KEYS.SETTINGS);
|
|
if (stored) return JSON.parse(stored);
|
|
return {
|
|
language: DEFAULT_LANGUAGE,
|
|
theme: 'light'
|
|
};
|
|
};
|
|
|
|
export const saveSettings = (settings: UserSettings) => {
|
|
localStorage.setItem(KEYS.SETTINGS, JSON.stringify(settings));
|
|
};
|
|
|
|
export const loadSessions = (): ChatSession[] => {
|
|
const stored = localStorage.getItem(KEYS.SESSIONS);
|
|
return stored ? JSON.parse(stored) : [];
|
|
};
|
|
|
|
export const saveSessions = (sessions: ChatSession[]) => {
|
|
localStorage.setItem(KEYS.SESSIONS, JSON.stringify(sessions));
|
|
};
|
|
|
|
export const exportData = () => {
|
|
const data = {
|
|
settings: loadSettings(),
|
|
sessions: loadSessions(),
|
|
timestamp: Date.now()
|
|
};
|
|
const blob = new Blob([JSON.stringify(data, null, 2)], { type: "application/json" });
|
|
const url = URL.createObjectURL(blob);
|
|
const a = document.createElement('a');
|
|
a.href = url;
|
|
a.download = `sociopal_backup_${new Date().toISOString().slice(0, 10)}.json`;
|
|
a.click();
|
|
};
|
|
|
|
export const importData = async (file: File): Promise<boolean> => {
|
|
return new Promise((resolve) => {
|
|
const reader = new FileReader();
|
|
reader.onload = (e) => {
|
|
try {
|
|
const data = JSON.parse(e.target?.result as string);
|
|
if (data.settings) saveSettings(data.settings);
|
|
if (data.sessions) saveSessions(data.sessions);
|
|
resolve(true);
|
|
} catch (err) {
|
|
console.error("Import failed", err);
|
|
resolve(false);
|
|
}
|
|
};
|
|
reader.readAsText(file);
|
|
});
|
|
};
|
|
|
|
export const clearData = () => {
|
|
localStorage.removeItem(KEYS.SETTINGS);
|
|
localStorage.removeItem(KEYS.SESSIONS);
|
|
localStorage.removeItem(KEYS.CURRENT_SESSION);
|
|
}; |