11import React , { useState } from 'react'
22import { useSelector } from 'react-redux'
3- import cx from 'classnames'
43import { useParams } from 'react-router-dom'
54import { connectedInstanceSelector } from 'uiSrc/slices/instances/instances'
65import { DurationUnits } from 'uiSrc/constants'
@@ -13,15 +12,14 @@ import { FlexItem, Row } from 'uiSrc/components/base/layout/flex'
1312import { Spacer } from 'uiSrc/components/base/layout/spacer'
1413import { EraserIcon , SettingsIcon } from 'uiSrc/components/base/icons'
1514import {
16- DestructiveButton ,
1715 IconButton ,
1816 SecondaryButton ,
1917} from 'uiSrc/components/base/forms/buttons'
20- import { Text } from 'uiSrc/components/base/text'
2118import { RiIcon } from 'uiSrc/components/base/icons/RiIcon'
2219
2320import SlowLogConfig from '../SlowLogConfig'
24- import styles from './styles.module.scss'
21+ import { StyledInfoIconWrapper } from './Actions.styles'
22+ import { ClearSlowLogModal } from '../ClearSlowLogModal/ClearSlowLogModal'
2523
2624export interface Props {
2725 width : number
@@ -45,15 +43,15 @@ const Actions = (props: Props) => {
4543 const { name = '' } = useSelector ( connectedInstanceSelector )
4644 const { loading, lastRefreshTime } = useSelector ( slowLogSelector )
4745
48- const [ isPopoverClearOpen , setIsPopoverClearOpen ] = useState ( false )
46+ const [ isClearModalOpen , setIsClearModalOpen ] = useState ( false )
4947 const [ isPopoverConfigOpen , setIsPopoverConfigOpen ] = useState ( false )
5048
51- const showClearPopover = ( ) => {
52- setIsPopoverClearOpen ( ( isPopoverClearOpen ) => ! isPopoverClearOpen )
49+ const showClearModal = ( ) => {
50+ setIsClearModalOpen ( ( isClearModalOpen ) => ! isClearModalOpen )
5351 }
5452
55- const closePopoverClear = ( ) => {
56- setIsPopoverClearOpen ( false )
53+ const closeClearModal = ( ) => {
54+ setIsClearModalOpen ( false )
5755 }
5856 const showConfigPopover = ( ) => {
5957 setIsPopoverConfigOpen ( ( isPopoverConfigOpen ) => ! isPopoverConfigOpen )
@@ -63,11 +61,6 @@ const Actions = (props: Props) => {
6361 setIsPopoverConfigOpen ( false )
6462 }
6563
66- const handleClearClick = ( ) => {
67- onClear ( )
68- closePopoverClear ( )
69- }
70-
7164 const handleEnableAutoRefresh = (
7265 enableAutoRefresh : boolean ,
7366 refreshRate : string ,
@@ -98,66 +91,32 @@ const Actions = (props: Props) => {
9891 }
9992 }
10093
101- const ToolTipContent = (
102- < div className = { styles . popoverContainer } >
103- < RiIcon
104- type = "ToastDangerIcon"
105- color = "attention600"
106- className = { styles . warningIcon }
107- />
108- < div >
109- < Text size = "m" component = "div" >
110- < h4 className = { styles . popoverTitle } >
111- < b > Clear Slow Log?</ b >
112- </ h4 >
113- < Text size = "xs" color = "subdued" >
114- Slow Log will be cleared for
115- < span className = { styles . popoverDBName } > { name } </ span >
116- < br />
117- NOTE: This is server configuration
118- </ Text >
119- </ Text >
120- < div className = { styles . popoverFooter } >
121- < DestructiveButton
122- size = "small"
123- icon = { EraserIcon }
124- onClick = { ( ) => handleClearClick ( ) }
125- className = { styles . popoverDeleteBtn }
126- data-testid = "reset-confirm-btn"
127- >
128- Clear
129- </ DestructiveButton >
130- </ div >
131- </ div >
132- </ div >
133- )
134-
13594 return (
136- < Row className = { styles . actions } gap = "s" align = "center" >
137- < FlexItem grow = { 5 } style = { { alignItems : 'flex-end' } } >
95+ < Row gap = "s" align = "center" >
96+ < FlexItem >
13897 < AutoRefresh
13998 postfix = "slowlog"
14099 loading = { loading }
141100 displayText = { width > HIDE_REFRESH_LABEL_WIDTH }
142101 lastRefreshTime = { lastRefreshTime }
143- containerClassName = { styles . refreshContainer }
144102 onRefresh = { ( ) => onRefresh ( ) }
145103 onEnableAutoRefresh = { handleEnableAutoRefresh }
146104 onChangeAutoRefreshRate = { handleChangeAutoRefreshRate }
147105 testid = "slowlog"
148106 />
149107 </ FlexItem >
150- < FlexItem grow >
108+
109+ < FlexItem >
151110 < RiPopover
152111 ownFocus
153112 anchorPosition = "downRight"
154113 isOpen = { isPopoverConfigOpen }
155114 panelPaddingSize = "m"
156115 closePopover = { ( ) => { } }
157- panelClassName = { cx ( 'popover-without-top-tail' , styles . configWrapper ) }
158116 button = {
159117 < SecondaryButton
160118 size = "small"
119+ inverted
161120 icon = { SettingsIcon }
162121 aria-label = "Configure"
163122 onClick = { ( ) => showConfigPopover ( ) }
@@ -173,38 +132,29 @@ const Actions = (props: Props) => {
173132 />
174133 </ RiPopover >
175134 </ FlexItem >
135+
176136 { ! isEmptySlowLog && (
177- < FlexItem grow >
178- < RiPopover
179- anchorPosition = "leftCenter"
180- ownFocus
181- isOpen = { isPopoverClearOpen }
182- closePopover = { closePopoverClear }
183- panelPaddingSize = "m"
184- button = {
185- < RiTooltip
186- position = "left"
187- content = "Clear Slow Log"
188- anchorClassName = { styles . icon }
189- >
190- < IconButton
191- icon = { EraserIcon }
192- aria-label = "Clear Slow Log"
193- onClick = { ( ) => showClearPopover ( ) }
194- data-testid = "clear-btn"
195- />
196- </ RiTooltip >
197- }
198- >
199- { ToolTipContent }
200- </ RiPopover >
201- </ FlexItem >
137+ < >
138+ < IconButton
139+ icon = { EraserIcon }
140+ aria-label = "Clear Slow Log"
141+ onClick = { ( ) => showClearModal ( ) }
142+ data-testid = "clear-btn"
143+ />
144+
145+ < ClearSlowLogModal
146+ name = { name }
147+ isOpen = { isClearModalOpen }
148+ onClose = { closeClearModal }
149+ onClear = { onClear }
150+ />
151+ </ >
202152 ) }
203- < FlexItem grow >
153+
154+ < FlexItem >
204155 < RiTooltip
205156 title = "Slow Log"
206157 position = "bottom"
207- anchorClassName = { styles . icon }
208158 content = {
209159 < span data-testid = "slowlog-tooltip-text" >
210160 Slow Log is a list of slow operations for your Redis instance.
@@ -218,12 +168,9 @@ const Actions = (props: Props) => {
218168 </ span >
219169 }
220170 >
221- < RiIcon
222- className = { styles . infoIcon }
223- type = "InfoIcon"
224- style = { { cursor : 'pointer' } }
225- data-testid = "slow-log-tooltip-icon"
226- />
171+ < StyledInfoIconWrapper >
172+ < RiIcon type = "InfoIcon" data-testid = "slow-log-tooltip-icon" />
173+ </ StyledInfoIconWrapper >
227174 </ RiTooltip >
228175 </ FlexItem >
229176 </ Row >
0 commit comments