Skip to content

Commit 3a7a6bb

Browse files
authored
Merge pull request #3800 from RedisInsight/latest
Latest to main
2 parents 362e4c2 + 35ce664 commit 3a7a6bb

File tree

24 files changed

+47
-37
lines changed

24 files changed

+47
-37
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/browser/modules/key-details/components/hash-details/hash-details-table/HashDetailsTable.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ import { connectedInstanceSelector } from 'uiSrc/slices/instances/instances'
4747
import { RedisResponseBuffer, RedisString } from 'uiSrc/slices/interfaces'
4848
import { getBasedOnViewTypeEvent, getMatchType, sendEventTelemetry, TelemetryEvent } from 'uiSrc/telemetry'
4949
import {
50+
bufferToSerializedFormat,
5051
bufferToString,
5152
createDeleteFieldHeader,
5253
createDeleteFieldMessage,
@@ -349,12 +350,13 @@ const HashDetailsTable = (props: Props) => {
349350
&& !isEqualBuffers(valueItem, stringToBuffer(value))
350351
const isEditable = !isCompressed && isFormatEditable(viewFormat)
351352
const editTooltipContent = isCompressed ? TEXT_DISABLED_COMPRESSED_VALUE : TEXT_DISABLED_FORMATTER_EDITING
352-
353353
const isEditing = editingIndex?.field === 'value' && editingIndex?.index === rowIndex
354354

355+
const serializedValue = isEditing ? bufferToSerializedFormat(viewFormat, valueItem, 4) : ''
356+
355357
return (
356358
<EditableTextArea
357-
initialValue={value}
359+
initialValue={serializedValue}
358360
isLoading={updateLoading}
359361
isDisabled={disabled}
360362
isEditing={isEditing}

redisinsight/ui/src/pages/browser/modules/key-details/components/list-details/ListDetails.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ const ListDetails = (props: Props) => {
7575
<div className="key-details-body" key="key-details-body">
7676
{!loading && (
7777
<div className="flex-column" style={{ flex: '1', height: '100%' }}>
78-
<ListDetailsTable isFooterOpen={isAddItemPanelOpen} />
78+
<ListDetailsTable />
7979
</div>
8080
)}
8181
{isAddItemPanelOpen && (

redisinsight/ui/src/pages/browser/modules/key-details/components/list-details/list-details-table/ListDetailsTable.tsx

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ import {
4444
stringToSerializedBufferFormat,
4545
validateListIndex,
4646
Nullable,
47-
createTooltipContent
47+
createTooltipContent, bufferToSerializedFormat
4848
} from 'uiSrc/utils'
4949
import {
5050
selectedKeyDataSelector,
@@ -77,11 +77,7 @@ const cellCache = new CellMeasurerCache({
7777

7878
interface IListElement extends SetListElementResponse {}
7979

80-
export interface Props {
81-
isFooterOpen: boolean
82-
}
83-
84-
const ListDetailsTable = (props: Props) => {
80+
const ListDetailsTable = () => {
8581
const { loading } = useSelector(listSelector)
8682
const { loading: updateLoading } = useSelector(updateListValueStateSelector)
8783
const { elements: loadedElements, total, searchedIndex } = useSelector(
@@ -280,16 +276,18 @@ const ListDetailsTable = (props: Props) => {
280276
const disabled = !isNonUnicodeFormatter(viewFormat, isValid)
281277
&& !isEqualBuffers(elementItem, stringToBuffer(element))
282278
const isEditable = !isCompressed && isFormatEditable(viewFormat)
279+
const isEditing = index === editingIndex
283280

284281
const tooltipContent = createTooltipContent(value, decompressedElementItem, viewFormatProp)
285282
const editTooltipContent = isCompressed ? TEXT_DISABLED_COMPRESSED_VALUE : TEXT_DISABLED_FORMATTER_EDITING
283+
const serializedValue = isEditing ? bufferToSerializedFormat(viewFormat, elementItem, 4) : ''
286284

287285
return (
288286
<EditableTextArea
289-
initialValue={element}
287+
initialValue={serializedValue}
290288
isLoading={updateLoading}
291289
isDisabled={disabled}
292-
isEditing={index === editingIndex}
290+
isEditing={isEditing}
293291
isEditDisabled={!isEditable || updateLoading}
294292
disabledTooltipText={TEXT_UNPRINTABLE_CHARACTERS}
295293
onDecline={() => handleEditElement(index, false)}

redisinsight/ui/src/pages/browser/modules/key-details/components/set-details/SetDetails.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ const SetDetails = (props: Props) => {
5656
<div className="key-details-body" key="key-details-body">
5757
{!loading && (
5858
<div className="flex-column" style={{ flex: '1', height: '100%' }}>
59-
<SetDetailsTable isFooterOpen={isAddItemPanelOpen} onRemoveKey={onRemoveKey} />
59+
<SetDetailsTable onRemoveKey={onRemoveKey} />
6060
</div>
6161
)}
6262
{isAddItemPanelOpen && (

redisinsight/ui/src/pages/browser/modules/key-details/components/set-details/set-details-table/SetDetailsTable.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,6 @@ const cellCache = new CellMeasurerCache({
5050
})
5151

5252
export interface Props {
53-
isFooterOpen?: boolean
5453
onRemoveKey: () => void
5554
}
5655

redisinsight/ui/src/pages/browser/modules/key-details/components/stream-details/StreamDetails.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ const StreamDetails = (props: Props) => {
6767
<div className="key-details-body" key="key-details-body">
6868
{!loading && (
6969
<div className="flex-column" style={{ flex: '1', height: '100%' }}>
70-
<StreamDetailsBody isFooterOpen={isAddItemPanelOpen} />
70+
<StreamDetailsBody />
7171
</div>
7272
)}
7373
{isAddItemPanelOpen && (

redisinsight/ui/src/pages/browser/modules/key-details/components/stream-details/consumers-view/ConsumersView/ConsumersView.tsx

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,10 @@ export interface Props {
2323
columns: ITableColumn[]
2424
onClosePopover: () => void
2525
onSelectConsumer: ({ rowData }: { rowData: any }) => void
26-
isFooterOpen?: boolean
2726
}
2827

2928
const ConsumersView = (props: Props) => {
30-
const { data = [], columns = [], onClosePopover, onSelectConsumer, isFooterOpen } = props
29+
const { data = [], columns = [], onClosePopover, onSelectConsumer } = props
3130

3231
const { loading } = useSelector(streamGroupsSelector)
3332
const { name: key = '' } = useSelector(selectedKeyDataSelector) ?? { }

redisinsight/ui/src/pages/browser/modules/key-details/components/stream-details/consumers-view/ConsumersViewWrapper.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,6 @@ const suffix = '_stream_consumer'
2828
const actionsWidth = 50
2929

3030
export interface Props {
31-
isFooterOpen: boolean
3231
}
3332

3433
const ConsumersViewWrapper = (props: Props) => {

0 commit comments

Comments
 (0)