6500db9c1c
* move index to home folder, create state and context files and barrell folder * Sanity Check Commit: reducer added to home.tsx manual QA all working * WIP: promptBar * fix missing json parse on folders and prompts * split context and add promptbar context * add context to nested prompt componets and componetize Folder componet * remove log * Create buttons folder and componetize sidebar action button * tidy up prompt handlers * componetized sidebar * added back chatbar componet to left side sidebar * monster commit: Componetized the common code between chatbar and promptbar into new componet Sidebar and added context to both bars * add useFetch service * added prettier import sort to keep imports ordered and easier to indentify * added react query and useFetch to work with RQ * added apiService, errorService and reactQuery * add callback and tidy up error service * refactor chat and child componets to useContext * fix extra calls and bad calls to mel endpoint * minor import cleanup --------- Co-authored-by: jc.durbin <jc.durbin@ardanis.com>
52 lines
1.2 KiB
TypeScript
52 lines
1.2 KiB
TypeScript
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();
|
|
}
|
|
}}
|
|
/>
|
|
</>
|
|
);
|
|
};
|