@@ -23,6 +23,11 @@ const recommendationsContent = _content as IRecommendationsStatic
23
23
const utmSource = 'redisinsight'
24
24
const utmMedium = 'recommendation'
25
25
26
+ interface ITelemetry {
27
+ telemetryName : string
28
+ onClickLink ?: ( ) => void
29
+ }
30
+
26
31
const badgesContent = [
27
32
{ id : 'code_changes' , icon : < CodeIcon className = { styles . badgeIcon } /> , name : 'Code Changes' } ,
28
33
{ id : 'configuration_changes' , icon : < ConfigurationIcon className = { styles . badgeIcon } /> , name : 'Configuration Changes' } ,
@@ -87,7 +92,7 @@ const addUtmToLink = (href: string, telemetryName: string): string => {
87
92
const renderContentElement = (
88
93
{ type, value : jsonValue , parameter } : IRecommendationContent ,
89
94
params : any ,
90
- telemetryName : string ,
95
+ telemetry : ITelemetry ,
91
96
insights : boolean ,
92
97
idx : number
93
98
) => {
@@ -96,8 +101,8 @@ const renderContentElement = (
96
101
case 'paragraph' :
97
102
return (
98
103
< EuiTextColor
99
- data-testid = { `paragraph-${ telemetryName } -${ idx } ` }
100
- key = { `${ telemetryName } -${ idx } ` }
104
+ data-testid = { `paragraph-${ telemetry . telemetryName } -${ idx } ` }
105
+ key = { `${ telemetry . telemetryName } -${ idx } ` }
101
106
component = "div"
102
107
className = { cx ( styles . text , { [ styles . insights ] : insights } ) }
103
108
color = "subdued"
@@ -108,9 +113,9 @@ const renderContentElement = (
108
113
case 'code' :
109
114
return (
110
115
< EuiTextColor
111
- data-testid = { `code-${ telemetryName } -${ idx } ` }
116
+ data-testid = { `code-${ telemetry . telemetryName } -${ idx } ` }
112
117
className = { cx ( styles . code , { [ styles . insights ] : insights } ) }
113
- key = { `${ telemetryName } -${ idx } ` }
118
+ key = { `${ telemetry . telemetryName } -${ idx } ` }
114
119
color = "subdued"
115
120
>
116
121
< code className = { cx ( styles . span , styles . text ) } >
@@ -121,8 +126,8 @@ const renderContentElement = (
121
126
case 'span' :
122
127
return (
123
128
< EuiTextColor
124
- data-testid = { `span-${ telemetryName } -${ idx } ` }
125
- key = { `${ telemetryName } -${ idx } ` }
129
+ data-testid = { `span-${ telemetry . telemetryName } -${ idx } ` }
130
+ key = { `${ telemetry . telemetryName } -${ idx } ` }
126
131
color = "subdued"
127
132
className = { cx ( styles . span , styles . text , { [ styles . insights ] : ! ! insights } ) }
128
133
>
@@ -132,23 +137,24 @@ const renderContentElement = (
132
137
case 'link' :
133
138
return (
134
139
< EuiLink
135
- key = { `${ telemetryName } -${ idx } ` }
140
+ key = { `${ telemetry . telemetryName } -${ idx } ` }
136
141
external = { false }
137
- data-testid = { `link-${ telemetryName } -${ idx } ` }
142
+ data-testid = { `link-${ telemetry . telemetryName } -${ idx } ` }
138
143
target = "_blank"
139
- href = { addUtmToLink ( value . href , telemetryName ) }
144
+ href = { addUtmToLink ( value . href , telemetry . telemetryName ) }
145
+ onClick = { ( ) => telemetry . onClickLink ?.( ) }
140
146
>
141
147
{ value . name }
142
148
</ EuiLink >
143
149
)
144
150
case 'code-link' :
145
151
return (
146
152
< EuiLink
147
- key = { `${ telemetryName } -${ idx } ` }
153
+ key = { `${ telemetry . telemetryName } -${ idx } ` }
148
154
external = { false }
149
- data-testid = { `code-link-${ telemetryName } -${ idx } ` }
155
+ data-testid = { `code-link-${ telemetry . telemetryName } -${ idx } ` }
150
156
target = "_blank"
151
- href = { addUtmToLink ( value . href , telemetryName ) }
157
+ href = { addUtmToLink ( value . href , telemetry . telemetryName ) }
152
158
>
153
159
< EuiTextColor
154
160
className = { cx ( styles . code , { [ styles . insights ] : insights } ) }
@@ -163,21 +169,25 @@ const renderContentElement = (
163
169
case 'spacer' :
164
170
return (
165
171
< EuiSpacer
166
- data-testid = { `spacer-${ telemetryName } -${ idx } ` }
167
- key = { `${ telemetryName } -${ idx } ` }
172
+ data-testid = { `spacer-${ telemetry . telemetryName } -${ idx } ` }
173
+ key = { `${ telemetry . telemetryName } -${ idx } ` }
168
174
size = { value as SpacerSize }
169
175
/>
170
176
)
171
177
case 'list' :
172
178
return (
173
- < ul className = { styles . list } data-testid = { `list-${ telemetryName } -${ idx } ` } key = { `${ telemetryName } -${ idx } ` } >
179
+ < ul
180
+ className = { styles . list }
181
+ data-testid = { `list-${ telemetry . telemetryName } -${ idx } ` }
182
+ key = { `${ telemetry . telemetryName } -${ idx } ` }
183
+ >
174
184
{ isArray ( jsonValue ) && jsonValue . map ( ( listElement : IRecommendationContent [ ] , idx ) => (
175
185
< li
176
186
className = { cx ( styles . listItem , { [ styles . insights ] : insights } ) }
177
187
// eslint-disable-next-line react/no-array-index-key
178
188
key = { `list-item-${ listElement [ 0 ] } -${ idx } ` }
179
189
>
180
- { renderRecommendationContent ( listElement , params , telemetryName , insights ) }
190
+ { renderRecommendationContent ( listElement , params , telemetry , insights ) }
181
191
</ li >
182
192
) ) }
183
193
</ ul >
@@ -190,10 +200,10 @@ const renderContentElement = (
190
200
const renderRecommendationContent = (
191
201
elements : IRecommendationContent [ ] = [ ] ,
192
202
params : any ,
193
- telemetryName : string ,
203
+ telemetry : ITelemetry ,
194
204
insights : boolean = false
195
205
) => (
196
- elements ?. map ( ( item , idx ) => renderContentElement ( item , params , telemetryName , insights , idx ) ) )
206
+ elements ?. map ( ( item , idx ) => renderContentElement ( item , params , telemetry , insights , idx ) ) )
197
207
198
208
const sortRecommendations = ( recommendations : any [ ] ) => sortBy ( recommendations , [
199
209
( { name } ) => name !== 'searchJSON' ,
0 commit comments