From 5725024d807da0a71dded041e0d2e5784266ad57 Mon Sep 17 00:00:00 2001 From: Mckay Wrigley Date: Tue, 18 Apr 2023 16:00:20 -0600 Subject: [PATCH] import/export add instead of replace (#601) * change search language * add to import/export * fix log --- .../Chatbar/components/ChatbarSettings.tsx | 8 +---- components/Sidebar/Sidebar.tsx | 2 +- utils/app/importExport.ts | 34 ++++++++++++++----- 3 files changed, 28 insertions(+), 16 deletions(-) diff --git a/components/Chatbar/components/ChatbarSettings.tsx b/components/Chatbar/components/ChatbarSettings.tsx index 1ca84a6..4a7f9fb 100644 --- a/components/Chatbar/components/ChatbarSettings.tsx +++ b/components/Chatbar/components/ChatbarSettings.tsx @@ -1,9 +1,4 @@ -import { - IconFileExport, - IconMoon, - IconSettings, - IconSun, -} from '@tabler/icons-react'; +import { IconFileExport, IconSettings } from '@tabler/icons-react'; import { useContext, useState } from 'react'; import { useTranslation } from 'next-i18next'; @@ -38,7 +33,6 @@ export const ChatbarSettings = () => { handleClearConversations, handleImportConversations, handleExportData, - handleApiKeyChange, } = useContext(ChatbarContext); diff --git a/components/Sidebar/Sidebar.tsx b/components/Sidebar/Sidebar.tsx index e8300a6..bf8359d 100644 --- a/components/Sidebar/Sidebar.tsx +++ b/components/Sidebar/Sidebar.tsx @@ -79,7 +79,7 @@ const Sidebar = ({ diff --git a/utils/app/importExport.ts b/utils/app/importExport.ts index b50c7ef..d394e3c 100644 --- a/utils/app/importExport.ts +++ b/utils/app/importExport.ts @@ -1,3 +1,4 @@ +import { Conversation } from '@/types/chat'; import { ExportFormatV1, ExportFormatV2, @@ -6,6 +7,8 @@ import { LatestExportFormat, SupportedExportFormats, } from '@/types/export'; +import { FolderInterface } from '@/types/folder'; +import { Prompt } from '@/types/prompt'; import { cleanConversationHistory } from './clean'; @@ -109,18 +112,33 @@ export const exportData = () => { export const importData = ( data: SupportedExportFormats, ): LatestExportFormat => { - const cleanedData = cleanData(data); - const { history, folders, prompts } = cleanedData; + const { history, folders, prompts } = cleanData(data); - const conversations = history; - localStorage.setItem('conversationHistory', JSON.stringify(conversations)); + const oldConversations = localStorage.getItem('conversationHistory'); + const oldConversationsParsed = oldConversations + ? JSON.parse(oldConversations) + : []; + const newHistory: Conversation[] = [...oldConversationsParsed, ...history]; + localStorage.setItem('conversationHistory', JSON.stringify(newHistory)); localStorage.setItem( 'selectedConversation', - JSON.stringify(conversations[conversations.length - 1]), + JSON.stringify(newHistory[newHistory.length - 1]), ); - localStorage.setItem('folders', JSON.stringify(folders)); - localStorage.setItem('prompts', JSON.stringify(prompts)); + const oldFolders = localStorage.getItem('folders'); + const oldFoldersParsed = oldFolders ? JSON.parse(oldFolders) : []; + const newFolders: FolderInterface[] = [...oldFoldersParsed, ...folders]; + localStorage.setItem('folders', JSON.stringify(newFolders)); - return cleanedData; + const oldPrompts = localStorage.getItem('prompts'); + const oldPromptsParsed = oldPrompts ? JSON.parse(oldPrompts) : []; + const newPrompts: Prompt[] = [...oldPromptsParsed, ...prompts]; + localStorage.setItem('prompts', JSON.stringify(newPrompts)); + + return { + version: 4, + history: newHistory.map((e, idx) => ({ ...e, id: `${idx}` })), + folders: newFolders.map((e, idx) => ({ ...e, id: `${idx}` })), + prompts: newPrompts.map((e, idx) => ({ ...e, id: `${idx}` })), + }; };