1
1
import {
2
2
EuiButton ,
3
3
EuiButtonIcon ,
4
+ EuiIcon ,
4
5
EuiPopover ,
5
6
EuiTableFieldDataColumnType ,
6
7
EuiText ,
@@ -9,7 +10,7 @@ import {
9
10
} from '@elastic/eui'
10
11
import { formatDistanceToNow } from 'date-fns'
11
12
import { capitalize } from 'lodash'
12
- import React , { useEffect , useState } from 'react'
13
+ import React , { useContext , useEffect , useState } from 'react'
13
14
import { useDispatch , useSelector } from 'react-redux'
14
15
import { useHistory , useLocation } from 'react-router-dom'
15
16
import cx from 'classnames'
@@ -26,11 +27,14 @@ import {
26
27
Instance ,
27
28
} from 'uiSrc/slices/interfaces'
28
29
import { resetKeys } from 'uiSrc/slices/keys'
29
- import { PageNames , Pages } from 'uiSrc/constants'
30
+ import { PageNames , Pages , Theme } from 'uiSrc/constants'
30
31
import { sendEventTelemetry , TelemetryEvent } from 'uiSrc/telemetry'
31
- import { formatLongName , getDbIndex , Nullable , replaceSpaces } from 'uiSrc/utils'
32
+ import { ThemeContext } from 'uiSrc/contexts/themeContext'
33
+ import { formatLongName , getDbIndex , getModule , Nullable , replaceSpaces , truncateText } from 'uiSrc/utils'
32
34
import { appContextSelector , setAppContextInitialState } from 'uiSrc/slices/app/context'
33
35
import { resetCliHelperSettings , resetCliSettingsAction } from 'uiSrc/slices/cli/cli-settings'
36
+ import { modulesDefaultInit } from 'uiSrc/components/database-list-modules/DatabaseListModules'
37
+ import { RedisModuleDto } from 'apiSrc/modules/instances/dto/database-instance.dto'
34
38
import DatabasesList from './DatabasesList/DatabasesList'
35
39
36
40
import styles from './styles.module.scss'
@@ -52,6 +56,7 @@ const DatabasesListWrapper = ({
52
56
const dispatch = useDispatch ( )
53
57
const history = useHistory ( )
54
58
const { search } = useLocation ( )
59
+ const { theme } = useContext ( ThemeContext )
55
60
56
61
const { contextInstanceId, lastPage } = useSelector ( appContextSelector )
57
62
const instances = useSelector ( instancesSelector )
@@ -250,6 +255,56 @@ const DatabasesListWrapper = ({
250
255
render : ( cellData : ConnectionType ) =>
251
256
CONNECTION_TYPE_DISPLAY [ cellData ] || capitalize ( cellData ) ,
252
257
} ,
258
+ {
259
+ field : 'modules' ,
260
+ className : 'column_modules' ,
261
+ name : 'Modules' ,
262
+ width : '14%' ,
263
+ dataType : 'string' ,
264
+ render : ( a : RedisModuleDto [ ] = [ ] ) => {
265
+ const modules = [ { name : 'custom' } , { name : 'another custom' } , ...a ]
266
+
267
+ return (
268
+ < div className = "modules" data-testid = "modules" >
269
+ { modules ?. map ( ( module ) => {
270
+ const moduleName = modulesDefaultInit [ module . name ] ?. text || module . name
271
+
272
+ console . log ( moduleName )
273
+
274
+ const { abbreviation = '' , name = moduleName } = getModule ( moduleName )
275
+
276
+ console . log ( abbreviation )
277
+
278
+ const moduleAlias = truncateText ( name , 50 )
279
+ // eslint-disable-next-line sonarjs/no-nested-template-literals
280
+ const content = `${ moduleAlias } ${ module . semanticVersion || module . version ? ` v. ${ module . semanticVersion || module . version } ` : '' } `
281
+ const icon = modulesDefaultInit [ module . name ] ?. [ theme === Theme . Dark ? 'iconDark' : 'iconLight' ]
282
+
283
+ return (
284
+ < span key = { moduleName } >
285
+ { icon ? (
286
+ < EuiIcon
287
+ type = { icon }
288
+ className = { cx ( styles . icon ) }
289
+ data-testid = { `${ module . name } _module` }
290
+ aria-labelledby = { `${ module . name } _module` }
291
+ />
292
+ ) : (
293
+ < span
294
+ className = { cx ( styles . icon ) }
295
+ data-testid = { `${ module . name } _module` }
296
+ aria-labelledby = { `${ module . name } _module` }
297
+ >
298
+ { abbreviation }
299
+ </ span >
300
+ ) }
301
+ </ span >
302
+ )
303
+ } ) }
304
+ </ div >
305
+ )
306
+ } ,
307
+ } ,
253
308
{
254
309
field : 'host' ,
255
310
className : 'column_host' ,
0 commit comments