11<script setup lang="ts">
2- import { ref , onMounted , computed } from ' vue'
2+ import { ref , onMounted , onUnmounted , computed } from ' vue'
33import { useI18n } from ' vue-i18n'
44import {
55 FlexRender ,
@@ -25,7 +25,7 @@ import { Button } from '@/components/ui/button'
2525import { Plus } from ' lucide-vue-next'
2626import DashboardLayout from ' @/components/DashboardLayout.vue'
2727import AddTeamModal from ' @/components/teams/AddTeamModal.vue'
28- import { TeamService , type TeamWithRole } from ' @/services/teamService'
28+ import { TeamService , type TeamWithRole , type Team } from ' @/services/teamService'
2929import { UserService } from ' @/services/userService'
3030import { useEventBus } from ' @/composables/useEventBus'
3131import { createColumns } from ' ./teams/columns'
@@ -51,11 +51,39 @@ const canCreateTeams = ref(false)
5151const userPermissions = ref <string []>([])
5252const deleteSuccessMessage = ref <string | null >(null )
5353
54+ // Team switching state
55+ const selectedTeam = ref <Team | null >(null )
56+
5457// Handle manage team navigation
5558const handleManageTeam = (teamId : string ) => {
5659 router .push (` /teams/manage/${teamId } ` )
5760}
5861
62+ // Handle team switching
63+ const handleSwitchTeam = (teamId : string ) => {
64+ const team = teams .value .find (t => t .id === teamId )
65+ if (team ) {
66+ selectedTeam .value = team
67+ // Emit global event for team selection to update sidebar
68+ eventBus .emit (' team-selected' , { teamId: team .id , teamName: team .name })
69+ console .log (' Switched to team:' , team .name )
70+ }
71+ }
72+
73+ // Handle team selection from sidebar
74+ const handleTeamSelectedFromSidebar = (data : { teamId: string ; teamName: string }) => {
75+ // Find the team in our local teams list and update selectedTeam
76+ const team = teams .value .find (t => t .id === data .teamId )
77+ if (team ) {
78+ selectedTeam .value = team
79+ console .log (' Team selected from sidebar:' , data .teamName )
80+ } else {
81+ // If team not found in current list, create a basic team object
82+ selectedTeam .value = { id: data .teamId , name: data .teamName } as Team
83+ console .log (' Team selected from sidebar (not in current list):' , data .teamName )
84+ }
85+ }
86+
5987// Check user permissions
6088const checkPermissions = async () => {
6189 try {
@@ -72,7 +100,24 @@ const checkPermissions = async () => {
72100}
73101
74102// Create columns with permissions
75- const columns = computed (() => createColumns (handleManageTeam , userPermissions .value ))
103+ const columns = computed (() => createColumns (
104+ handleManageTeam ,
105+ handleSwitchTeam ,
106+ selectedTeam .value ?.id || null ,
107+ userPermissions .value
108+ ))
109+
110+ // Initialize selected team from sidebar teams
111+ const initializeSelectedTeam = async () => {
112+ try {
113+ const userTeams = await TeamService .getUserTeams ()
114+ if (userTeams .length > 0 ) {
115+ selectedTeam .value = userTeams [0 ] // Default to first team
116+ }
117+ } catch (error ) {
118+ console .error (' Error initializing selected team:' , error )
119+ }
120+ }
76121
77122// Fetch teams from API
78123const fetchTeams = async (): Promise <void > => {
@@ -118,8 +163,24 @@ onMounted(async () => {
118163
119164 await Promise .all ([
120165 checkPermissions (),
121- fetchTeams ()
166+ fetchTeams (),
167+ initializeSelectedTeam ()
122168 ])
169+
170+ // Listen for team selection events from sidebar
171+ eventBus .on (' team-selected' , handleTeamSelectedFromSidebar )
172+
173+ // Listen for team updates from other components
174+ eventBus .on (' teams-updated' , () => {
175+ console .log (' Teams updated event received, refreshing teams...' )
176+ fetchTeams (true ) // Force refresh to get latest data
177+ })
178+ })
179+
180+ onUnmounted (() => {
181+ // Clean up event listeners to prevent memory leaks
182+ eventBus .off (' team-selected' , handleTeamSelectedFromSidebar )
183+ eventBus .off (' teams-updated' )
123184})
124185
125186// Create table instance
0 commit comments