2
2
3
3
import * as React from "react" ;
4
4
5
- import { ChevronsUpDown , GalleryVerticalEndIcon , Plus } from "lucide-react" ;
5
+ import { useLimits } from "@/ee/limits/swr-handler" ;
6
+ import { PlanEnum } from "@/ee/stripe/constants" ;
7
+ import { ChevronsUpDown , UserRoundPlusIcon } from "lucide-react" ;
6
8
7
9
import {
8
10
DropdownMenu ,
9
11
DropdownMenuContent ,
10
12
DropdownMenuItem ,
11
13
DropdownMenuLabel ,
12
- DropdownMenuSeparator ,
13
- DropdownMenuShortcut ,
14
14
DropdownMenuTrigger ,
15
15
} from "@/components/ui/dropdown-menu" ;
16
16
import {
@@ -23,6 +23,9 @@ import {
23
23
import { Team } from "@/lib/types" ;
24
24
import { cn } from "@/lib/utils" ;
25
25
26
+ import { AddSeatModal } from "../billing/add-seat-modal" ;
27
+ import { UpgradePlanModal } from "../billing/upgrade-plan-modal" ;
28
+ import { AddTeamMembers } from "../teams/add-team-member-modal" ;
26
29
import { Avatar , AvatarFallback } from "../ui/avatar" ;
27
30
28
31
export function TeamSwitcher ( {
@@ -34,7 +37,12 @@ export function TeamSwitcher({
34
37
teams : Team [ ] ;
35
38
setCurrentTeam : ( team : Team ) => void ;
36
39
} ) {
40
+ const [ isTeamMemberInviteModalOpen , setTeamMemberInviteModalOpen ] =
41
+ React . useState < boolean > ( false ) ;
42
+ const [ isAddSeatModalOpen , setAddSeatModalOpen ] =
43
+ React . useState < boolean > ( false ) ;
37
44
const { isMobile } = useSidebar ( ) ;
45
+ const { canAddUsers } = useLimits ( ) ;
38
46
39
47
const switchTeam = ( team : Team ) => {
40
48
localStorage . setItem ( "currentTeamId" , team . id ) ;
@@ -44,13 +52,13 @@ export function TeamSwitcher({
44
52
if ( ! activeTeam ) return null ;
45
53
46
54
return (
47
- < SidebarMenu >
55
+ < SidebarMenu className = "flex flex-row items-center gap-1 group-data-[collapsible=icon]:flex-col group-data-[collapsible=icon]:gap-1.5" >
48
56
< SidebarMenuItem >
49
57
< DropdownMenu >
50
58
< DropdownMenuTrigger asChild >
51
59
< SidebarMenuButton
52
60
size = "lg"
53
- className = "data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground border "
61
+ className = "border data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground"
54
62
>
55
63
< Avatar className = "size-8 rounded" >
56
64
< AvatarFallback className = "rounded" >
@@ -103,6 +111,42 @@ export function TeamSwitcher({
103
111
</ DropdownMenuContent >
104
112
</ DropdownMenu >
105
113
</ SidebarMenuItem >
114
+ < SidebarMenuItem >
115
+ { activeTeam . plan ?. includes ( "free" ) ? (
116
+ < UpgradePlanModal
117
+ clickedPlan = { PlanEnum . Pro }
118
+ trigger = { "invite_team_members" }
119
+ >
120
+ < SidebarMenuButton
121
+ size = "lg"
122
+ className = "size-12 justify-center border data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground group-data-[collapsible=icon]:hidden"
123
+ >
124
+ < UserRoundPlusIcon className = "!size-5" strokeWidth = { 1.5 } />
125
+ </ SidebarMenuButton >
126
+ </ UpgradePlanModal >
127
+ ) : canAddUsers ? (
128
+ < AddTeamMembers
129
+ open = { isTeamMemberInviteModalOpen }
130
+ setOpen = { setTeamMemberInviteModalOpen }
131
+ >
132
+ < SidebarMenuButton
133
+ size = "lg"
134
+ className = "size-12 justify-center border data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground group-data-[collapsible=icon]:hidden"
135
+ >
136
+ < UserRoundPlusIcon className = "!size-5" strokeWidth = { 1.5 } />
137
+ </ SidebarMenuButton >
138
+ </ AddTeamMembers >
139
+ ) : (
140
+ < AddSeatModal open = { isAddSeatModalOpen } setOpen = { setAddSeatModalOpen } >
141
+ < SidebarMenuButton
142
+ size = "lg"
143
+ className = "size-12 justify-center border data-[state=open]:bg-sidebar-accent data-[state=open]:text-sidebar-accent-foreground group-data-[collapsible=icon]:hidden"
144
+ >
145
+ < UserRoundPlusIcon className = "!size-5" strokeWidth = { 1.5 } />
146
+ </ SidebarMenuButton >
147
+ </ AddSeatModal >
148
+ ) }
149
+ </ SidebarMenuItem >
106
150
</ SidebarMenu >
107
151
) ;
108
152
}
0 commit comments