Add import/export

This commit is contained in:
Joey Yakimowich-Payne 2026-01-15 22:27:17 -07:00
commit 667c490537
No known key found for this signature in database
GPG key ID: 6BFE655FA5ABD1E1
9 changed files with 2261 additions and 54 deletions

View file

@ -5,6 +5,7 @@ import { BrainCircuit, Loader2, Play, PenTool, BookOpen, Upload, X, FileText, Im
import { useAuth } from 'react-oidc-context';
import { AuthButton } from './AuthButton';
import { QuizLibrary } from './QuizLibrary';
import { ImportQuizzesModal } from './ImportQuizzesModal';
import { DefaultConfigModal } from './DefaultConfigModal';
import { PreferencesModal } from './PreferencesModal';
import { ApiKeyModal } from './ApiKeyModal';
@ -68,6 +69,7 @@ export const Landing: React.FC<LandingProps> = ({ onGenerate, onCreateManual, on
const modalParam = searchParams.get('modal');
const libraryOpen = modalParam === 'library';
const importOpen = modalParam === 'import';
const preferencesOpen = modalParam === 'preferences';
const defaultConfigOpen = modalParam === 'settings';
const accountSettingsOpen = modalParam === 'account';
@ -89,6 +91,10 @@ export const Landing: React.FC<LandingProps> = ({ onGenerate, onCreateManual, on
setSearchParams(buildCleanParams({ modal: open ? 'library' : null }));
};
const setImportOpen = (open: boolean) => {
setSearchParams(buildCleanParams({ modal: open ? 'import' : null }));
};
const setPreferencesOpen = (open: boolean) => {
setSearchParams(buildCleanParams({ modal: open ? 'preferences' : null }));
};
@ -127,10 +133,15 @@ export const Landing: React.FC<LandingProps> = ({ onGenerate, onCreateManual, on
loading: libraryLoading,
loadingQuizId,
deletingQuizId,
exporting,
importing,
error: libraryError,
fetchQuizzes,
loadQuiz,
deleteQuiz,
exportQuizzes,
importQuizzes,
parseImportFile,
retry: retryLibrary
} = useQuizLibrary();
@ -610,12 +621,23 @@ export const Landing: React.FC<LandingProps> = ({ onGenerate, onCreateManual, on
loading={libraryLoading}
loadingQuizId={loadingQuizId}
deletingQuizId={deletingQuizId}
exporting={exporting}
error={libraryError}
onLoadQuiz={handleLoadQuiz}
onDeleteQuiz={deleteQuiz}
onExportQuizzes={exportQuizzes}
onImportClick={() => setImportOpen(true)}
onRetry={retryLibrary}
/>
<ImportQuizzesModal
isOpen={importOpen}
onClose={() => setImportOpen(false)}
onImport={importQuizzes}
parseFile={parseImportFile}
importing={importing}
/>
<DefaultConfigModal
isOpen={defaultConfigOpen}
onClose={() => {