Skip to content

Commit 1cd780b

Browse files
authored
Merge pull request #3795 from RedisInsight/fe/bugfix/RI-6081
#RI-6081 - fix reset context when switch database happens on the same…
2 parents 8401d97 + cd840bf commit 1cd780b

File tree

5 files changed

+25
-4
lines changed

5 files changed

+25
-4
lines changed

redisinsight/ui/src/pages/browser/BrowserPage.test.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ const selectKey = (state: any, selectedKey: any, data?: any = {}) => {
5151
...state.app,
5252
context: {
5353
...state.app.context,
54+
contextInstanceId: 'instanceId',
5455
browser: {
5556
...state.app.context.browser,
5657
bulkActions: {

redisinsight/ui/src/pages/browser/BrowserPage.tsx

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ import {
3333
setBrowserPanelSizes,
3434
setLastPageContext,
3535
setBrowserBulkActionOpen,
36+
appContextSelector,
3637
} from 'uiSrc/slices/app/context'
3738
import { resetErrors } from 'uiSrc/slices/app/notifications'
3839
import { RedisResponseBuffer } from 'uiSrc/slices/interfaces'
@@ -42,6 +43,7 @@ import { KeyViewType } from 'uiSrc/slices/interfaces/keys'
4243
import { SCAN_COUNT_DEFAULT, SCAN_TREE_COUNT_DEFAULT } from 'uiSrc/constants/api'
4344
import OnboardingStartPopover from 'uiSrc/pages/browser/components/onboarding-start-popover'
4445
import { sidePanelsSelector } from 'uiSrc/slices/panels/sidePanels'
46+
import { useStateWithContext } from 'uiSrc/services/hooks'
4547
import BrowserSearchPanel from './components/browser-search-panel'
4648
import BrowserLeftPanel from './components/browser-left-panel'
4749
import BrowserRightPanel from './components/browser-right-panel'
@@ -66,18 +68,21 @@ const BrowserPage = () => {
6668
keyList: { selectedKey: selectedKeyContext },
6769
bulkActions: { opened: bulkActionOpenContext },
6870
} = useSelector(appContextBrowser)
71+
const { contextInstanceId } = useSelector(appContextSelector)
72+
6973
const { isBrowserFullScreen } = useSelector(keysSelector)
7074
const { type } = useSelector(selectedKeyDataSelector) ?? { type: '', length: 0 }
7175
const { viewType, searchMode } = useSelector(keysSelector)
7276
const { openedPanel: openedSidePanel } = useSelector(sidePanelsSelector)
7377

7478
const [isPageViewSent, setIsPageViewSent] = useState(false)
7579
const [arePanelsCollapsed, setArePanelsCollapsed] = useState(isOneSideMode(!!openedSidePanel))
76-
const [selectedKey, setSelectedKey] = useState<Nullable<RedisResponseBuffer>>(selectedKeyContext)
7780
const [isAddKeyPanelOpen, setIsAddKeyPanelOpen] = useState(false)
7881
const [isCreateIndexPanelOpen, setIsCreateIndexPanelOpen] = useState(false)
7982
const [isBulkActionsPanelOpen, setIsBulkActionsPanelOpen] = useState(bulkActionOpenContext)
8083

84+
const [selectedKey, setSelectedKey] = useStateWithContext<Nullable<RedisResponseBuffer>>(selectedKeyContext, null)
85+
8186
const [sizes, setSizes] = useState(panelSizes)
8287

8388
const prevSelectedType = useRef<string>(type)
@@ -118,8 +123,8 @@ const BrowserPage = () => {
118123
}, [isBulkActionsPanelOpen])
119124

120125
useEffect(() => {
121-
setSelectedKey(selectedKeyContext)
122-
}, [selectedKeyContext])
126+
if (contextInstanceId === instanceId) setSelectedKey(selectedKeyContext)
127+
}, [selectedKeyContext, contextInstanceId])
123128

124129
useEffect(() => {
125130
selectedKeyRef.current = selectedKey

redisinsight/ui/src/pages/instance/InstancePage.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,10 @@ const InstancePage = ({ routes = [] }: Props) => {
7070
}, [pathname])
7171

7272
useEffect(() => {
73-
if (isShouldChildrenRerender) setIsShouldChildrenRerender(false)
73+
if (isShouldChildrenRerender) {
74+
dispatch(resetDatabaseContext())
75+
setIsShouldChildrenRerender(false)
76+
}
7477
}, [isShouldChildrenRerender])
7578

7679
if (isShouldChildrenRerender) {
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
export * from './hooks'
22
export * from './useWebworkers'
33
export * from './useCabability'
4+
export * from './useStateWithContext'
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
import { useSelector } from 'react-redux'
2+
import { useState } from 'react'
3+
import { useParams } from 'react-router-dom'
4+
import { appContextSelector } from 'uiSrc/slices/app/context'
5+
6+
export const useStateWithContext = <T>(value: T, initialValue: T) => {
7+
const { instanceId } = useParams<{ instanceId: string }>()
8+
const { contextInstanceId } = useSelector(appContextSelector)
9+
10+
return useState<T>(instanceId === contextInstanceId ? value : initialValue)
11+
}

0 commit comments

Comments
 (0)