@@ -8,6 +8,7 @@ import usePartnersCount from "@/lib/swr/use-partners-count";
88import useProgram from "@/lib/swr/use-program" ;
99import useWorkspace from "@/lib/swr/use-workspace" ;
1010import { EnrolledPartnerProps } from "@/lib/types" ;
11+ import { ACTIVE_ENROLLMENT_STATUSES } from "@/lib/zod/schemas/partners" ;
1112import { useArchivePartnerModal } from "@/ui/modals/archive-partner-modal" ;
1213import { useBanPartnerModal } from "@/ui/modals/ban-partner-modal" ;
1314import { useBulkArchivePartnersModal } from "@/ui/modals/bulk-archive-partners-modal" ;
@@ -27,6 +28,7 @@ import { ProgramEnrollmentStatus } from "@dub/prisma/client";
2728import {
2829 AnimatedSizeContainer ,
2930 Button ,
31+ DynamicTooltipWrapper ,
3032 EditColumnsButton ,
3133 Filter ,
3234 Icon ,
@@ -122,7 +124,7 @@ export function PartnersTable() {
122124 const status = (
123125 searchParams . get ( "status" ) || searchParams . get ( "search" )
124126 ? undefined
125- : "approved "
127+ : "approved_invited "
126128 ) as ProgramEnrollmentStatus ;
127129
128130 const sortBy =
@@ -529,7 +531,7 @@ export function PartnersTable() {
529531 } }
530532 />
531533
532- { ( status === "approved" ||
534+ { ( ! searchParams . get ( " status" ) ||
533535 searchParams . get ( "status" ) === "approved" ) && (
534536 < BulkActionsMenu
535537 table = { table }
@@ -651,6 +653,12 @@ function BulkActionsMenu({
651653
652654 const partnerWord = selectedPartners . length === 1 ? "partner" : "partners" ;
653655
656+ const disabledTooltip = selectedPartners . some (
657+ ( partner ) => ! ACTIVE_ENROLLMENT_STATUSES . includes ( partner . status ) ,
658+ )
659+ ? `You cannot perform this action because one or more partners are not in ${ ACTIVE_ENROLLMENT_STATUSES . join ( ", " ) } statuses.`
660+ : undefined ;
661+
654662 return (
655663 < Popover
656664 openPopover = { isOpen }
@@ -666,6 +674,7 @@ function BulkActionsMenu({
666674 onArchivePartners ( selectedPartners ) ;
667675 setIsOpen ( false ) ;
668676 } }
677+ disabledTooltip = { disabledTooltip }
669678 />
670679 < MenuItem
671680 icon = { CircleXmark }
@@ -674,6 +683,7 @@ function BulkActionsMenu({
674683 onDeactivatePartners ( selectedPartners ) ;
675684 setIsOpen ( false ) ;
676685 } }
686+ disabledTooltip = { disabledTooltip }
677687 />
678688 < MenuItem
679689 icon = { UserDelete }
@@ -683,6 +693,7 @@ function BulkActionsMenu({
683693 onBanPartners ( selectedPartners ) ;
684694 setIsOpen ( false ) ;
685695 } }
696+ disabledTooltip = { disabledTooltip }
686697 />
687698 </ Command . Group >
688699 </ Command . List >
@@ -939,11 +950,13 @@ function MenuItem({
939950 label,
940951 onSelect,
941952 variant = "default" ,
953+ disabledTooltip,
942954} : {
943955 icon : Icon ;
944956 label : string ;
945957 onSelect : ( ) => void ;
946958 variant ?: "default" | "danger" ;
959+ disabledTooltip ?: string | boolean ;
947960} ) {
948961 const variantStyles = {
949962 default : {
@@ -959,16 +972,22 @@ function MenuItem({
959972 const { text, icon } = variantStyles [ variant ] ;
960973
961974 return (
962- < Command . Item
963- className = { cn (
964- "flex cursor-pointer select-none items-center gap-2 whitespace-nowrap rounded-md p-2 text-sm" ,
965- "data-[selected=true]:bg-neutral-100" ,
966- text ,
967- ) }
968- onSelect = { onSelect }
975+ < DynamicTooltipWrapper
976+ tooltipProps = { disabledTooltip ? { content : disabledTooltip } : undefined }
969977 >
970- < IconComp className = { cn ( "size-4 shrink-0" , icon ) } />
971- { label }
972- </ Command . Item >
978+ < Command . Item
979+ className = { cn (
980+ "flex cursor-pointer select-none items-center gap-2 whitespace-nowrap rounded-md p-2 text-sm" ,
981+ disabledTooltip
982+ ? "cursor-not-allowed opacity-75"
983+ : "data-[selected=true]:bg-neutral-100" ,
984+ text ,
985+ ) }
986+ onSelect = { disabledTooltip ? undefined : onSelect }
987+ >
988+ < IconComp className = { cn ( "size-4 shrink-0" , icon ) } />
989+ { label }
990+ </ Command . Item >
991+ </ DynamicTooltipWrapper >
973992 ) ;
974993}
0 commit comments