blob: a6bed133cba397c8b9417fcdefa38d1f4e7d6a02 [file]
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(),
),
],
),
);
}
}