From 1f75a29f3b4e3a881ac7a5db0ac8ec39c781d063 Mon Sep 17 00:00:00 2001 From: Francia Riesco Date: Tue, 16 Sep 2025 15:33:59 -0400 Subject: [PATCH 1/2] Refactor plan panel left reload logic and props Simplifies reload logic in PlanPanelLeft by removing unused imports and effect, and ensures plans reload on team selection. Updates PlanPanelLefProps to require reloadTasks. Adjusts HomePage to trigger left panel reload on team selection and improves logging for better traceability. --- .../src/components/content/PlanPanelLeft.tsx | 18 +++++------------- src/frontend/src/models/planPanelLeft.tsx | 2 +- src/frontend/src/pages/HomePage.tsx | 12 +++++++----- 3 files changed, 13 insertions(+), 19 deletions(-) diff --git a/src/frontend/src/components/content/PlanPanelLeft.tsx b/src/frontend/src/components/content/PlanPanelLeft.tsx index e7447b7eb..b6febf79c 100644 --- a/src/frontend/src/components/content/PlanPanelLeft.tsx +++ b/src/frontend/src/components/content/PlanPanelLeft.tsx @@ -2,9 +2,6 @@ import PanelLeft from "@/coral/components/Panels/PanelLeft"; import PanelLeftToolbar from "@/coral/components/Panels/PanelLeftToolbar"; import { Body1Strong, - Button, - Subtitle1, - Subtitle2, Toast, ToastBody, ToastTitle, @@ -12,7 +9,6 @@ import { useToastController, } from "@fluentui/react-components"; import { - Add20Regular, ChatAdd20Regular, ErrorCircle20Regular, } from "@fluentui/react-icons"; @@ -22,7 +18,6 @@ import { useNavigate, useParams } from "react-router-dom"; import { Plan, PlanPanelLefProps, Task, UserInfo } from "@/models"; import { apiService } from "@/api"; import { TaskService } from "@/services"; -import MsftColor from "@/coral/imports/MsftColor"; import ContosoLogo from "../../coral/imports/ContosoLogo"; import "../../styles/PlanPanelLeft.css"; import PanelFooter from "@/coral/components/Panels/PanelFooter"; @@ -60,9 +55,10 @@ const PlanPanelLeft: React.FC = ({ const loadPlansData = useCallback(async (forceRefresh = false) => { try { + console.log("Loading plans, forceRefresh:", forceRefresh); setPlansLoading(true); setPlansError(null); - const plansData = await apiService.getPlans(undefined, !forceRefresh); + const plansData = await apiService.getPlans(undefined, forceRefresh); setPlans(plansData); } catch (error) { console.log("Failed to load plans:", error); @@ -74,12 +70,7 @@ const PlanPanelLeft: React.FC = ({ } }, []); - useEffect(() => { - if (reloadTasks) { - loadPlansData(); - restReload?.(); - } - }, [reloadTasks, loadPlansData, restReload]); + // Fetch plans @@ -131,6 +122,7 @@ const PlanPanelLeft: React.FC = ({ const handleTeamSelect = useCallback( (team: TeamConfig | null) => { // Use parent's team select handler if provided, otherwise use local state + loadPlansData(); if (onTeamSelect) { onTeamSelect(team); } else { @@ -160,7 +152,7 @@ const PlanPanelLeft: React.FC = ({ } } }, - [onTeamSelect, dispatchToast] + [onTeamSelect, dispatchToast, loadPlansData] ); return ( diff --git a/src/frontend/src/models/planPanelLeft.tsx b/src/frontend/src/models/planPanelLeft.tsx index 738e9f65c..4bae471ef 100644 --- a/src/frontend/src/models/planPanelLeft.tsx +++ b/src/frontend/src/models/planPanelLeft.tsx @@ -1,7 +1,7 @@ import { TeamConfig } from './Team'; export interface PlanPanelLefProps { - reloadTasks?: boolean; + reloadTasks: boolean; onNewTaskButton: () => void; restReload?: () => void; onTeamSelect?: (team: TeamConfig | null) => void; diff --git a/src/frontend/src/pages/HomePage.tsx b/src/frontend/src/pages/HomePage.tsx index 1fa84a132..3484c3d78 100644 --- a/src/frontend/src/pages/HomePage.tsx +++ b/src/frontend/src/pages/HomePage.tsx @@ -98,15 +98,17 @@ const HomePage: React.FC = () => { */ const handleTeamSelect = useCallback(async (team: TeamConfig | null) => { setSelectedTeam(team); + setReloadLeftList(true); + console.log('handleTeamSelect called with team:', true); if (team) { try { // TODO REFRACTOR THIS CODE setIsLoadingTeam(true); const initResponse = await TeamService.initializeTeam(true); - setReloadLeftList(true) + if (initResponse.data?.status === 'Request started successfully' && initResponse.data?.team_id) { - console.log('Team initialization completed:', initResponse.data?.team_id); + console.log('handleTeamSelect:', initResponse.data?.team_id); // Now fetch the actual team details using the team_id const teams = await TeamService.getUserTeams(); @@ -115,9 +117,9 @@ const HomePage: React.FC = () => { if (initializedTeam) { setSelectedTeam(initializedTeam); TeamService.storageTeam(initializedTeam); - - console.log('Team loaded successfully:', initializedTeam.name); - console.log('Team agents:', initializedTeam.agents?.length || 0); + setReloadLeftList(true) + console.log('Team loaded successfully handleTeamSelect:', initializedTeam.name); + console.log('Team agents handleTeamSelect:', initializedTeam.agents?.length || 0); showToast( `${initializedTeam.name} team initialized successfully with ${initializedTeam.agents?.length || 0} agents`, From dfdb99ea4160dd1b12afd7f0e1121d5e2f7a16f5 Mon Sep 17 00:00:00 2001 From: Francia Riesco Date: Tue, 16 Sep 2025 15:47:39 -0400 Subject: [PATCH 2/2] Update router.py --- src/backend/v3/api/router.py | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/backend/v3/api/router.py b/src/backend/v3/api/router.py index a4c0eb6c2..746e9c278 100644 --- a/src/backend/v3/api/router.py +++ b/src/backend/v3/api/router.py @@ -274,6 +274,12 @@ async def process_request( team_id = None if user_current_team: team_id = user_current_team.team_id + team = await memory_store.get_team_by_id(team_id=team_id) + if not team: + raise HTTPException( + status_code=404, + detail=f"Team configuration '{team_id}' not found or access denied", + ) plan = Plan( id=plan_id, plan_id=plan_id,