Skip to content

Commit f9b4154

Browse files
committed
Merge branch 'feature/RIVS-244_Hash_field_expiration' into feature/RIVS-231_Rename_application
2 parents 2ce197f + 6e0b964 commit f9b4154

File tree

18 files changed

+77
-63
lines changed

18 files changed

+77
-63
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@
117117
"watch": "tsc -watch -p ./",
118118
"lint": "eslint . --ext .js,.jsx,.ts,.tsx",
119119
"lint:fix": "eslint . --fix --ext .js,.jsx,.ts,.tsx",
120-
"test:watch": "vitest watch --dir ./src/webviews/src/modules/key-details/components/hash-details HashDetails",
120+
"test:watch": "vitest watch --dir ./src/webviews/src",
121121
"test:watch:ui": "vitest watch --ui --coverage --dir ./src/webviews/src",
122122
"test:cov": "vitest run --silent --coverage --dir ./src/webviews/src",
123123
"package:prod": "npx mkdirp release && npx @vscode/vsce package",

src/webviews/src/actions/selectKeyAction.ts

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,31 @@
11
import { StorageItem, VscodeMessageAction } from 'uiSrc/constants'
22
import { PostMessage } from 'uiSrc/interfaces'
33
import { sessionStorageService } from 'uiSrc/services'
4-
import { fetchKeyInfo, resetZustand, useSelectedKeyStore } from 'uiSrc/store'
4+
import { fetchKeyInfo, resetZustand, useDatabasesStore, useSelectedKeyStore } from 'uiSrc/store'
55
import { TelemetryEvent, isEqualBuffers, sendEventTelemetry } from 'uiSrc/utils'
66

77
export const selectKeyAction = (message: PostMessage) => {
88
if (message.action !== VscodeMessageAction.SelectKey) {
99
return
1010
}
1111

12-
const { key, databaseId } = message?.data
12+
const { key, database } = message?.data
1313
const prevKey = useSelectedKeyStore.getState().data?.name
1414

1515
if (isEqualBuffers(key, prevKey)) {
1616
return
1717
}
18-
sessionStorageService.set(StorageItem.databaseId, databaseId)
18+
19+
sessionStorageService.set(StorageItem.databaseId, database?.id)
1920
resetZustand()
2021

2122
fetchKeyInfo({ key }, true, ({ type: keyType, length }) => {
23+
useDatabasesStore.getState().setConnectedDatabase(database)
2224
sendEventTelemetry({
2325
event: TelemetryEvent.TREE_VIEW_KEY_VALUE_VIEWED,
2426
eventData: {
2527
keyType,
26-
databaseId,
28+
databaseId: database?.id,
2729
length,
2830
},
2931
})

src/webviews/src/constants/database/commandsVersions.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,6 @@ export const CommandsVersions = {
99
since: '7.0',
1010
},
1111
HASH_FIELD_TTL: {
12-
since: '7.4',
12+
since: '7.3',
1313
},
1414
}

src/webviews/src/interfaces/vscode/api.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ export interface ResetSelectedKeyAction {
1616
export interface SelectKeyAction {
1717
action: VscodeMessageAction.SelectKey
1818
data: {
19-
key: RedisString,
20-
keyString: string,
21-
keyType: AllKeyTypes,
22-
databaseId: string,
23-
displayedKeyType?: string,
19+
key: RedisString
20+
keyString: string
21+
keyType: AllKeyTypes
22+
database: Database
23+
displayedKeyType?: string
2424
}
2525
}
2626

@@ -48,7 +48,7 @@ export interface SelectedKeyAction {
4848
data: {
4949
key?: RedisString,
5050
type: SelectedKeyActionType,
51-
databaseId: string,
51+
database: Database,
5252
keyType?: KeyTypes,
5353
newKey?: RedisString,
5454
keyString?: string

src/webviews/src/modules/add-key/AddKey.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ import styles from './styles.module.scss'
2323
export const AddKey = () => {
2424
const loading = useKeysInContext((state) => state.addKeyLoading)
2525
const keysApi = useKeysApi()
26-
const databaseId = useDatabasesStore((state) => state.connectedDatabase?.id)
26+
const database = useDatabasesStore((state) => state.connectedDatabase)
2727

2828
useEffect(
2929
() =>
@@ -59,7 +59,7 @@ export const AddKey = () => {
5959
keyString: keyName,
6060
keyType,
6161
displayedKeyType: getGroupTypeDisplay(keyType),
62-
databaseId: databaseId!,
62+
database: database!,
6363
type: SelectedKeyActionType.Added,
6464
},
6565
})

src/webviews/src/modules/key-details-header/KeyDetailsHeader.tsx

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { ReactElement } from 'react'
1+
import React, { ReactElement, ReactNode } from 'react'
22
import { isUndefined } from 'lodash'
33
import AutoSizer from 'react-virtualized-auto-sizer'
44
import { useShallow } from 'zustand/react/shallow'
@@ -27,8 +27,7 @@ export interface KeyDetailsHeaderProps {
2727
onCloseKey?: (key?: RedisString) => void
2828
onRemoveKey?: () => void
2929
onEditKey?: (key: RedisString, newKey: RedisString, onFailure?: () => void) => void
30-
Actions?: (props: { width: number }) => Maybe<ReactElement>
31-
ActionsBeforeRefresh?: (props: { width: number }) => Maybe<ReactElement>
30+
Actions?: (props: { width: number, children: ReactNode }) => Maybe<ReactNode>
3231
}
3332

3433
const KeyDetailsHeader = ({
@@ -37,7 +36,6 @@ const KeyDetailsHeader = ({
3736
onEditKey,
3837
keyType,
3938
Actions,
40-
ActionsBeforeRefresh,
4139
}: KeyDetailsHeaderProps) => {
4240
const { data, refreshDisabled, lastRefreshTime } = useSelectedKeyStore(useShallow((state) => ({
4341
data: state.data,
@@ -87,6 +85,16 @@ const KeyDetailsHeader = ({
8785
})
8886
}
8987

88+
const RefreshButton = () => (
89+
<RefreshBtn
90+
lastRefreshTime={lastRefreshTime}
91+
disabled={refreshDisabled}
92+
triggerClassName={styles.actionBtn}
93+
onClick={handleRefreshKey}
94+
triggerTestid="refresh-key-btn"
95+
/>
96+
)
97+
9098
return (
9199
<div className={`key-details-header ${styles.container}`} data-testid="key-details-header">
92100
{/* {loading && (
@@ -109,15 +117,12 @@ const KeyDetailsHeader = ({
109117
<KeyDetailsHeaderTTL onEditTTL={handleEditTTL} />
110118
<div className="flex ml-auto">
111119
<div className={styles.subtitleActionBtns}>
112-
{!isUndefined(ActionsBeforeRefresh) && <ActionsBeforeRefresh width={width} />}
113-
<RefreshBtn
114-
lastRefreshTime={lastRefreshTime}
115-
disabled={refreshDisabled}
116-
triggerClassName={styles.actionBtn}
117-
onClick={handleRefreshKey}
118-
triggerTestid="refresh-key-btn"
119-
/>
120-
{!isUndefined(Actions) && <Actions width={width} />}
120+
{isUndefined(Actions) && <RefreshButton />}
121+
{!isUndefined(Actions) && (
122+
<Actions width={width}>
123+
<RefreshButton />
124+
</Actions>
125+
)}
121126
{Object.values(KeyTypes).includes(keyType as KeyTypes) && (
122127
<KeyDetailsHeaderFormatter width={width} />
123128
)}

src/webviews/src/modules/key-details/components/hash-details/HashDetails.spec.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ describe('HashDetails', () => {
2626
vi.spyOn(utils, 'sendEventTelemetry');
2727

2828
(vi.spyOn(useDatabases, 'useDatabasesStore') as Mock).mockImplementation(() => ({
29-
databaseVersion: '7.4',
29+
databaseVersion: '7.3',
3030
}))
3131

3232
render(<HashDetails {...instance(mockedProps)} />)

src/webviews/src/modules/key-details/components/hash-details/HashDetails.tsx

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import React, { useState } from 'react'
1+
import React, { PropsWithChildren, useState } from 'react'
22
import cx from 'classnames'
33
import * as l10n from '@vscode/l10n'
44

@@ -72,21 +72,19 @@ const HashDetails = (props: Props) => {
7272
})
7373
}
7474

75-
const Actions = () => (
76-
<AddItemsAction title={l10n.t('Add Fields')} openAddItemPanel={openAddItemPanel} />
77-
)
78-
79-
const ActionsBeforeRefresh = () => (
80-
isExpireFieldsAvailable ? (
75+
const Actions = ({ children }: PropsWithChildren) => ([
76+
isExpireFieldsAvailable && (
8177
<Checkbox
8278
checked={showTtl}
8379
containerClassName="mr-2"
8480
data-testid="show-ttl-column-checkbox"
8581
onChange={(e) => handleSelectShow(e.target.checked)}
8682
labelText={l10n.t('Show TTL per row')}
8783
/>
88-
) : undefined
89-
)
84+
),
85+
children,
86+
<AddItemsAction title={l10n.t('Add Fields')} openAddItemPanel={openAddItemPanel} />,
87+
])
9088

9189
return (
9290
<div className="fluid flex-column relative">
@@ -95,7 +93,6 @@ const HashDetails = (props: Props) => {
9593
key="key-details-header"
9694
keyType={keyType}
9795
Actions={Actions}
98-
ActionsBeforeRefresh={ActionsBeforeRefresh}
9996
/>
10097
<div className="key-details-body" key="key-details-body">
10198
{!loading && (

src/webviews/src/modules/key-details/components/hash-details/add-hash-fields/AddHashFields.spec.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,8 @@ describe('AddHashFields', () => {
7171
expect(fieldValue).toHaveValue('')
7272
})
7373

74-
it('should render ttl input if redis version > 7.4', () => {
75-
(vi.spyOn(useDatabases, 'useDatabasesStore') as Mock).mockImplementation(() => '7.4')
74+
it('should render ttl input if redis version > 7.3', () => {
75+
(vi.spyOn(useDatabases, 'useDatabasesStore') as Mock).mockImplementation(() => '7.3')
7676

7777
render(<AddHashFields {...instance(mockedProps)} />)
7878
fireEvent.click(screen.getByTestId('add-new-item'))

src/webviews/src/modules/key-details/components/hash-details/hash-details-table/HashDetailsTable.tsx

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,12 @@ const HashDetailsTable = (props: Props) => {
199199

200200
updateHashTTLAction(data, false, (keyRemoved: boolean) => {
201201
keyRemoved && onRemoveKey?.()
202+
sendEventTelemetry({
203+
event: TelemetryEvent.TREE_VIEW_FIELD_TTL_EDITED,
204+
eventData: {
205+
databaseId,
206+
},
207+
})
202208
handleEditField(rowIndex, false, 'ttl')
203209
})
204210
}
@@ -471,10 +477,10 @@ const HashDetailsTable = (props: Props) => {
471477
{expire === -1 ? l10n.t('No Limit') : (
472478
<Tooltip
473479
title={l10n.t('Time to Live')}
474-
className="truncate"
480+
position="left center"
475481
content={truncateNumberToDuration(expire || 0)}
476482
>
477-
<>{expire}</>
483+
<div>{expire}</div>
478484
</Tooltip>
479485
)}
480486
</div>

0 commit comments

Comments
 (0)