5
5
TooltipProvider ,
6
6
TooltipTrigger ,
7
7
} from '@/components/ui/tooltip' ;
8
+ import { cn } from '@/libs/utils' ;
8
9
import { ReactElement } from 'react' ;
9
10
10
11
interface Props {
@@ -23,63 +24,73 @@ export default function ConstraintsCell(props: Props): ReactElement {
23
24
< div className = "flex flex-col lg:flex-row items-start gap-1" >
24
25
{ isPrimaryKey && (
25
26
< div >
26
- < Badge
27
- variant = "outline"
28
- className = "text-xs bg-blue-100 text-gray-800 cursor-default dark:bg-blue-200 dark:text-gray-900"
29
- >
30
- Primary Key
31
- </ Badge >
27
+ < HoverBadge
28
+ badgeText = "P"
29
+ tooltipContent = "Primary Key"
30
+ badgeClassName = "bg-blue-100 dark:bg-blue-200"
31
+ />
32
32
</ div >
33
33
) }
34
34
{ isForeignKey && (
35
35
< div >
36
- < TooltipProvider >
37
- < Tooltip delayDuration = { 200 } >
38
- < TooltipTrigger >
39
- < Badge
40
- variant = "outline"
41
- className = "text-xs bg-orange-100 text-gray-800 cursor-default dark:dark:text-gray-900 dark:bg-orange-300"
42
- >
43
- Foreign Key
44
- </ Badge >
45
- </ TooltipTrigger >
46
- < TooltipContent >
47
- { fkCols . map ( ( col ) => `Primary Key: ${ col } ` ) . join ( '\n' ) }
48
- </ TooltipContent >
49
- </ Tooltip >
50
- </ TooltipProvider >
36
+ < HoverBadge
37
+ badgeText = "FK"
38
+ tooltipContent = { `FK: ${ fkCols
39
+ . map ( ( col ) => `Primary Key: ${ col } ` )
40
+ . join ( '\n' ) } `}
41
+ badgeClassName = "bg-orange-100 dark:bg-orange-300"
42
+ />
51
43
</ div >
52
44
) }
53
45
{ isVirtualForeignKey && (
54
46
< div >
55
- < TooltipProvider >
56
- < Tooltip delayDuration = { 200 } >
57
- < TooltipTrigger >
58
- < Badge
59
- variant = "outline"
60
- className = "text-xs bg-orange-100 text-gray-800 cursor-default dark:dark:text-gray-900 dark:bg-orange-300"
61
- >
62
- Virtual Foreign Key
63
- </ Badge >
64
- </ TooltipTrigger >
65
- < TooltipContent >
66
- { vfkCols . map ( ( col ) => `Primary Key: ${ col } ` ) . join ( '\n' ) }
67
- </ TooltipContent >
68
- </ Tooltip >
69
- </ TooltipProvider >
47
+ < HoverBadge
48
+ badgeText = "VFK"
49
+ tooltipContent = { `VFK: ${ vfkCols
50
+ . map ( ( col ) => `Primary Key: ${ col } ` )
51
+ . join ( '\n' ) } `}
52
+ badgeClassName = "bg-orange-100 dark:bg-orange-300"
53
+ />
70
54
</ div >
71
55
) }
72
56
{ isUnique && (
73
57
< div >
74
- < Badge
75
- variant = "outline"
76
- className = "text-xs bg-purple-100 text-gray-800 cursor-default dark:bg-purple-300 dark:text-gray-900"
77
- >
78
- Unique
79
- </ Badge >
58
+ < HoverBadge
59
+ badgeText = "U"
60
+ tooltipContent = "Unique Key"
61
+ badgeClassName = "bg-red-100 dark:bg-red-300"
62
+ />
80
63
</ div >
81
64
) }
82
65
</ div >
83
66
</ span >
84
67
) ;
85
68
}
69
+
70
+ interface HoverBadgeProps {
71
+ badgeText : string ;
72
+ tooltipContent : string ;
73
+ badgeClassName ?: string ;
74
+ }
75
+
76
+ function HoverBadge ( props : HoverBadgeProps ) : ReactElement {
77
+ const { badgeText, tooltipContent, badgeClassName } = props ;
78
+ return (
79
+ < TooltipProvider >
80
+ < Tooltip delayDuration = { 200 } >
81
+ < TooltipTrigger >
82
+ < Badge
83
+ variant = "outline"
84
+ className = { cn (
85
+ 'text-xs cursor-default text-gray-800 dark:text-gray-900' ,
86
+ badgeClassName
87
+ ) }
88
+ >
89
+ { badgeText }
90
+ </ Badge >
91
+ </ TooltipTrigger >
92
+ < TooltipContent > { tooltipContent } </ TooltipContent >
93
+ </ Tooltip >
94
+ </ TooltipProvider >
95
+ ) ;
96
+ }
0 commit comments