@@ -33,7 +33,7 @@ import {
3333} from '@elastic/eui' ;
3434
3535import { i18n } from '@kbn/i18n' ;
36- import React , { useEffect , useState , Fragment , useRef } from 'react' ;
36+ import React , { useCallback , useEffect , useState , Fragment , useRef } from 'react' ;
3737import { sortBy } from 'lodash' ;
3838import { SavedQuery , SavedQueryService } from '../..' ;
3939import { SavedQueryListItem } from './saved_query_list_item' ;
@@ -88,9 +88,51 @@ export function SavedQueryManagementComponent({
8888 }
8989 } , [ isOpen , activePage , savedQueryService ] ) ;
9090
91- const goToPage = ( pageNumber : number ) => {
92- setActivePage ( pageNumber ) ;
93- } ;
91+ const handleTogglePopover = useCallback ( ( ) => setIsOpen ( ( currentState ) => ! currentState ) , [
92+ setIsOpen ,
93+ ] ) ;
94+
95+ const handleClosePopover = useCallback ( ( ) => setIsOpen ( false ) , [ ] ) ;
96+
97+ const handleSave = useCallback ( ( ) => {
98+ handleClosePopover ( ) ;
99+ onSave ( ) ;
100+ } , [ handleClosePopover , onSave ] ) ;
101+
102+ const handleSaveAsNew = useCallback ( ( ) => {
103+ handleClosePopover ( ) ;
104+ onSaveAsNew ( ) ;
105+ } , [ handleClosePopover , onSaveAsNew ] ) ;
106+
107+ const handleSelect = useCallback (
108+ ( savedQueryToSelect ) => {
109+ handleClosePopover ( ) ;
110+ onLoad ( savedQueryToSelect ) ;
111+ } ,
112+ [ handleClosePopover , onLoad ]
113+ ) ;
114+
115+ const handleDelete = useCallback (
116+ ( savedQueryToDelete : SavedQuery ) => {
117+ const onDeleteSavedQuery = async ( savedQuery : SavedQuery ) => {
118+ cancelPendingListingRequest . current ( ) ;
119+ setSavedQueries (
120+ savedQueries . filter ( ( currentSavedQuery ) => currentSavedQuery . id !== savedQuery . id )
121+ ) ;
122+
123+ if ( loadedSavedQuery && loadedSavedQuery . id === savedQuery . id ) {
124+ onClearSavedQuery ( ) ;
125+ }
126+
127+ await savedQueryService . deleteSavedQuery ( savedQuery . id ) ;
128+ setActivePage ( 0 ) ;
129+ } ;
130+
131+ onDeleteSavedQuery ( savedQueryToDelete ) ;
132+ handleClosePopover ( ) ;
133+ } ,
134+ [ handleClosePopover , loadedSavedQuery , onClearSavedQuery , savedQueries , savedQueryService ]
135+ ) ;
94136
95137 const savedQueryDescriptionText = i18n . translate (
96138 'data.search.searchBar.savedQueryDescriptionText' ,
@@ -113,25 +155,13 @@ export function SavedQueryManagementComponent({
113155 }
114156 ) ;
115157
116- const onDeleteSavedQuery = async ( savedQuery : SavedQuery ) => {
117- cancelPendingListingRequest . current ( ) ;
118- setSavedQueries (
119- savedQueries . filter ( ( currentSavedQuery ) => currentSavedQuery . id !== savedQuery . id )
120- ) ;
121-
122- if ( loadedSavedQuery && loadedSavedQuery . id === savedQuery . id ) {
123- onClearSavedQuery ( ) ;
124- }
125-
126- await savedQueryService . deleteSavedQuery ( savedQuery . id ) ;
127- setActivePage ( 0 ) ;
158+ const goToPage = ( pageNumber : number ) => {
159+ setActivePage ( pageNumber ) ;
128160 } ;
129161
130162 const savedQueryPopoverButton = (
131163 < EuiButtonEmpty
132- onClick = { ( ) => {
133- setIsOpen ( ! isOpen ) ;
134- } }
164+ onClick = { handleTogglePopover }
135165 aria-label = { i18n . translate ( 'data.search.searchBar.savedQueryPopoverButtonText' , {
136166 defaultMessage : 'See saved queries' ,
137167 } ) }
@@ -159,11 +189,8 @@ export function SavedQueryManagementComponent({
159189 key = { savedQuery . id }
160190 savedQuery = { savedQuery }
161191 isSelected = { ! ! loadedSavedQuery && loadedSavedQuery . id === savedQuery . id }
162- onSelect = { ( savedQueryToSelect ) => {
163- onLoad ( savedQueryToSelect ) ;
164- setIsOpen ( false ) ;
165- } }
166- onDelete = { ( savedQueryToDelete ) => onDeleteSavedQuery ( savedQueryToDelete ) }
192+ onSelect = { handleSelect }
193+ onDelete = { handleDelete }
167194 showWriteOperations = { ! ! showSaveQuery }
168195 />
169196 ) ) ;
@@ -175,9 +202,7 @@ export function SavedQueryManagementComponent({
175202 id = "savedQueryPopover"
176203 button = { savedQueryPopoverButton }
177204 isOpen = { isOpen }
178- closePopover = { ( ) => {
179- setIsOpen ( false ) ;
180- } }
205+ closePopover = { handleClosePopover }
181206 anchorPosition = "downLeft"
182207 panelPaddingSize = "none"
183208 buffer = { - 8 }
@@ -235,7 +260,7 @@ export function SavedQueryManagementComponent({
235260 < EuiButton
236261 size = "s"
237262 fill
238- onClick = { ( ) => onSave ( ) }
263+ onClick = { handleSave }
239264 aria-label = { i18n . translate (
240265 'data.search.searchBar.savedQueryPopoverSaveChangesButtonAriaLabel' ,
241266 {
@@ -256,7 +281,7 @@ export function SavedQueryManagementComponent({
256281 < EuiFlexItem grow = { false } >
257282 < EuiButton
258283 size = "s"
259- onClick = { ( ) => onSaveAsNew ( ) }
284+ onClick = { handleSaveAsNew }
260285 aria-label = { i18n . translate (
261286 'data.search.searchBar.savedQueryPopoverSaveAsNewButtonAriaLabel' ,
262287 {
@@ -280,7 +305,7 @@ export function SavedQueryManagementComponent({
280305 < EuiButton
281306 size = "s"
282307 fill
283- onClick = { ( ) => onSave ( ) }
308+ onClick = { handleSave }
284309 aria-label = { i18n . translate (
285310 'data.search.searchBar.savedQueryPopoverSaveButtonAriaLabel' ,
286311 { defaultMessage : 'Save a new saved query' }
@@ -299,7 +324,7 @@ export function SavedQueryManagementComponent({
299324 < EuiButtonEmpty
300325 size = "s"
301326 flush = "left"
302- onClick = { ( ) => onClearSavedQuery ( ) }
327+ onClick = { onClearSavedQuery }
303328 aria-label = { i18n . translate (
304329 'data.search.searchBar.savedQueryPopoverClearButtonAriaLabel' ,
305330 { defaultMessage : 'Clear current saved query' }
0 commit comments