@@ -31,9 +31,20 @@ export interface GenericResultViewTagProps {
31
31
* @param value
32
32
*/
33
33
singleValueMapper ?: ( value : string ) => ReactNode
34
+ onClick ?: ( e : MouseEvent < HTMLDivElement > , tagValue : ReactNode ) => void
35
+ clickBehavior ?: "copy-text"
34
36
}
35
37
36
- export function GenericResultViewTag ( { field, result, icon, label, valueMapper, singleValueMapper } : GenericResultViewTagProps ) {
38
+ export function GenericResultViewTag ( {
39
+ field,
40
+ result,
41
+ icon,
42
+ label,
43
+ valueMapper,
44
+ singleValueMapper,
45
+ clickBehavior = "copy-text" ,
46
+ onClick
47
+ } : GenericResultViewTagProps ) {
37
48
const value = useMemo ( ( ) => {
38
49
const value : string | string [ ] = autoUnwrap ( result [ field ] )
39
50
if ( ! value ) return undefined
@@ -53,17 +64,27 @@ export function GenericResultViewTag({ field, result, icon, label, valueMapper,
53
64
[ copy ]
54
65
)
55
66
67
+ const handleClick = useCallback (
68
+ ( value : ReactNode , e : MouseEvent < HTMLDivElement > ) => {
69
+ if ( onClick ) onClick ( e , value )
70
+ if ( clickBehavior === "copy-text" ) {
71
+ copyTagValue ( e )
72
+ }
73
+ } ,
74
+ [ clickBehavior , copyTagValue , onClick ]
75
+ )
76
+
56
77
const base = useCallback (
57
78
( value : ReactNode ) => {
58
79
return (
59
- < Badge variant = "secondary" className = "rfs-truncate" onClick = { copyTagValue } >
80
+ < Badge variant = "secondary" className = "rfs-truncate" onClick = { ( e ) => handleClick ( value , e ) } >
60
81
< span className = "rfs-flex rfs-truncate" >
61
82
{ icon } { value }
62
83
</ span >
63
84
</ Badge >
64
85
)
65
86
} ,
66
- [ copyTagValue , icon ]
87
+ [ handleClick , icon ]
67
88
)
68
89
69
90
if ( ! label ) return base ( value )
0 commit comments