57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Svelte
		
	
	
	
			
		
		
	
	
			57 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Svelte
		
	
	
	
<script context="module" lang="ts">
 | 
						|
  import { persisted } from "svelte-local-storage-store";
 | 
						|
  import { get } from "svelte/store";
 | 
						|
  import type { Chat, Message } from "./Types.svelte";
 | 
						|
 | 
						|
  export const chatsStorage = persisted("chats", [] as Chat[]);
 | 
						|
  export const apiKeyStorage = persisted("apiKey", null as string);
 | 
						|
 | 
						|
  export const addChat = (): number => {
 | 
						|
    const chats = get(chatsStorage);
 | 
						|
 | 
						|
    // Find the max chatId
 | 
						|
    const chatId = chats.reduce((maxId, chat) => Math.max(maxId, chat.id), 0) + 1;
 | 
						|
 | 
						|
    // Add a new chat
 | 
						|
    chats.push({
 | 
						|
      id: chatId,
 | 
						|
      messages: [],
 | 
						|
    });
 | 
						|
    chatsStorage.set(chats);
 | 
						|
    return chatId;
 | 
						|
  };
 | 
						|
 | 
						|
  export const clearChats = () => {
 | 
						|
    chatsStorage.set([]);
 | 
						|
  };
 | 
						|
 | 
						|
  export const addMessage = (chatId: number, message: Message) => {
 | 
						|
    const chats = get(chatsStorage);
 | 
						|
    const chat = chats.find((chat) => chat.id === chatId);
 | 
						|
    chat.messages.push(message);
 | 
						|
    chatsStorage.set(chats);
 | 
						|
  };
 | 
						|
 | 
						|
  export const editMessage = (chatId: number, index: number, newMessage: Message) => {
 | 
						|
    const chats = get(chatsStorage);
 | 
						|
    const chat = chats.find((chat) => chat.id === chatId);
 | 
						|
    chat.messages[index] = newMessage;
 | 
						|
    chat.messages.splice(index + 1); // remove the rest of the messages
 | 
						|
    chatsStorage.set(chats);
 | 
						|
  };
 | 
						|
 | 
						|
  export const clearMessages = (chatId: number) => {
 | 
						|
    const chats = get(chatsStorage);
 | 
						|
    const chat = chats.find((chat) => chat.id === chatId);
 | 
						|
    chat.messages = [];
 | 
						|
    chatsStorage.set(chats);
 | 
						|
  };
 | 
						|
 | 
						|
  export const deleteChat = (chatId: number) => {
 | 
						|
    const chats = get(chatsStorage);
 | 
						|
    const chatIndex = chats.findIndex((chat) => chat.id === chatId);
 | 
						|
    chats.splice(chatIndex, 1);
 | 
						|
    chatsStorage.set(chats);
 | 
						|
  };
 | 
						|
</script>
 |