| import 'package:jaspr/jaspr.dart'; |
| import 'package:jaspr_router/jaspr_router.dart'; |
| import 'package:web/web.dart' as web; |
| |
| import 'features/agent/logic/generate_project_title.dart'; |
| import 'features/project/data/indexed_db_project_store.dart'; |
| import 'features/project/data/project_repository.dart'; |
| import 'features/project/view_models/project_session_view_model.dart'; |
| import 'features/project/views/project_route.dart'; |
| import 'features/project/views/prompt_route.dart'; |
| import 'features/shared/logic/app_event_bus.dart'; |
| import 'features/shared/logic/app_repository.dart'; |
| import 'features/workspace/data/workspace_repository.dart'; |
| import 'utils/provider.dart'; |
| |
| class App extends StatefulComponent { |
| @override |
| State<App> createState() => _AppState(); |
| } |
| |
| class _AppState extends State<App> { |
| late final AppRepository appRepository; |
| |
| @override |
| void initState() { |
| super.initState(); |
| final commandBus = AppCommandBus(); |
| final workspaceFuture = WorkspaceRepository.create(commandBus: commandBus); |
| final projectRepository = DartProjectRepository(store: IndexedDbProjectStore()); |
| |
| final projectSessionViewModel = ProjectSessionViewModel( |
| projectRepository: projectRepository, |
| workspaceSnapshotsFuture: workspaceFuture, |
| commandBus: commandBus, |
| idGenerator: () => web.window.crypto.randomUUID(), |
| titleGenerator: generateProjectTitle, |
| ); |
| |
| appRepository = AppRepository( |
| workspaceRepositoryFuture: workspaceFuture, |
| projectRepository: projectRepository, |
| commandBus: commandBus, |
| projectSessionViewModel: projectSessionViewModel, |
| ); |
| } |
| |
| @override |
| void dispose() { |
| appRepository.projectSessionViewModel.session?.dispose(); |
| appRepository.projectSessionViewModel.dispose(); |
| appRepository.commandBus.dispose(); |
| super.dispose(); |
| } |
| |
| @override |
| Component build(BuildContext context) { |
| return Provider<AppRepository>( |
| value: appRepository, |
| child: Router( |
| routes: [ |
| Route( |
| path: '/', |
| builder: (context, state) => const PromptRoute(), |
| ), |
| Route( |
| path: '/project', |
| builder: (context, state) => const ProjectRoute(), |
| ), |
| ], |
| ), |
| ); |
| } |
| } |