68 lines
1.9 KiB
TypeScript
68 lines
1.9 KiB
TypeScript
import { writable } from 'svelte/store';
|
|
|
|
// Helper function to determine if we're running on the client side (browser) or server side.
|
|
function isClientSide() {
|
|
return typeof window !== "undefined";
|
|
}
|
|
|
|
// Safely get item from localStorage
|
|
function getFromLocalStorage(key, defaultValue) {
|
|
if (isClientSide()) {
|
|
return localStorage.getItem(key)
|
|
? JSON.parse(localStorage.getItem(key))
|
|
: defaultValue;
|
|
}
|
|
return defaultValue;
|
|
}
|
|
|
|
// Safely set item to localStorage
|
|
function setToLocalStorage(key, value) {
|
|
if (isClientSide()) {
|
|
localStorage.setItem(key, JSON.stringify(value));
|
|
}
|
|
}
|
|
|
|
// Define the updated Message interface
|
|
export interface Message {
|
|
text: string;
|
|
timestamp: string;
|
|
sender: string;
|
|
type: string;
|
|
composite?: object | null; // New field
|
|
}
|
|
|
|
|
|
// Load messages from localStorage or set an empty array if not available
|
|
const initialMessages = getFromLocalStorage('chat-messages', []);
|
|
|
|
// Convert the array to a writable store
|
|
export const messages = writable(initialMessages);
|
|
|
|
// Subscribe to messages store to watch for changes and save them to localStorage
|
|
messages.subscribe(currentMessages => {
|
|
setToLocalStorage('chat-messages', currentMessages);
|
|
});
|
|
|
|
|
|
export function createMessage(messageData) {
|
|
const currentDate = new Date().toLocaleString();
|
|
const newMessageObj = {
|
|
text: messageData.text,
|
|
timestamp: currentDate,
|
|
sender: messageData.sender,
|
|
type: messageData.type,
|
|
composite: messageData.composite || null // New field
|
|
};
|
|
messages.update(oldMessages => [...oldMessages, newMessageObj]);
|
|
}
|
|
export function clearMessages() {
|
|
messages.set([]);
|
|
}
|
|
|
|
// Dummy messages
|
|
export const messagesList: Message[] = [
|
|
{ text: "Hello there!", timestamp: new Date().toLocaleString(), sender: "John", type: "text" },
|
|
{ text: "How are you?", timestamp: new Date().toLocaleString(), sender: "Alice", type: "text" },
|
|
// Add more dummy messages here with the timestamp and sender properties
|
|
];
|