@@ -12,7 +12,7 @@ import { useEventBus } from '@/composables/useEventBus'
1212import TeamTableColumns from ' ./TeamTableColumns.vue'
1313import { useRouter , useRoute } from ' vue-router'
1414import { Alert , AlertDescription } from ' @/components/ui/alert'
15- import { CheckCircle } from ' lucide-vue-next'
15+ import { CheckCircle , AlertCircle } from ' lucide-vue-next'
1616
1717const { t } = useI18n ()
1818const router = useRouter ()
@@ -24,9 +24,10 @@ const teams = ref<TeamWithRole[]>([])
2424const isLoading = ref (true )
2525const error = ref <string | null >(null )
2626const showAddModal = ref (false )
27- const canCreateTeams = ref (false )
2827const userPermissions = ref <string []>([])
2928const deleteSuccessMessage = ref <string | null >(null )
29+ const createSuccessMessage = ref <string | null >(null )
30+ const createErrorMessage = ref <string | null >(null )
3031const searchQuery = ref (' ' )
3132
3233// Team switching state
@@ -66,12 +67,10 @@ const checkPermissions = async () => {
6667 try {
6768 const user = await UserService .getCurrentUser ()
6869 if (user ?.role ?.permissions ) {
69- canCreateTeams .value = user .role .permissions .includes (' teams.create' )
7070 userPermissions .value = user .role .permissions
7171 }
7272 } catch (error ) {
7373 console .error (' Error checking permissions:' , error )
74- canCreateTeams .value = false
7574 userPermissions .value = []
7675 }
7776}
@@ -94,7 +93,7 @@ const initializeSelectedTeam = async () => {
9493 const userTeams = await TeamService .getUserTeams ()
9594 if (userTeams .length > 0 ) {
9695 const storedTeamId = eventBus .getState <string >(' selected_team_id' )
97-
96+
9897 if (storedTeamId ) {
9998 // Try to find the stored team in available teams
10099 const storedTeam = userTeams .find (team => team .id === storedTeamId )
@@ -139,10 +138,33 @@ const fetchTeams = async (forceRefresh = false): Promise<void> => {
139138}
140139
141140// Handle team creation success
142- const handleTeamCreated = async () => {
143- await fetchTeams ()
144- // Emit global event to update sidebar and other components
145- eventBus .emit (' teams-updated' )
141+ const handleTeamCreated = async (teamData ? : { name: string }) => {
142+ // Clear any previous messages
143+ createSuccessMessage .value = null
144+ createErrorMessage .value = null
145+
146+ try {
147+ await fetchTeams ()
148+ // Emit global event to update sidebar and other components
149+ eventBus .emit (' teams-updated' )
150+
151+ // Show success message
152+ if (teamData ?.name ) {
153+ createSuccessMessage .value = t (' teams.addModal.messages.createSuccess' , { teamName: teamData .name })
154+ } else {
155+ createSuccessMessage .value = t (' teams.addModal.messages.createSuccessGeneric' )
156+ }
157+ } catch (error ) {
158+ console .error (' Error refreshing teams after creation:' , error )
159+ createErrorMessage .value = t (' teams.addModal.errors.refreshFailed' )
160+ }
161+ }
162+
163+ // Handle team creation error
164+ const handleTeamCreationError = (errorMessage : string ) => {
165+ // Clear any previous messages
166+ createSuccessMessage .value = null
167+ createErrorMessage .value = errorMessage
146168}
147169
148170// Check for delete success message from query params
@@ -198,7 +220,6 @@ onUnmounted(() => {
198220 <p class =" text-muted-foreground" >{{ t('teams.description') }}</p >
199221 </div >
200222 <Button
201- v-if =" canCreateTeams "
202223 @click =" showAddModal = true "
203224 class="flex items-center gap-2"
204225 >
@@ -207,12 +228,23 @@ onUnmounted(() => {
207228 </Button >
208229 </div >
209230
210- <!-- Delete Success Message -->
231+ <!-- Success Messages -->
211232 <Alert v-if =" deleteSuccessMessage " class="border-green-200 bg-green-50 text-green-800">
212233 <CheckCircle class="h-4 w-4" />
213234 <AlertDescription >{{ deleteSuccessMessage }}</AlertDescription >
214235 </Alert >
215236
237+ <Alert v-if =" createSuccessMessage " class="border-green-200 bg-green-50 text-green-800">
238+ <CheckCircle class="h-4 w-4" />
239+ <AlertDescription >{{ createSuccessMessage }}</AlertDescription >
240+ </Alert >
241+
242+ <!-- Error Messages -->
243+ <Alert v-if =" createErrorMessage " class="border-red-200 bg-red-50 text-red-800">
244+ <AlertCircle class="h-4 w-4" />
245+ <AlertDescription >{{ createErrorMessage }}</AlertDescription >
246+ </Alert >
247+
216248 <!-- Loading State -->
217249 <div v-if =" isLoading" class =" text-muted-foreground" >
218250 {{ t('teams.table.loading') }}
@@ -248,6 +280,7 @@ onUnmounted(() => {
248280 <AddTeamModal
249281 v-model :open =" showAddModal "
250282 @team-created =" handleTeamCreated "
283+ @team-creation-error =" handleTeamCreationError "
251284 />
252285 </div >
253286 </DashboardLayout >
0 commit comments