From a4524789343440e16867b7dfcc177aaae7952bfb Mon Sep 17 00:00:00 2001 From: Harmanpreet-Microsoft Date: Thu, 25 Jun 2026 16:57:36 +0530 Subject: [PATCH 1/5] Update TeamSelector and HomePage to handle team upload with selected team parameter --- .../src/components/common/TeamSelector.tsx | 6 +++--- src/App/src/pages/HomePage.tsx | 20 ++++++++++--------- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/src/App/src/components/common/TeamSelector.tsx b/src/App/src/components/common/TeamSelector.tsx index 5bb865e20..07322e15a 100644 --- a/src/App/src/components/common/TeamSelector.tsx +++ b/src/App/src/components/common/TeamSelector.tsx @@ -39,7 +39,7 @@ import styles from '../../styles/TeamSelector.module.css'; interface TeamSelectorProps { onTeamSelect?: (team: TeamConfig | null) => void; - onTeamUpload?: () => Promise; + onTeamUpload?: (team?: TeamConfig) => Promise; selectedTeam?: TeamConfig | null; isHomePage: boolean; } @@ -280,7 +280,7 @@ const TeamSelector: React.FC = ({ } if (onTeamUpload) { - await onTeamUpload(); + await onTeamUpload(result.team); } } else if (result.raiError) { setError('❌ Content Safety Check Failed\n\nYour team configuration contains content that doesn\'t meet our safety guidelines.'); @@ -382,7 +382,7 @@ const TeamSelector: React.FC = ({ } if (onTeamUpload) { - await onTeamUpload(); + await onTeamUpload(result.team); } } else if (result.raiError) { setError(' Content Safety Check Failed\n\nYour team configuration contains content that doesn\'t meet our safety guidelines.'); diff --git a/src/App/src/pages/HomePage.tsx b/src/App/src/pages/HomePage.tsx index a143e3d48..5853af905 100644 --- a/src/App/src/pages/HomePage.tsx +++ b/src/App/src/pages/HomePage.tsx @@ -118,17 +118,19 @@ const HomePage: React.FC = () => { [dispatch, showToast], ); - const handleTeamUpload = useCallback(async () => { + const handleTeamUpload = useCallback(async (uploadedTeam?: any) => { try { - const teams = await TeamService.getUserTeams(); - if (teams.length > 0) { - const hrTeam = teams.find(team => team.name === 'Human Resources Team'); - const defaultTeam = hrTeam || teams[0]; - dispatch(setSelectedTeam(defaultTeam)); - showToast(`Team uploaded successfully! ${defaultTeam.name} remains your default team.`, 'success'); + console.log('handleTeamUpload called with:', uploadedTeam); + if (uploadedTeam) { + const teamName = uploadedTeam.name || 'Uploaded Team'; + dispatch(setSelectedTeam(uploadedTeam)); + showToast(`Default team set to ${teamName}`, 'success'); + } else { + console.warn('No uploaded team provided to handleTeamUpload'); } - } catch { - console.error('Team upload failed'); + } catch (error) { + console.error('Team upload failed:', error); + showToast('Team upload completed', 'success'); } }, [dispatch, showToast]); From 232f0489b6a662ab209f86a1e6da7f0b0f632a80 Mon Sep 17 00:00:00 2001 From: Harmanpreet-Microsoft Date: Thu, 25 Jun 2026 17:40:34 +0530 Subject: [PATCH 2/5] Fix: Persist selected team to localStorage and restore on page refresh - Added localStorage check in initTeam useEffect to restore previously uploaded team - Added TeamService.storageTeam() call in handleTeamUpload to persist team selection - Now when user refreshes the page, the uploaded team remains selected instead of reverting to 'no team selected' --- content_packs/content_gen/agent_teams/content_gen.json | 4 ++-- src/App/src/pages/HomePage.tsx | 10 ++++++++++ 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/content_packs/content_gen/agent_teams/content_gen.json b/content_packs/content_gen/agent_teams/content_gen.json index 85dc7c957..248cdf7b8 100644 --- a/content_packs/content_gen/agent_teams/content_gen.json +++ b/content_packs/content_gen/agent_teams/content_gen.json @@ -1,7 +1,7 @@ { "id": "1", - "team_id": "content-gen-team", - "name": "Retail Marketing Content Generation Team", + "team_id": "content-gen-team123", + "name": "Retail Marketing Content Generation Team123", "status": "visible", "created": "", "created_by": "", diff --git a/src/App/src/pages/HomePage.tsx b/src/App/src/pages/HomePage.tsx index 5853af905..80dae278a 100644 --- a/src/App/src/pages/HomePage.tsx +++ b/src/App/src/pages/HomePage.tsx @@ -35,6 +35,15 @@ const HomePage: React.FC = () => { const initTeam = async () => { dispatch(setIsLoadingTeam(true)); try { + // Check localStorage first for a previously uploaded team + const storedTeam = TeamService.getStoredTeam(); + if (storedTeam) { + dispatch(setSelectedTeam(storedTeam)); + showToast(`${storedTeam.name} team restored from previous session`, 'success'); + dispatch(setIsLoadingTeam(false)); + return; + } + const initResponse = await TeamService.initializeTeam(); if (initResponse.data?.status === 'Request started successfully' && initResponse.data?.team_id) { @@ -124,6 +133,7 @@ const HomePage: React.FC = () => { if (uploadedTeam) { const teamName = uploadedTeam.name || 'Uploaded Team'; dispatch(setSelectedTeam(uploadedTeam)); + TeamService.storageTeam(uploadedTeam); showToast(`Default team set to ${teamName}`, 'success'); } else { console.warn('No uploaded team provided to handleTeamUpload'); From 520149f7bb75b175ce9aec329abcb95894530f7b Mon Sep 17 00:00:00 2001 From: Harmanpreet-Microsoft Date: Thu, 25 Jun 2026 17:41:49 +0530 Subject: [PATCH 3/5] Fix: Correct team_id and name for Retail Marketing Content Generation Team --- content_packs/content_gen/agent_teams/content_gen.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content_packs/content_gen/agent_teams/content_gen.json b/content_packs/content_gen/agent_teams/content_gen.json index 248cdf7b8..85dc7c957 100644 --- a/content_packs/content_gen/agent_teams/content_gen.json +++ b/content_packs/content_gen/agent_teams/content_gen.json @@ -1,7 +1,7 @@ { "id": "1", - "team_id": "content-gen-team123", - "name": "Retail Marketing Content Generation Team123", + "team_id": "content-gen-team", + "name": "Retail Marketing Content Generation Team", "status": "visible", "created": "", "created_by": "", From 6a1e779a23039b5ebe81a7541dabe15a7f4f68da Mon Sep 17 00:00:00 2001 From: Harmanpreet-Microsoft Date: Thu, 25 Jun 2026 21:32:30 +0530 Subject: [PATCH 4/5] Fix: Enhance team initialization logic to check for stored team existence and clear storage if deleted --- src/App/src/pages/HomePage.tsx | 41 ++++++++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/src/App/src/pages/HomePage.tsx b/src/App/src/pages/HomePage.tsx index 80dae278a..4eafb37d4 100644 --- a/src/App/src/pages/HomePage.tsx +++ b/src/App/src/pages/HomePage.tsx @@ -35,19 +35,30 @@ const HomePage: React.FC = () => { const initTeam = async () => { dispatch(setIsLoadingTeam(true)); try { - // Check localStorage first for a previously uploaded team + // Get available teams first + const teams = await TeamService.getUserTeams(); + + // Check if we have a stored team and if it still exists in the backend const storedTeam = TeamService.getStoredTeam(); if (storedTeam) { - dispatch(setSelectedTeam(storedTeam)); - showToast(`${storedTeam.name} team restored from previous session`, 'success'); - dispatch(setIsLoadingTeam(false)); - return; + const existsInBackend = teams.some(t => t.team_id === storedTeam.team_id); + if (existsInBackend) { + // Stored team still exists, use it + dispatch(setSelectedTeam(storedTeam)); + showToast(`${storedTeam.name} team restored from storage`, 'success'); + dispatch(setIsLoadingTeam(false)); + return; + } else { + // Stored team was deleted, clear localStorage + console.warn(`Stored team ${storedTeam.team_id} no longer exists, clearing storage`); + // Don't call storageTeam with null, just let init response guide us + } } + // Now initialize team from backend const initResponse = await TeamService.initializeTeam(); if (initResponse.data?.status === 'Request started successfully' && initResponse.data?.team_id) { - const teams = await TeamService.getUserTeams(); const initializedTeam = teams.find(team => team.team_id === initResponse.data?.team_id); if (initializedTeam) { @@ -67,7 +78,6 @@ const HomePage: React.FC = () => { dispatch(setSelectedTeam(null)); showToast('Welcome! Please upload a team configuration file to get started.', 'info'); } else if (!initResponse.success) { - // API call failed — surface the error console.error('Team init failed:', initResponse.error); showToast(initResponse.error || 'Team initialization failed. Please try again.', 'warning'); } @@ -91,6 +101,12 @@ const HomePage: React.FC = () => { async (team: TeamConfig | null) => { dispatch(setSelectedTeam(team)); dispatch(setReloadLeftList(true)); + + // Immediately save selected team to localStorage so it persists on reload + if (team) { + TeamService.storageTeam(team); + } + if (team) { try { dispatch(setIsLoadingTeam(true)); @@ -135,6 +151,17 @@ const HomePage: React.FC = () => { dispatch(setSelectedTeam(uploadedTeam)); TeamService.storageTeam(uploadedTeam); showToast(`Default team set to ${teamName}`, 'success'); + + // Also inform backend to use this team for the session + if (uploadedTeam.team_id) { + try { + await TeamService.selectTeam(uploadedTeam.team_id); + console.log('Team selected in backend:', uploadedTeam.team_id); + } catch (selectError) { + console.warn('Failed to select team in backend:', selectError); + // Don't fail the upload if backend selection fails + } + } } else { console.warn('No uploaded team provided to handleTeamUpload'); } From fc938cd8eaa6c6db80e5c4f42afd115021ccc1aa Mon Sep 17 00:00:00 2001 From: Harmanpreet-Microsoft Date: Fri, 26 Jun 2026 18:18:50 +0530 Subject: [PATCH 5/5] Fix: Update team restoration logic to use backend-fresh object and improve error handling for team uploads --- src/App/src/pages/HomePage.tsx | 16 ++++++++-------- src/App/src/store/TeamService.tsx | 11 +++++++++++ 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/src/App/src/pages/HomePage.tsx b/src/App/src/pages/HomePage.tsx index 4eafb37d4..e2c668bff 100644 --- a/src/App/src/pages/HomePage.tsx +++ b/src/App/src/pages/HomePage.tsx @@ -41,17 +41,17 @@ const HomePage: React.FC = () => { // Check if we have a stored team and if it still exists in the backend const storedTeam = TeamService.getStoredTeam(); if (storedTeam) { - const existsInBackend = teams.some(t => t.team_id === storedTeam.team_id); - if (existsInBackend) { - // Stored team still exists, use it - dispatch(setSelectedTeam(storedTeam)); - showToast(`${storedTeam.name} team restored from storage`, 'success'); + const backendTeam = teams.find(t => t.team_id === storedTeam.team_id); + if (backendTeam) { + // Stored team still exists, use backend-fresh object + dispatch(setSelectedTeam(backendTeam)); + showToast(`${backendTeam.name} team restored from storage`, 'success'); dispatch(setIsLoadingTeam(false)); return; } else { // Stored team was deleted, clear localStorage console.warn(`Stored team ${storedTeam.team_id} no longer exists, clearing storage`); - // Don't call storageTeam with null, just let init response guide us + TeamService.clearStoredTeam(); } } @@ -143,7 +143,7 @@ const HomePage: React.FC = () => { [dispatch, showToast], ); - const handleTeamUpload = useCallback(async (uploadedTeam?: any) => { + const handleTeamUpload = useCallback(async (uploadedTeam?: TeamConfig) => { try { console.log('handleTeamUpload called with:', uploadedTeam); if (uploadedTeam) { @@ -167,7 +167,7 @@ const HomePage: React.FC = () => { } } catch (error) { console.error('Team upload failed:', error); - showToast('Team upload completed', 'success'); + showToast('Team upload failed. Please try again.', 'warning'); } }, [dispatch, showToast]); diff --git a/src/App/src/store/TeamService.tsx b/src/App/src/store/TeamService.tsx index 5160c9ad8..466a9f225 100644 --- a/src/App/src/store/TeamService.tsx +++ b/src/App/src/store/TeamService.tsx @@ -73,6 +73,17 @@ export class TeamService { } } + static clearStoredTeam(): boolean { + // Remove persisted team from localStorage + if (typeof window === 'undefined' || !window.localStorage) return false; + try { + window.localStorage.removeItem(TeamService.STORAGE_KEY); + return true; + } catch { + return false; + } + } + static async uploadCustomTeam(teamFile: File): Promise<{ modelError?: any; success: boolean; team?: TeamConfig; error?: string; raiError?: any; searchError?: any }> {