Skip to content

Commit 7c4a25a

Browse files
teams init
1 parent 6d8fa87 commit 7c4a25a

File tree

2 files changed

+144
-57
lines changed

2 files changed

+144
-57
lines changed

src/frontend/src/pages/HomePage.tsx

Lines changed: 117 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import { TaskService } from '../services/TaskService';
2121
import { TeamConfig } from '../models/Team';
2222
import { TeamService } from '../services/TeamService';
2323
import InlineToaster, { useInlineToaster } from "../components/toast/InlineToaster";
24+
import { initializeTeam } from '@/api/config';
2425

2526
/**
2627
* HomePage component - displays task lists and provides navigation
@@ -35,43 +36,129 @@ const HomePage: React.FC = () => {
3536
/**
3637
* Load teams and set default team on component mount
3738
*/
38-
useEffect(() => {
39-
const loadDefaultTeam = async () => {
40-
let defaultTeam = TeamService.getStoredTeam();
41-
if (defaultTeam) {
42-
setSelectedTeam(defaultTeam);
43-
console.log('Default team loaded from storage:', defaultTeam.name);
39+
// useEffect(() => {
40+
// const loadDefaultTeam = async () => {
41+
// let defaultTeam = TeamService.getStoredTeam();
42+
// if (defaultTeam) {
43+
// setSelectedTeam(defaultTeam);
44+
// console.log('Default team loaded from storage:', defaultTeam.name);
45+
46+
// setIsLoadingTeam(false);
47+
// return true;
48+
// }
49+
// setIsLoadingTeam(true);
50+
// try {
51+
// const teams = await TeamService.getUserTeams();
52+
// console.log('All teams loaded:', teams);
53+
// if (teams.length > 0) {
54+
// // Always prioritize "Business Operations Team" as default
55+
// const hrTeam = teams.find(team => team.name === "Human Resources Team");
56+
// defaultTeam = hrTeam || teams[0];
57+
58+
// TeamService.storageTeam(defaultTeam);
59+
// setSelectedTeam(defaultTeam);
60+
// console.log('Default team loaded:', defaultTeam.name, 'with', defaultTeam.starting_tasks?.length || 0, 'starting tasks');
61+
// console.log('Team logo:', defaultTeam.logo);
62+
// console.log('Team description:', defaultTeam.description);
63+
64+
// } else {
65+
// console.log('No teams found - user needs to upload a team configuration');
66+
// // Even if no teams are found, we clear the loading state to show the "no team" message
67+
// }
68+
// } catch (error) {
69+
// console.error('Error loading default team:', error);
70+
// } finally {
71+
// setIsLoadingTeam(false);
72+
// }
73+
// };
74+
75+
// loadDefaultTeam();
76+
// }, []);
4477

45-
setIsLoadingTeam(false);
46-
return true;
78+
useEffect(() => {
79+
const initTeam = async () => {
80+
setIsLoadingTeam(true);
81+
82+
try {
83+
console.log('Initializing team from backend...');
84+
85+
// Call the backend init_team endpoint (takes ~20 seconds)
86+
const initResponse = await initializeTeam();
87+
88+
if (initResponse.status === 'Request started successfully' && initResponse.team_id) {
89+
console.log('Team initialization completed:', initResponse.team_id);
90+
91+
// Now fetch the actual team details using the team_id
92+
const teams = await TeamService.getUserTeams();
93+
const initializedTeam = teams.find(team => team.team_id === initResponse.team_id);
94+
95+
if (initializedTeam) {
96+
setSelectedTeam(initializedTeam);
97+
TeamService.storageTeam(initializedTeam);
98+
99+
console.log('Team loaded successfully:', initializedTeam.name);
100+
console.log('Team agents:', initializedTeam.agents?.length || 0);
101+
102+
showToast(
103+
`${initializedTeam.name} team initialized successfully with ${initializedTeam.agents?.length || 0} agents`,
104+
"success"
105+
);
106+
} else {
107+
// Fallback: if we can't find the specific team, use HR team or first available
108+
console.log('Specific team not found, using default selection logic');
109+
const hrTeam = teams.find(team => team.name === "Human Resources Team");
110+
const defaultTeam = hrTeam || teams[0];
111+
112+
if (defaultTeam) {
113+
setSelectedTeam(defaultTeam);
114+
TeamService.storageTeam(defaultTeam);
115+
showToast(
116+
`${defaultTeam.name} team loaded as default`,
117+
"success"
118+
);
119+
}
120+
}
121+
122+
} else {
123+
throw new Error('Invalid response from init_team endpoint');
47124
}
48-
setIsLoadingTeam(true);
125+
126+
} catch (error) {
127+
console.error('Error initializing team from backend:', error);
128+
showToast("Team initialization failed, using fallback", "warning");
129+
130+
// Fallback to the old client-side method
49131
try {
132+
console.log('Using fallback: client-side team loading...');
50133
const teams = await TeamService.getUserTeams();
51-
console.log('All teams loaded:', teams);
52134
if (teams.length > 0) {
53-
// Always prioritize "Business Operations Team" as default
54-
const businessOpsTeam = teams.find(team => team.name === "Business Operations Team");
55-
defaultTeam = businessOpsTeam || teams[0];
56-
TeamService.storageTeam(defaultTeam);
135+
const hrTeam = teams.find(team => team.name === "Human Resources Team");
136+
const defaultTeam = hrTeam || teams[0];
57137
setSelectedTeam(defaultTeam);
58-
console.log('Default team loaded:', defaultTeam.name, 'with', defaultTeam.starting_tasks?.length || 0, 'starting tasks');
59-
console.log('Team logo:', defaultTeam.logo);
60-
console.log('Team description:', defaultTeam.description);
61-
console.log('Is Business Operations Team:', defaultTeam.name === "Business Operations Team");
138+
TeamService.storageTeam(defaultTeam);
139+
140+
showToast(
141+
`${defaultTeam.name} team loaded (fallback mode)`,
142+
"info"
143+
);
62144
} else {
63145
console.log('No teams found - user needs to upload a team configuration');
64-
// Even if no teams are found, we clear the loading state to show the "no team" message
146+
showToast(
147+
"No teams found. Please upload a team configuration.",
148+
"warning"
149+
);
65150
}
66-
} catch (error) {
67-
console.error('Error loading default team:', error);
68-
} finally {
69-
setIsLoadingTeam(false);
151+
} catch (fallbackError) {
152+
console.error('Fallback team loading also failed:', fallbackError);
153+
showToast("Failed to load team configuration", "error");
70154
}
71-
};
155+
} finally {
156+
setIsLoadingTeam(false);
157+
}
158+
};
72159

73-
loadDefaultTeam();
74-
}, []);
160+
initTeam();
161+
}, [showToast]);
75162

76163
/**
77164
* Handle new task creation from the "New task" button
@@ -109,12 +196,12 @@ const HomePage: React.FC = () => {
109196
console.log('Teams refreshed after upload:', teams.length);
110197

111198
if (teams.length > 0) {
112-
// Always keep "Business Operations Team" as default, even after new uploads
113-
const businessOpsTeam = teams.find(team => team.name === "Business Operations Team");
114-
const defaultTeam = businessOpsTeam || teams[0];
199+
// Always keep "Human Resources Team" as default, even after new uploads
200+
const hrTeam = teams.find(team => team.name === "Human Resources Team");
201+
const defaultTeam = hrTeam || teams[0];
115202
setSelectedTeam(defaultTeam);
116203
console.log('Default team after upload:', defaultTeam.name);
117-
console.log('Business Operations Team remains default');
204+
console.log('Human Resources Team remains default');
118205
showToast(
119206
`Team uploaded successfully! ${defaultTeam.name} remains your default team.`,
120207
"success"

src/frontend/src/pages/PlanPage.tsx

Lines changed: 27 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -162,8 +162,8 @@ const PlanPage: React.FC = () => {
162162
console.log('All teams loaded:', teams);
163163
if (teams.length > 0) {
164164
// Always prioritize "Business Operations Team" as default
165-
const businessOpsTeam = teams.find(team => team.name === "Business Operations Team");
166-
defaultTeam = businessOpsTeam || teams[0];
165+
const hrTeam = teams.find(team => team.name === "Human Resources Team");
166+
defaultTeam = hrTeam || teams[0];
167167
TeamService.storageTeam(defaultTeam);
168168
setSelectedTeam(defaultTeam);
169169
console.log('Default team loaded:', defaultTeam.name);
@@ -412,32 +412,32 @@ const PlanPage: React.FC = () => {
412412
/**
413413
* Handle team upload completion - refresh team list
414414
*/
415-
const handleTeamUpload = useCallback(async () => {
416-
try {
417-
const teams = await TeamService.getUserTeams();
418-
console.log('Teams refreshed after upload:', teams.length);
419-
420-
if (teams.length > 0) {
421-
// Always keep "Business Operations Team" as default, even after new uploads
422-
const businessOpsTeam = teams.find(team => team.name === "Business Operations Team");
423-
const defaultTeam = businessOpsTeam || teams[0];
424-
setSelectedTeam(defaultTeam);
425-
console.log('Default team after upload:', defaultTeam.name);
426-
427-
dispatchToast(
428-
<Toast>
429-
<ToastTitle>Team Uploaded Successfully!</ToastTitle>
430-
<ToastBody>
431-
Team uploaded. {defaultTeam.name} remains your default team.
432-
</ToastBody>
433-
</Toast>,
434-
{ intent: "success" }
435-
);
436-
}
437-
} catch (error) {
438-
console.error('Error refreshing teams after upload:', error);
415+
const handleTeamUpload = useCallback(async () => {
416+
try {
417+
const teams = await TeamService.getUserTeams();
418+
console.log('Teams refreshed after upload:', teams.length);
419+
420+
if (teams.length > 0) {
421+
// Always keep "Human Resources Team" as default, even after new uploads
422+
const hrTeam = teams.find(team => team.name === "Human Resources Team");
423+
const defaultTeam = hrTeam || teams[0];
424+
setSelectedTeam(defaultTeam);
425+
console.log('Default team after upload:', defaultTeam.name);
426+
427+
dispatchToast(
428+
<Toast>
429+
<ToastTitle>Team Uploaded Successfully!</ToastTitle>
430+
<ToastBody>
431+
Team uploaded. {defaultTeam.name} remains your default team.
432+
</ToastBody>
433+
</Toast>,
434+
{ intent: "success" }
435+
);
439436
}
440-
}, [dispatchToast]);
437+
} catch (error) {
438+
console.error('Error refreshing teams after upload:', error);
439+
}
440+
}, [dispatchToast]);
441441

442442
if (!planId) {
443443
return (

0 commit comments

Comments
 (0)