@@ -16,6 +16,7 @@ import { useOutsideClickDetector } from "@plane/hooks";
1616import { useTranslation } from "@plane/i18n" ;
1717import { Logo } from "@plane/propel/emoji-icon-picker" ;
1818import { ArchiveIcon , ChevronRightIcon } from "@plane/propel/icons" ;
19+ import { IconButton } from "@plane/propel/icon-button" ;
1920import { Tooltip } from "@plane/propel/tooltip" ;
2021import { CustomMenu , DropIndicator , DragHandle , ControlLink } from "@plane/ui" ;
2122import { cn } from "@plane/utils" ;
@@ -80,7 +81,7 @@ export const SidebarProjectsListItem = observer(function SidebarProjectsListItem
8081 const isProjectListOpen = getIsProjectListOpen ( projectId ) ;
8182 const [ instruction , setInstruction ] = useState < "DRAG_OVER" | "DRAG_BELOW" | undefined > ( undefined ) ;
8283 // refs
83- const actionSectionRef = useRef < HTMLDivElement | null > ( null ) ;
84+ const actionSectionRef = useRef < HTMLButtonElement | null > ( null ) ;
8485 const projectRef = useRef < HTMLDivElement | null > ( null ) ;
8586 const dragHandleRef = useRef < HTMLButtonElement | null > ( null ) ;
8687 // router
@@ -341,31 +342,33 @@ export const SidebarProjectsListItem = observer(function SidebarProjectsListItem
341342 </ div >
342343 ) }
343344 </ ControlLink >
344- < CustomMenu
345- customButton = {
346- < span
347- ref = { actionSectionRef }
348- className = "grid place-items-center p-0.5 text-placeholder hover:bg-layer-1 rounded-sm"
349- onClick = { ( ) => setIsMenuActive ( ! isMenuActive ) }
350- >
351- < MoreHorizontal className = "size-4" />
352- </ span >
353- }
354- className = { cn (
355- "opacity-0 pointer-events-none flex-shrink-0 group-hover/project-item:opacity-100 group-hover/project-item:pointer-events-auto" ,
356- {
357- "opacity-100 pointer-events-auto" : isMenuActive ,
345+ < div className = "flex items-center gap-1" >
346+ < CustomMenu
347+ customButton = {
348+ < IconButton
349+ ref = { actionSectionRef }
350+ variant = "ghost"
351+ size = "sm"
352+ icon = { MoreHorizontal }
353+ onClick = { ( ) => setIsMenuActive ( ! isMenuActive ) }
354+ className = "text-placeholder"
355+ />
358356 }
359- ) }
360- customButtonClassName = "grid place-items-center"
361- placement = "bottom-start"
362- ariaLabel = { t ( "aria_labels.projects_sidebar.toggle_quick_actions_menu" ) }
363- useCaptureForOutsideClick
364- closeOnSelect
365- onMenuClose = { ( ) => setIsMenuActive ( false ) }
366- >
367- { /* TODO: Removed is_favorite logic due to the optimization in projects API */ }
368- { /* {isAuthorized && (
357+ className = { cn (
358+ "opacity-0 pointer-events-none flex-shrink-0 group-hover/project-item:opacity-100 group-hover/project-item:pointer-events-auto" ,
359+ {
360+ "opacity-100 pointer-events-auto" : isMenuActive ,
361+ }
362+ ) }
363+ customButtonClassName = "grid place-items-center"
364+ placement = "bottom-start"
365+ ariaLabel = { t ( "aria_labels.projects_sidebar.toggle_quick_actions_menu" ) }
366+ useCaptureForOutsideClick
367+ closeOnSelect
368+ onMenuClose = { ( ) => setIsMenuActive ( false ) }
369+ >
370+ { /* TODO: Removed is_favorite logic due to the optimization in projects API */ }
371+ { /* {isAuthorized && (
369372 <CustomMenu.MenuItem
370373 onClick={project.is_favorite ? handleRemoveFromFavorites : handleAddToFavorites}
371374 >
@@ -380,79 +383,76 @@ export const SidebarProjectsListItem = observer(function SidebarProjectsListItem
380383 </CustomMenu.MenuItem>
381384 )} */ }
382385
383- { /* publish project settings */ }
384- { isAdmin && (
385- < CustomMenu . MenuItem onClick = { ( ) => setPublishModal ( true ) } >
386- < div className = "relative flex flex-shrink-0 items-center justify-start gap-2" >
387- < div className = "flex h-4 w-4 cursor-pointer items-center justify-center rounded-sm text-secondary transition-all duration-300 hover:bg-layer-1" >
388- < Share2 className = "h-3.5 w-3.5 stroke-[1.5]" />
386+ { /* publish project settings */ }
387+ { isAdmin && (
388+ < CustomMenu . MenuItem onClick = { ( ) => setPublishModal ( true ) } >
389+ < div className = "relative flex flex-shrink-0 items-center justify-start gap-2" >
390+ < div className = "flex h-4 w-4 cursor-pointer items-center justify-center rounded-sm text-secondary transition-all duration-300 hover:bg-layer-1" >
391+ < Share2 className = "h-3.5 w-3.5 stroke-[1.5]" />
392+ </ div >
393+ < div > { t ( "publish_project" ) } </ div >
389394 </ div >
390- < div > { t ( "publish_project" ) } </ div >
391- </ div >
395+ </ CustomMenu . MenuItem >
396+ ) }
397+ < CustomMenu . MenuItem onClick = { handleCopyText } >
398+ < span className = "flex items-center justify-start gap-2" >
399+ < LinkIcon className = "h-3.5 w-3.5 stroke-[1.5]" />
400+ < span > { t ( "copy_link" ) } </ span >
401+ </ span >
392402 </ CustomMenu . MenuItem >
393- ) }
394- < CustomMenu . MenuItem onClick = { handleCopyText } >
395- < span className = "flex items-center justify-start gap-2" >
396- < LinkIcon className = "h-3.5 w-3.5 stroke-[1.5]" />
397- < span > { t ( "copy_link" ) } </ span >
398- </ span >
399- </ CustomMenu . MenuItem >
400- { isAuthorized && (
403+ { isAuthorized && (
404+ < CustomMenu . MenuItem
405+ onClick = { ( ) => {
406+ router . push ( `/${ workspaceSlug } /projects/${ project ?. id } /archives/issues` ) ;
407+ } }
408+ >
409+ < div className = "flex items-center justify-start gap-2 cursor-pointer" >
410+ < ArchiveIcon className = "h-3.5 w-3.5 stroke-[1.5]" />
411+ < span > { t ( "archives" ) } </ span >
412+ </ div >
413+ </ CustomMenu . MenuItem >
414+ ) }
401415 < CustomMenu . MenuItem
402416 onClick = { ( ) => {
403- router . push ( `/${ workspaceSlug } /projects/${ project ?. id } /archives/issues ` ) ;
417+ router . push ( `/${ workspaceSlug } /settings/ projects/${ project ?. id } ` ) ;
404418 } }
405419 >
406420 < div className = "flex items-center justify-start gap-2 cursor-pointer" >
407- < ArchiveIcon className = "h-3.5 w-3.5 stroke-[1.5]" />
408- < span > { t ( "archives " ) } </ span >
421+ < Settings className = "h-3.5 w-3.5 stroke-[1.5]" />
422+ < span > { t ( "settings " ) } </ span >
409423 </ div >
410424 </ CustomMenu . MenuItem >
411- ) }
412- < CustomMenu . MenuItem
413- onClick = { ( ) => {
414- router . push ( `/${ workspaceSlug } /settings/projects/${ project ?. id } ` ) ;
415- } }
416- >
417- < div className = "flex items-center justify-start gap-2 cursor-pointer" >
418- < Settings className = "h-3.5 w-3.5 stroke-[1.5]" />
419- < span > { t ( "settings" ) } </ span >
420- </ div >
421- </ CustomMenu . MenuItem >
422- { /* leave project */ }
423- { ! isAuthorized && (
424- < CustomMenu . MenuItem
425- onClick = { handleLeaveProject }
426- data-ph-element = { MEMBER_TRACKER_ELEMENTS . SIDEBAR_PROJECT_QUICK_ACTIONS }
427- >
428- < div className = "flex items-center justify-start gap-2" >
429- < LogOut className = "h-3.5 w-3.5 stroke-[1.5]" />
430- < span > { t ( "leave_project" ) } </ span >
431- </ div >
432- </ CustomMenu . MenuItem >
433- ) }
434- </ CustomMenu >
435- { isAccordionMode && (
436- < Disclosure . Button
437- as = "button"
438- type = "button"
439- className = { cn ( "hidden group-hover/project-item:inline-block p-0.5 rounded-sm hover:bg-layer-1" , {
440- "inline-block" : isMenuActive ,
441- } ) }
442- onClick = { ( ) => setIsProjectListOpen ( ! isProjectListOpen ) }
443- aria-label = { t (
444- isProjectListOpen
445- ? "aria_labels.projects_sidebar.close_project_menu"
446- : "aria_labels.projects_sidebar.open_project_menu"
425+ { /* leave project */ }
426+ { ! isAuthorized && (
427+ < CustomMenu . MenuItem
428+ onClick = { handleLeaveProject }
429+ data-ph-element = { MEMBER_TRACKER_ELEMENTS . SIDEBAR_PROJECT_QUICK_ACTIONS }
430+ >
431+ < div className = "flex items-center justify-start gap-2" >
432+ < LogOut className = "h-3.5 w-3.5 stroke-[1.5]" />
433+ < span > { t ( "leave_project" ) } </ span >
434+ </ div >
435+ </ CustomMenu . MenuItem >
447436 ) }
448- >
449- < ChevronRightIcon
450- className = { cn ( "size-4 flex-shrink-0 text-placeholder transition-transform" , {
437+ </ CustomMenu >
438+ { isAccordionMode && (
439+ < IconButton
440+ variant = "ghost"
441+ size = "sm"
442+ icon = { ChevronRightIcon }
443+ onClick = { ( ) => setIsProjectListOpen ( ! isProjectListOpen ) }
444+ className = { cn ( "hidden group-hover/project-item:inline-flex text-placeholder transition-transform" , {
445+ "inline-flex" : isMenuActive ,
451446 "rotate-90" : isProjectListOpen ,
452447 } ) }
448+ aria-label = { t (
449+ isProjectListOpen
450+ ? "aria_labels.projects_sidebar.close_project_menu"
451+ : "aria_labels.projects_sidebar.open_project_menu"
452+ ) }
453453 />
454- </ Disclosure . Button >
455- ) }
454+ ) }
455+ </ div >
456456 </ >
457457 </ div >
458458 { isAccordionMode && (
0 commit comments