import/export add instead of replace (#601)

* change search language

* add to import/export

* fix log
This commit is contained in:
Mckay Wrigley 2023-04-18 16:00:20 -06:00 committed by GitHub
parent b964188d0b
commit 5725024d80
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 16 deletions

View File

@ -1,9 +1,4 @@
import { import { IconFileExport, IconSettings } from '@tabler/icons-react';
IconFileExport,
IconMoon,
IconSettings,
IconSun,
} from '@tabler/icons-react';
import { useContext, useState } from 'react'; import { useContext, useState } from 'react';
import { useTranslation } from 'next-i18next'; import { useTranslation } from 'next-i18next';
@ -38,7 +33,6 @@ export const ChatbarSettings = () => {
handleClearConversations, handleClearConversations,
handleImportConversations, handleImportConversations,
handleExportData, handleExportData,
handleApiKeyChange, handleApiKeyChange,
} = useContext(ChatbarContext); } = useContext(ChatbarContext);

View File

@ -79,7 +79,7 @@ const Sidebar = <T,>({
</button> </button>
</div> </div>
<Search <Search
placeholder={t('Search prompts...') || ''} placeholder={t('Search...') || ''}
searchTerm={searchTerm} searchTerm={searchTerm}
onSearch={handleSearchTerm} onSearch={handleSearchTerm}
/> />

View File

@ -1,3 +1,4 @@
import { Conversation } from '@/types/chat';
import { import {
ExportFormatV1, ExportFormatV1,
ExportFormatV2, ExportFormatV2,
@ -6,6 +7,8 @@ import {
LatestExportFormat, LatestExportFormat,
SupportedExportFormats, SupportedExportFormats,
} from '@/types/export'; } from '@/types/export';
import { FolderInterface } from '@/types/folder';
import { Prompt } from '@/types/prompt';
import { cleanConversationHistory } from './clean'; import { cleanConversationHistory } from './clean';
@ -109,18 +112,33 @@ export const exportData = () => {
export const importData = ( export const importData = (
data: SupportedExportFormats, data: SupportedExportFormats,
): LatestExportFormat => { ): LatestExportFormat => {
const cleanedData = cleanData(data); const { history, folders, prompts } = cleanData(data);
const { history, folders, prompts } = cleanedData;
const conversations = history; const oldConversations = localStorage.getItem('conversationHistory');
localStorage.setItem('conversationHistory', JSON.stringify(conversations)); const oldConversationsParsed = oldConversations
? JSON.parse(oldConversations)
: [];
const newHistory: Conversation[] = [...oldConversationsParsed, ...history];
localStorage.setItem('conversationHistory', JSON.stringify(newHistory));
localStorage.setItem( localStorage.setItem(
'selectedConversation', 'selectedConversation',
JSON.stringify(conversations[conversations.length - 1]), JSON.stringify(newHistory[newHistory.length - 1]),
); );
localStorage.setItem('folders', JSON.stringify(folders)); const oldFolders = localStorage.getItem('folders');
localStorage.setItem('prompts', JSON.stringify(prompts)); 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}` })),
};
}; };