11import { CircularProgress } from '@mui/material' ;
2- import { useMemo , useState } from 'react' ;
2+ import { useCallback , useMemo , useState } from 'react' ;
33import { useTranslation } from 'react-i18next' ;
44
55import { Role , Workspace } from '@/application/types' ;
66import MoreActions from '@/components/app/workspaces/MoreActions' ;
77import { Avatar , AvatarFallback } from '@/components/ui/avatar' ;
8- import { DropdownMenuItem , DropdownMenuItemTick } from '@/components/ui/dropdown-menu' ;
8+ import { DropdownMenuItem , DropdownMenuItemTick , dropdownMenuItemVariants } from '@/components/ui/dropdown-menu' ;
99import { Tooltip , TooltipContent , TooltipTrigger } from '@/components/ui/tooltip' ;
1010
1111export function WorkspaceItem ( {
@@ -17,6 +17,7 @@ export function WorkspaceItem({
1717 onUpdate,
1818 onDelete,
1919 onLeave,
20+ useDropdownItem = true ,
2021} : {
2122 showActions ?: boolean ;
2223 workspace : Workspace ;
@@ -26,6 +27,7 @@ export function WorkspaceItem({
2627 onUpdate ?: ( workspace : Workspace ) => void ;
2728 onDelete ?: ( workspace : Workspace ) => void ;
2829 onLeave ?: ( workspace : Workspace ) => void ;
30+ useDropdownItem ?: boolean ;
2931} ) {
3032 const { t } = useTranslation ( ) ;
3133 const [ hovered , setHovered ] = useState ( false ) ;
@@ -69,18 +71,13 @@ export function WorkspaceItem({
6971 ) ;
7072 } , [ changeLoading , currentWorkspaceId , hovered , onDelete , onLeave , onUpdate , showActions , workspace ] ) ;
7173
72- return (
73- < DropdownMenuItem
74- key = { workspace . id }
75- data-testid = 'workspace-item'
76- className = { 'relative' }
77- onSelect = { async ( ) => {
78- if ( workspace . id === currentWorkspaceId ) return ;
79- void onChange ( workspace . id ) ;
80- } }
81- onMouseEnter = { ( ) => setHovered ( true ) }
82- onMouseLeave = { ( ) => setHovered ( false ) }
83- >
74+ const handleSelect = useCallback ( ( ) => {
75+ if ( workspace . id === currentWorkspaceId ) return ;
76+ void onChange ( workspace . id ) ;
77+ } , [ currentWorkspaceId , onChange , workspace . id ] ) ;
78+
79+ const content = (
80+ < >
8481 < Avatar shape = { 'square' } size = { 'xs' } >
8582 < AvatarFallback name = { workspace . name } >
8683 { workspace . icon ? < span className = 'text-lg' > { workspace . icon } </ span > : workspace . name }
@@ -112,6 +109,35 @@ export function WorkspaceItem({
112109 ) }
113110 </ div >
114111 { renderActions }
115- </ DropdownMenuItem >
112+ </ >
113+ ) ;
114+
115+ if ( useDropdownItem ) {
116+ return (
117+ < DropdownMenuItem
118+ key = { workspace . id }
119+ data-testid = 'workspace-item'
120+ className = { 'relative' }
121+ onSelect = { handleSelect }
122+ onMouseEnter = { ( ) => setHovered ( true ) }
123+ onMouseLeave = { ( ) => setHovered ( false ) }
124+ >
125+ { content }
126+ </ DropdownMenuItem >
127+ ) ;
128+ }
129+
130+ return (
131+ < button
132+ type = 'button'
133+ key = { workspace . id }
134+ data-testid = 'workspace-item'
135+ className = { dropdownMenuItemVariants ( { variant : 'default' , className : 'relative w-full text-left' } ) }
136+ onClick = { handleSelect }
137+ onMouseEnter = { ( ) => setHovered ( true ) }
138+ onMouseLeave = { ( ) => setHovered ( false ) }
139+ >
140+ { content }
141+ </ button >
116142 ) ;
117143}
0 commit comments