Skip to content

Commit 9534a3c

Browse files
committed
RI-6371 fix sorting, added empty list view
1 parent a17594b commit 9534a3c

File tree

5 files changed

+62
-9
lines changed

5 files changed

+62
-9
lines changed

redisinsight/ui/src/components/instance-header/components/instances-navigation-popover/InstancesNavigationPopover.tsx

Lines changed: 45 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,17 @@ import { EuiFieldText, EuiIcon, EuiPopover, EuiSpacer, EuiTab, EuiTabs, EuiText
33
import cx from 'classnames'
44
import { useSelector } from 'react-redux'
55
import { useHistory, useParams } from 'react-router-dom'
6+
import { orderBy } from 'lodash'
67
import { instancesSelector as rdiInstancesSelector } from 'uiSrc/slices/rdi/instances'
78
import { instancesSelector as dbInstancesSelector } from 'uiSrc/slices/instances/instances'
89
import Divider from 'uiSrc/components/divider/Divider'
9-
import { Pages } from 'uiSrc/constants'
10+
import { BrowserStorageItem, Pages } from 'uiSrc/constants'
1011
import Down from 'uiSrc/assets/img/Down.svg?react'
1112
import Search from 'uiSrc/assets/img/Search.svg'
1213
import { Instance, RdiInstance } from 'uiSrc/slices/interfaces'
1314
import { TelemetryEvent, sendEventTelemetry } from 'uiSrc/telemetry'
1415
import { getDbIndex } from 'uiSrc/utils'
16+
import { localStorageService } from 'uiSrc/services'
1517
import InstancesList from './components/instances-list'
1618
import styles from './styles.module.scss'
1719

@@ -38,11 +40,48 @@ const InstancesNavigationPopover = ({ name }: Props) => {
3840
const history = useHistory()
3941

4042
useEffect(() => {
41-
const dbFiltered = dbInstances?.filter((db) => {
42-
const label = `${db.name} ${getDbIndex(db.db)}`
43-
return label.toLowerCase?.().includes(searchFilter)
44-
})
45-
const rdiFiltered = rdiInstances?.filter((rdi) => rdi.name?.toLowerCase?.().includes(searchFilter))
43+
const filterAndSort = (
44+
arr: Instance[] | RdiInstance[],
45+
search: string,
46+
sort: { field: string, direction: 'asc' | 'desc' }
47+
): (Instance | RdiInstance
48+
)[] => {
49+
if (!arr?.length) return arr
50+
const filtered = arr.filter((instance) => {
51+
const label = `${instance.name} ${getDbIndex(instance.db)}`
52+
return label.toLowerCase?.().includes(search)
53+
})
54+
55+
const sortingFunc = (ins) => {
56+
if (sort.field === 'lastConnection') {
57+
return ins.lastConnection ? -new Date(`${ins.lastConnection}`) : -Infinity
58+
}
59+
if (sort.field === 'host') {
60+
return `${ins.host}:${ins.port}`
61+
}
62+
return sort.field
63+
}
64+
65+
return orderBy(
66+
filtered,
67+
sortingFunc,
68+
sort.direction
69+
)
70+
}
71+
72+
const dbSort = localStorageService.get(BrowserStorageItem.instancesSorting) ?? {
73+
field: 'lastConnection',
74+
direction: 'asc'
75+
}
76+
77+
const dbFiltered = filterAndSort(dbInstances, searchFilter, dbSort)
78+
79+
const rdiSort = localStorageService.get(BrowserStorageItem.rdiInstancesSorting) ?? {
80+
field: 'lastConnection',
81+
direction: 'asc'
82+
}
83+
84+
const rdiFiltered = filterAndSort(rdiInstances, searchFilter, rdiSort)
4685
setFilteredDbInstances(dbFiltered)
4786
setFilteredRdiInstances(rdiFiltered)
4887
}, [dbInstances, rdiInstances, searchFilter])

redisinsight/ui/src/components/instance-header/components/instances-navigation-popover/components/instances-list/InstancesList.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ const InstancesList = ({
3737
const instances = selectedTab === InstancesTabs.Databases ? filteredDbInstances : filteredRdiInstances
3838

3939
const connectToInstance = (id = '') => {
40-
dispatch(resetRdiContext())
41-
4240
dispatch(setConnectedInstanceId(id))
4341
setLoading(false)
4442
history.push(Pages.browser(id))
@@ -95,6 +93,13 @@ const InstancesList = ({
9593
return id === rdiInstanceId
9694
}
9795

96+
if (!instances?.length) {
97+
const emptyMsg = selectedTab === InstancesTabs.Databases ? 'No databases' : 'No RDI endpoints'
98+
return (
99+
<div className={styles.emptyMsg}>{emptyMsg}</div>
100+
)
101+
}
102+
98103
return (
99104
<div className={styles.listContainer}>
100105
<EuiListGroup flush maxWidth="none" gutterSize="none">

redisinsight/ui/src/components/instance-header/components/instances-navigation-popover/styles.module.scss

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@
6060
}
6161
}
6262

63+
.emptyMsg {
64+
padding: 20px;
65+
text-align: center;
66+
font-size: 14px !important;
67+
line-height: 16.8px !important;
68+
color: var(--euiTextSubduedColor) !important;
69+
}
70+
6371
.listContainer {
6472
@include eui.scrollBar;
6573
max-height: 160px;
@@ -74,7 +82,6 @@
7482
.loading {
7583
margin-right: 8px;
7684
border-color: var(--separatorDropdownColor) !important;
77-
7885
border-top-color: var(--euiColorGhost) !important;
7986
}
8087
}

redisinsight/ui/src/pages/home/components/database-list-component/DatabasesListWrapper.test.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ describe('DatabasesListWrapper', () => {
161161
eventData: {
162162
databaseId: 'e37cc441-a4f2-402c-8bdb-fc2413cbbaff',
163163
provider: 'provider',
164+
source: 'db_list',
164165
RediSearch: {
165166
loaded: false
166167
},

redisinsight/ui/src/pages/home/components/database-list-component/DatabasesListWrapper.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ const DatabasesListWrapper = (props: Props) => {
152152
eventData: {
153153
databaseId: id,
154154
provider,
155+
source: 'db_list',
155156
...modulesSummary,
156157
}
157158
})

0 commit comments

Comments
 (0)