import { ChangeEvent, useRef, useState } from 'react'; import { Button, Input } from '@chakra-ui/react'; import { IoAdd } from '@react-icons/all-files/io5/IoAdd'; import { uploadProjectFile } from '../../../../common/api/db'; import { invalidateAllCaches, maybeAxiosError } from '../../../../common/api/utils'; import { validateProjectFile } from '../../../../common/utils/uploadUtils'; import * as Panel from '../PanelUtils'; import ProjectCreateForm from './ProjectCreateForm'; import ProjectList from './ProjectList'; import style from './ProjectPanel.module.scss'; export default function ManageProjects() { const [isCreatingProject, setIsCreatingProject] = useState(false); const [error, setError] = useState(''); const [loading, setLoading] = useState<'import' | null>(null); const fileInputRef = useRef(null); const handleToggleCreate = () => { setIsCreatingProject((prev) => !prev); }; const handleSelectFile = () => { fileInputRef.current?.click(); }; const handleImport = async (event: ChangeEvent) => { const selectedFile = event.target?.files?.[0]; if (!selectedFile) { return; } setLoading('import'); try { validateProjectFile(selectedFile); await uploadProjectFile(selectedFile); } catch (error) { const errorMessage = maybeAxiosError(error); setError(`Error uploading file: ${errorMessage}`); } finally { invalidateAllCaches(); } setLoading(null); }; const handleCloseForm = () => { setIsCreatingProject(false); }; return ( Manage projects
{error && {error}} {isCreatingProject && }
); }