Skip to content

Commit eff0bca

Browse files
committed
fix: remove ref logic inside shortcut handlers
1 parent ffa314a commit eff0bca

File tree

2 files changed

+19
-22
lines changed

2 files changed

+19
-22
lines changed

src/Shared/Components/CICDHistory/History.components.tsx

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616

1717
import Tippy from '@tippyjs/react'
18-
import { useEffect, useRef } from 'react'
18+
import { useCallback, useEffect } from 'react'
1919
import { useLocation } from 'react-router-dom'
2020
import { withShortcut, IWithShortcut } from 'react-keybind'
2121
import { ClipboardButton, GenericEmptyState, Tooltip, extractImage, useSuperAdmin } from '../../../Common'
@@ -31,28 +31,28 @@ import './cicdHistory.scss'
3131
export const LogResizeButton = withShortcut(
3232
({ fullScreenView, setFullScreenView, shortcut }: LogResizeButtonType & IWithShortcut): JSX.Element => {
3333
const { pathname } = useLocation()
34-
const isFullscreenViewRef = useRef(fullScreenView)
35-
isFullscreenViewRef.current = fullScreenView
3634

37-
const toggleFullScreen = (): void => {
35+
const toggleFullScreen = useCallback((): void => {
3836
// NOTE: need to use ref due to the problem of stale function reference after registering the callback
39-
setFullScreenView(!isFullscreenViewRef.current)
40-
}
37+
setFullScreenView(!fullScreenView)
38+
}, [fullScreenView])
4139

4240
useEffect(() => {
43-
shortcut.registerShortcut(toggleFullScreen, ['f'], 'ToggleFullscreen', 'Enter/Exit fullscreen')
44-
shortcut.registerShortcut(
45-
() => setFullScreenView(false),
46-
['Escape'],
47-
'ToggleFullscreen',
48-
'Enter/Exit fullscreen',
49-
)
41+
if (pathname.includes('/logs')) {
42+
shortcut.registerShortcut(toggleFullScreen, ['f'], 'ToggleFullscreen', 'Enter/Exit fullscreen')
43+
shortcut.registerShortcut(
44+
() => setFullScreenView(false),
45+
['Escape'],
46+
'ToggleFullscreen',
47+
'Enter/Exit fullscreen',
48+
)
49+
}
5050

5151
return () => {
5252
shortcut.unregisterShortcut(['f'])
5353
shortcut.unregisterShortcut(['Escape'])
5454
}
55-
}, [pathname.includes('/logs')])
55+
}, [pathname, toggleFullScreen])
5656

5757
return (
5858
pathname.includes('/logs') && (

src/Shared/Components/CICDHistory/LogsRenderer.tsx

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616

1717
import { useParams } from 'react-router-dom'
18-
import { useEffect, useMemo, useRef, useState } from 'react'
18+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react'
1919
import AnsiUp from 'ansi_up'
2020
import DOMPurify from 'dompurify'
2121
import { ANSI_UP_REGEX, ComponentSizeType } from '@Shared/constants'
@@ -189,7 +189,6 @@ const LogsRenderer = ({
189189
// State for logs list in case no stages are available
190190
const [logsList, setLogsList] = useState<string[]>([])
191191
const { searchKey, handleSearch } = useUrlFilters()
192-
const accordionExpansionStateTogglerButtonRef = useRef<HTMLButtonElement>(null)
193192

194193
const areAllStagesExpanded = useMemo(() => stageList.every((item) => item.isOpen), [stageList])
195194

@@ -386,15 +385,14 @@ const LogsRenderer = ({
386385
// And for other cases we would use handleSearchEnter
387386
}, [streamDataList, areEventsProgressing])
388387

389-
const handleToggleOpenAllStages = () => {
388+
const handleToggleOpenAllStages = useCallback(() => {
390389
setStageList((prev) =>
391390
prev.map((stage) => ({
392391
...stage,
393-
// NOTE: need to use ref due to the problem of stale function reference after registering the callback
394-
isOpen: !(accordionExpansionStateTogglerButtonRef.current.dataset.toggleState === 'true'),
392+
isOpen: !areAllStagesExpanded,
395393
})),
396394
)
397-
}
395+
}, [areAllStagesExpanded])
398396

399397
useEffect(() => {
400398
shortcut.registerShortcut(
@@ -407,7 +405,7 @@ const LogsRenderer = ({
407405
return () => {
408406
shortcut.unregisterShortcut(['e'])
409407
}
410-
}, [])
408+
}, [handleToggleOpenAllStages])
411409

412410
const handleSearchEnter = (searchText: string) => {
413411
handleSearch(searchText)
@@ -468,7 +466,6 @@ const LogsRenderer = ({
468466
onClick={handleToggleOpenAllStages}
469467
aria-label="Expand all stages"
470468
data-toggle-state={areAllStagesExpanded}
471-
ref={accordionExpansionStateTogglerButtonRef}
472469
>
473470
{areAllStagesExpanded ? (
474471
<ICCollapseAll className="icon-dim-16 dc__no-shrink dc__transition--transform scn-0" />

0 commit comments

Comments
 (0)