| import { IconFileImport } from '@tabler/icons-react'; |
| import { FC } from 'react'; |
|
|
| import { useTranslation } from 'next-i18next'; |
|
|
| import { SupportedExportFormats } from '@/types/export'; |
|
|
| 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 data')} |
| icon={<IconFileImport size={18} />} |
| onClick={() => { |
| const importFile = document.querySelector( |
| '#import-file', |
| ) as HTMLInputElement; |
| if (importFile) { |
| importFile.click(); |
| } |
| }} |
| /> |
| </> |
| ); |
| }; |
|
|