@@ -11,6 +11,8 @@ import Button from 'app/components/button';
11
11
import DropdownButton from 'app/components/dropdownButton' ;
12
12
import DropdownControl from 'app/components/dropdownControl' ;
13
13
import Feature from 'app/components/acl/feature' ;
14
+ import FeatureDisabled from 'app/components/acl/featureDisabled' ;
15
+ import Hovercard from 'app/components/hovercard' ;
14
16
import Input from 'app/components/forms/input' ;
15
17
import space from 'app/styles/space' ;
16
18
import { IconDelete } from 'app/icons' ;
@@ -204,8 +206,7 @@ class SavedQueryButtonGroup extends React.PureComponent<Props, State> {
204
206
} ) ;
205
207
} ;
206
208
207
- renderButtonSaveAs ( ) {
208
- const { disabled} = this . props ;
209
+ renderButtonSaveAs ( disabled : boolean ) {
209
210
const { queryName} = this . state ;
210
211
/**
211
212
* For a great UX, we should focus on `ButtonSaveInput` when `ButtonSave`
@@ -252,7 +253,7 @@ class SavedQueryButtonGroup extends React.PureComponent<Props, State> {
252
253
) ;
253
254
}
254
255
255
- renderButtonSave ( ) {
256
+ renderButtonSave ( disabled : boolean ) {
256
257
const { isNewQuery, isEditingQuery} = this . state ;
257
258
258
259
// Existing query that hasn't been modified.
@@ -270,21 +271,21 @@ class SavedQueryButtonGroup extends React.PureComponent<Props, State> {
270
271
< Button
271
272
onClick = { this . handleUpdateQuery }
272
273
data-test-id = "discover2-savedquery-button-update"
273
- disabled = { this . props . disabled }
274
+ disabled = { disabled }
274
275
>
275
276
< IconUpdate />
276
277
{ t ( 'Save Changes' ) }
277
278
</ Button >
278
- { this . renderButtonSaveAs ( ) }
279
+ { this . renderButtonSaveAs ( disabled ) }
279
280
</ React . Fragment >
280
281
) ;
281
282
}
282
283
283
284
// Is a new query enable saveas
284
- return this . renderButtonSaveAs ( ) ;
285
+ return this . renderButtonSaveAs ( disabled ) ;
285
286
}
286
287
287
- renderButtonDelete ( ) {
288
+ renderButtonDelete ( disabled : boolean ) {
288
289
const { isNewQuery} = this . state ;
289
290
290
291
if ( isNewQuery ) {
@@ -295,7 +296,7 @@ class SavedQueryButtonGroup extends React.PureComponent<Props, State> {
295
296
< Button
296
297
data-test-id = "discover2-savedquery-button-delete"
297
298
onClick = { this . handleDeleteQuery }
298
- disabled = { this . props . disabled }
299
+ disabled = { disabled }
299
300
icon = { < IconDelete /> }
300
301
/>
301
302
) ;
@@ -319,13 +320,42 @@ class SavedQueryButtonGroup extends React.PureComponent<Props, State> {
319
320
320
321
render ( ) {
321
322
const { organization} = this . props ;
323
+
324
+ const renderDisabled = p => (
325
+ < Hovercard
326
+ body = {
327
+ < FeatureDisabled
328
+ features = { p . features }
329
+ hideHelpToggle
330
+ message = { t ( 'Discover queries are disabled' ) }
331
+ featureName = { t ( 'Discover queries' ) }
332
+ />
333
+ }
334
+ >
335
+ { p . children ( p ) }
336
+ </ Hovercard >
337
+ ) ;
338
+
339
+ const renderQueryButton = ( renderFunc : ( disabled : boolean ) => React . ReactNode ) => {
340
+ return (
341
+ < Feature
342
+ organization = { organization }
343
+ features = { [ 'discover-query' ] }
344
+ hookName = "feature-disabled:discover-saved-query-create"
345
+ renderDisabled = { renderDisabled }
346
+ >
347
+ { ( { hasFeature} ) => renderFunc ( ! hasFeature || this . props . disabled ) }
348
+ </ Feature >
349
+ ) ;
350
+ } ;
351
+
322
352
return (
323
353
< ButtonGroup >
324
- { this . renderButtonSave ( ) }
354
+ { renderQueryButton ( disabled => this . renderButtonSave ( disabled ) ) }
325
355
< Feature organization = { organization } features = { [ 'incidents' ] } >
326
356
{ ( { hasFeature} ) => hasFeature && this . renderButtonCreateAlert ( ) }
327
357
</ Feature >
328
- { this . renderButtonDelete ( ) }
358
+ { renderQueryButton ( disabled => this . renderButtonDelete ( disabled ) ) }
329
359
</ ButtonGroup >
330
360
) ;
331
361
}
0 commit comments