|
import type { Message } from 'ai'; |
|
import { toast } from 'react-toastify'; |
|
import { ImportFolderButton } from '~/components/chat/ImportFolderButton'; |
|
|
|
export function ImportButtons(importChat: ((description: string, messages: Message[]) => Promise<void>) | undefined) { |
|
return ( |
|
<div className="flex flex-col items-center justify-center w-auto"> |
|
<input |
|
type="file" |
|
id="chat-import" |
|
className="hidden" |
|
accept=".json" |
|
onChange={async (e) => { |
|
const file = e.target.files?.[0]; |
|
|
|
if (file && importChat) { |
|
try { |
|
const reader = new FileReader(); |
|
|
|
reader.onload = async (e) => { |
|
try { |
|
const content = e.target?.result as string; |
|
const data = JSON.parse(content); |
|
|
|
if (!Array.isArray(data.messages)) { |
|
toast.error('Invalid chat file format'); |
|
} |
|
|
|
await importChat(data.description, data.messages); |
|
toast.success('Chat imported successfully'); |
|
} catch (error: unknown) { |
|
if (error instanceof Error) { |
|
toast.error('Failed to parse chat file: ' + error.message); |
|
} else { |
|
toast.error('Failed to parse chat file'); |
|
} |
|
} |
|
}; |
|
reader.onerror = () => toast.error('Failed to read chat file'); |
|
reader.readAsText(file); |
|
} catch (error) { |
|
toast.error(error instanceof Error ? error.message : 'Failed to import chat'); |
|
} |
|
e.target.value = ''; // Reset file input |
|
} else { |
|
toast.error('Something went wrong'); |
|
} |
|
}} |
|
/> |
|
<div className="flex flex-col items-center gap-4 max-w-2xl text-center"> |
|
<div className="flex gap-2"> |
|
<button |
|
onClick={() => { |
|
const input = document.getElementById('chat-import'); |
|
input?.click(); |
|
}} |
|
className="px-4 py-2 rounded-lg border border-bolt-elements-borderColor bg-bolt-elements-prompt-background text-bolt-elements-textPrimary hover:bg-bolt-elements-background-depth-3 transition-all flex items-center gap-2" |
|
> |
|
<div className="i-ph:upload-simple" /> |
|
Import Chat |
|
</button> |
|
<ImportFolderButton |
|
importChat={importChat} |
|
className="px-4 py-2 rounded-lg border border-bolt-elements-borderColor bg-bolt-elements-prompt-background text-bolt-elements-textPrimary hover:bg-bolt-elements-background-depth-3 transition-all flex items-center gap-2" |
|
/> |
|
</div> |
|
</div> |
|
</div> |
|
); |
|
} |
|
|