49 lines
1.2 KiB
TypeScript
49 lines
1.2 KiB
TypeScript
import { SupportedExportFormats } from '@/types/export';
|
|
import { IconFileImport } from '@tabler/icons-react';
|
|
import { useTranslation } from 'next-i18next';
|
|
import { FC } from 'react';
|
|
import { SidebarButton } from '../Sidebar/SidebarButton';
|
|
|
|
interface Props {
|
|
onImport: (data: SupportedExportFormats) => void;
|
|
}
|
|
|
|
export const Import: FC<Props> = ({ onImport }) => {
|
|
const { t } = useTranslation('sidebar');
|
|
return (
|
|
<>
|
|
<input
|
|
id="import-file"
|
|
className="sr-only"
|
|
tabIndex={-1}
|
|
type="file"
|
|
accept=".json"
|
|
onChange={(e) => {
|
|
if (!e.target.files?.length) return;
|
|
|
|
const file = e.target.files[0];
|
|
const reader = new FileReader();
|
|
reader.onload = (e) => {
|
|
let json = JSON.parse(e.target?.result as string);
|
|
onImport(json);
|
|
};
|
|
reader.readAsText(file);
|
|
}}
|
|
/>
|
|
|
|
<SidebarButton
|
|
text={t('Import conversations')}
|
|
icon={<IconFileImport size={18} />}
|
|
onClick={() => {
|
|
const importFile = document.querySelector(
|
|
'#import-file',
|
|
) as HTMLInputElement;
|
|
if (importFile) {
|
|
importFile.click();
|
|
}
|
|
}}
|
|
/>
|
|
</>
|
|
);
|
|
};
|