diff --git a/frontend/lib/viewmodels/skill_tree_viewmodel.dart b/frontend/lib/viewmodels/skill_tree_viewmodel.dart index 19c3afb7..e008c1ad 100644 --- a/frontend/lib/viewmodels/skill_tree_viewmodel.dart +++ b/frontend/lib/viewmodels/skill_tree_viewmodel.dart @@ -9,11 +9,15 @@ import 'package:flutter/services.dart'; import 'package:graphview/GraphView.dart'; class SkillTreeViewModel extends ChangeNotifier { + // TODO: Potentially move to task queue view model when we create one final BenchmarkService benchmarkService; + // TODO: Potentially move to task queue view model when we create one + bool isBenchmarkRunning = false; List _skillTreeNodes = []; List _skillTreeEdges = []; SkillTreeNode? _selectedNode; + // TODO: Potentially move to task queue view model when we create one List? _selectedNodeHierarchy; SkillTreeNode? get selectedNode => _selectedNode; @@ -69,6 +73,7 @@ class SkillTreeViewModel extends ChangeNotifier { } void toggleNodeSelection(String nodeId) { + if (isBenchmarkRunning) return; if (_selectedNode?.id == nodeId) { // Unselect the node if it's already selected _selectedNode = null; @@ -127,6 +132,9 @@ class SkillTreeViewModel extends ChangeNotifier { // TODO: Update to actual implementation Future runBenchmark(ReportRequestBody reportRequestBody) async { + isBenchmarkRunning = true; + notifyListeners(); + try { final result = await benchmarkService.generateReport(reportRequestBody); // Pretty-print the JSON result @@ -135,6 +143,9 @@ class SkillTreeViewModel extends ChangeNotifier { } catch (e) { print("Failed to generate report: $e"); } + + isBenchmarkRunning = false; + notifyListeners(); } // TODO: Update to actual implementation diff --git a/frontend/lib/views/side_bar/side_bar_view.dart b/frontend/lib/views/side_bar/side_bar_view.dart index 6ef043ab..763a3c36 100644 --- a/frontend/lib/views/side_bar/side_bar_view.dart +++ b/frontend/lib/views/side_bar/side_bar_view.dart @@ -1,4 +1,6 @@ +import 'package:auto_gpt_flutter_client/viewmodels/skill_tree_viewmodel.dart'; import 'package:flutter/material.dart'; +import 'package:provider/provider.dart'; class SideBarView extends StatelessWidget { final ValueNotifier selectedViewNotifier; @@ -7,6 +9,9 @@ class SideBarView extends StatelessWidget { @override Widget build(BuildContext context) { + // TODO: should we pass this in as a dependency? + final skillTreeViewModel = + Provider.of(context, listen: false); return Material( child: ValueListenableBuilder( valueListenable: selectedViewNotifier, @@ -21,7 +26,9 @@ class SideBarView extends StatelessWidget { color: selectedView == 'TaskView' ? Colors.blue : Colors.black, icon: const Icon(Icons.chat), - onPressed: () => selectedViewNotifier.value = 'TaskView', + onPressed: skillTreeViewModel.isBenchmarkRunning + ? null + : () => selectedViewNotifier.value = 'TaskView', ), IconButton( splashRadius: 0.1, @@ -29,8 +36,9 @@ class SideBarView extends StatelessWidget { ? Colors.blue : Colors.black, icon: const Icon(Icons.emoji_events), // trophy icon - onPressed: () => - selectedViewNotifier.value = 'SkillTreeView', + onPressed: skillTreeViewModel.isBenchmarkRunning + ? null + : () => selectedViewNotifier.value = 'SkillTreeView', ), ], ), diff --git a/frontend/lib/views/task_queue/task_queue_view.dart b/frontend/lib/views/task_queue/task_queue_view.dart index 4f1e0daa..20a98499 100644 --- a/frontend/lib/views/task_queue/task_queue_view.dart +++ b/frontend/lib/views/task_queue/task_queue_view.dart @@ -53,17 +53,19 @@ class TaskQueueView extends StatelessWidget { border: Border.all(color: Colors.green, width: 3), ), child: ElevatedButton( - onPressed: () { - // Create a ReportRequestBody with hardcoded values - ReportRequestBody reportRequestBody = ReportRequestBody( - category: "", - tests: testNames, - mock: true, - ); + onPressed: viewModel.isBenchmarkRunning + ? null + : () { + // Create a ReportRequestBody with hardcoded values + ReportRequestBody reportRequestBody = ReportRequestBody( + category: "", + tests: testNames, + mock: true, + ); - // Call runBenchmark method from SkillTreeViewModel - viewModel.runBenchmark(reportRequestBody); - }, + // Call runBenchmark method from SkillTreeViewModel + viewModel.runBenchmark(reportRequestBody); + }, child: Row( mainAxisAlignment: MainAxisAlignment.center, // Center the children