Skip to content

Commit b14ecee

Browse files
#RI-2450-update enablement area with relative path
1 parent 890f011 commit b14ecee

File tree

9 files changed

+37
-43
lines changed

9 files changed

+37
-43
lines changed

redisinsight/ui/src/constants/api.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ enum ApiEndpoints {
5151
PLUGINS = 'plugins',
5252
STATE = 'state',
5353
CONTENT_CREATE_DATABASE = 'static/content/create-redis.json',
54-
ENABLEMENT_AREA_PATH = 'static',
54+
GUIDES_PATH = 'static/guides',
55+
TUTORIALS_PATH = 'static/tutorials',
5556
}
5657

5758
export const DEFAULT_SEARCH_MATCH = '*'

redisinsight/ui/src/constants/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ export * from './monitorEvents'
1717
export * from './socketEvents'
1818
export * from './mocks/mock-redis-commands'
1919
export * from './mocks/mock-guides'
20+
export * from './mocks/mock-tutorials'
2021
export * from './socketErrors'
2122
export * from './browser'
2223
export { ApiEndpoints, BrowserStorageItem, ApiStatusCode, apiErrors }

redisinsight/ui/src/pages/workbench/components/enablement-area/EnablementArea/EnablementArea.spec.tsx

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import React from 'react'
22
import { cloneDeep } from 'lodash'
33
import { instance, mock } from 'ts-mockito'
44
import { cleanup, mockedStore, render } from 'uiSrc/utils/test-utils'
5-
import { MOCK_GUIDES_ITEMS } from 'uiSrc/constants'
5+
import { MOCK_GUIDES_ITEMS, MOCK_TUTORIALS_ITEMS } from 'uiSrc/constants'
66
import { EnablementAreaComponent, IEnablementAreaItem } from 'uiSrc/slices/interfaces'
77

88
import EnablementArea, { Props } from './EnablementArea'
@@ -29,7 +29,11 @@ jest.mock('uiSrc/slices/workbench/wb-guides', () => {
2929

3030
describe('EnablementArea', () => {
3131
it('should render', () => {
32-
expect(render(<EnablementArea {...instance(mockedProps)} items={MOCK_GUIDES_ITEMS} />))
32+
expect(render(<EnablementArea
33+
{...instance(mockedProps)}
34+
guides={MOCK_GUIDES_ITEMS}
35+
tutorials={MOCK_TUTORIALS_ITEMS}
36+
/>))
3337
.toBeTruthy()
3438
})
3539

@@ -46,7 +50,8 @@ describe('EnablementArea', () => {
4650
const { queryByTestId } = render(
4751
<EnablementArea
4852
{...instance(mockedProps)}
49-
items={MOCK_GUIDES_ITEMS}
53+
guides={MOCK_GUIDES_ITEMS}
54+
tutorials={MOCK_TUTORIALS_ITEMS}
5055
/>
5156
)
5257
const loaderEl = queryByTestId('enablementArea-loader')
@@ -76,7 +81,7 @@ describe('EnablementArea', () => {
7681
const { queryByTestId } = render(
7782
<EnablementArea
7883
{...instance(mockedProps)}
79-
items={{ 'quick-guides': item }}
84+
guides={{ 'quick-guides': item }}
8085
/>
8186
)
8287

@@ -96,7 +101,7 @@ describe('EnablementArea', () => {
96101
const { queryByTestId } = render(
97102
<EnablementArea
98103
{...instance(mockedProps)}
99-
items={{ manual: item }}
104+
guides={{ manual: item }}
100105
/>
101106
)
102107
const codeButtonEl = queryByTestId(`preselect-${item.label}`)
@@ -115,7 +120,7 @@ describe('EnablementArea', () => {
115120
const { queryByTestId } = render(
116121
<EnablementArea
117122
{...instance(mockedProps)}
118-
items={{ 'internal-page': item }}
123+
guides={{ 'internal-page': item }}
119124
/>
120125
)
121126

redisinsight/ui/src/pages/workbench/components/enablement-area/EnablementArea/EnablementArea.tsx

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -21,14 +21,17 @@ import styles from './styles.module.scss'
2121
const padding = parseInt(styles.paddingHorizontal)
2222

2323
export interface Props {
24-
items: Record<string, IEnablementAreaItem>
24+
guides: Record<string, IEnablementAreaItem>
25+
tutorials: Record<string, IEnablementAreaItem>
2526
loading: boolean
2627
openScript: (script: string, path?: string, name?: string) => void
2728
onOpenInternalPage: (page: IInternalPage) => void
2829
isCodeBtnDisabled?: boolean
2930
}
3031

31-
const EnablementArea = ({ items, openScript, loading, onOpenInternalPage, isCodeBtnDisabled }: Props) => {
32+
const EnablementArea = ({
33+
guides = {}, tutorials = {}, openScript, loading, onOpenInternalPage, isCodeBtnDisabled
34+
}: Props) => {
3235
const { search } = useLocation()
3336
const history = useHistory()
3437
const dispatch = useDispatch()
@@ -40,12 +43,12 @@ const EnablementArea = ({ items, openScript, loading, onOpenInternalPage, isCode
4043
const pagePath = new URLSearchParams(search).get('item')
4144
if (pagePath) {
4245
setIsInternalPageVisible(true)
43-
setInternalPage({ path: `${ApiEndpoints.ENABLEMENT_AREA_PATH}${pagePath}` })
46+
setInternalPage({ path: pagePath })
4447

4548
return
4649
}
4750
if (itemFromContext) {
48-
handleOpenInternalPage({ path: `${ApiEndpoints.ENABLEMENT_AREA_PATH}${itemFromContext}` })
51+
handleOpenInternalPage({ path: itemFromContext })
4952
return
5053
}
5154
setIsInternalPageVisible(false)
@@ -66,14 +69,14 @@ const EnablementArea = ({ items, openScript, loading, onOpenInternalPage, isCode
6669
})
6770
}
6871

69-
const renderSwitch = (item: IEnablementAreaItem, level: number) => {
72+
const renderSwitch = (item: IEnablementAreaItem, sourcePath: string, level: number) => {
7073
const { label, type, children, id, args } = item
7174
const paddingsStyle = { paddingLeft: `${padding + level * 8}px`, paddingRight: `${padding}px` }
7275
switch (type) {
7376
case EnablementAreaComponent.Group:
7477
return (
7578
<Group triggerStyle={paddingsStyle} testId={id} label={label} {...args}>
76-
{renderTreeView(Object.values(children || {}) || [], level + 1)}
79+
{renderTreeView(Object.values(children || {}) || [], sourcePath, level + 1)}
7780
</Group>
7881
)
7982
case EnablementAreaComponent.CodeButton:
@@ -90,7 +93,7 @@ const EnablementArea = ({ items, openScript, loading, onOpenInternalPage, isCode
9093
)
9194
case EnablementAreaComponent.InternalLink:
9295
return (
93-
<InternalLink style={paddingsStyle} testId={id || label} label={label} {...args}>
96+
<InternalLink sourcePath={sourcePath} style={paddingsStyle} testId={id || label} label={label} {...args}>
9497
{args?.content || label}
9598
</InternalLink>
9699
)
@@ -99,10 +102,10 @@ const EnablementArea = ({ items, openScript, loading, onOpenInternalPage, isCode
99102
}
100103
}
101104

102-
const renderTreeView = (elements: IEnablementAreaItem[], level: number = 0) => (
105+
const renderTreeView = (elements: IEnablementAreaItem[], sourcePath: string, level: number = 0) => (
103106
elements?.map((item) => (
104107
<div className="fluid" key={item.id}>
105-
{renderSwitch(item, level)}
108+
{renderSwitch(item, sourcePath, level)}
106109
</div>
107110
)))
108111

@@ -122,7 +125,8 @@ const EnablementArea = ({ items, openScript, loading, onOpenInternalPage, isCode
122125
flush
123126
className={cx(styles.innerContainer)}
124127
>
125-
{renderTreeView(Object.values(items))}
128+
{renderTreeView(Object.values(guides), ApiEndpoints.GUIDES_PATH)}
129+
{renderTreeView(Object.values(tutorials), ApiEndpoints.TUTORIALS_PATH)}
126130
</EuiListGroup>
127131
)}
128132
<div

redisinsight/ui/src/pages/workbench/components/enablement-area/EnablementArea/components/InternalLink/InternalLink.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,14 @@ export interface Props {
1616
iconPosition?: 'left' | 'right';
1717
toolTip?: string;
1818
style?: any;
19+
sourcePath: string;
1920
}
2021
const InternalLink = (props: Props) => {
21-
const { label, testId, children, path = '', size = 's', iconType, iconPosition = 'left', toolTip, ...rest } = props
22+
const { label, testId, children, path = '', size = 's', iconType, iconPosition = 'left', toolTip, sourcePath, ...rest } = props
2223
const { openPage } = useContext(EnablementAreaContext)
2324
const handleOpenPage = () => {
2425
if (path) {
25-
openPage({ path, label })
26+
openPage({ path: sourcePath + path, label })
2627
}
2728
}
2829

redisinsight/ui/src/pages/workbench/components/enablement-area/EnablementArea/components/LazyCodeButton/LazyCodeButton.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const LazyCodeButton = ({ path = '', ...rest }: Props) => {
2323
setLoading(true)
2424
setError('')
2525
try {
26-
const { data, status } = await resourcesService.get<string>(`${ApiEndpoints.ENABLEMENT_AREA_PATH}${path}`)
26+
const { data, status } = await resourcesService.get<string>(`${ApiEndpoints.TUTORIALS_PATH}${path}`)
2727
if (isStatusSuccessful(status)) {
2828
setLoading(false)
2929
const pageInfo = getFileInfo(path)

redisinsight/ui/src/pages/workbench/components/enablement-area/EnablementArea/utils/getFileInfo.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@ export const getFileInfo = (path: string): IFileInfo => {
3535
}
3636
}
3737

38-
const EA_STATIC_PATH_REGEX = /^\/?static\/(workbench|guides)\//
39-
const EA_STATIC_ROOT_PATH = /^\/?static\/(workbench|guides)\/?$/
38+
const EA_STATIC_PATH_REGEX = /^\/?static\/(workbench|guides|tutorials)\//
39+
const EA_STATIC_ROOT_PATH = /^\/?static\/(workbench|guides|tutorials)\/?$/
4040

4141
export const getPagesInsideGroup = (
4242
structure: Record<string, IEnablementAreaItem>,

redisinsight/ui/src/pages/workbench/components/enablement-area/EnablementAreaWrapper.tsx

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
import React, { useEffect, useMemo } from 'react'
1+
import React, { useEffect } from 'react'
22
import { monaco } from 'react-monaco-editor'
3-
import { omit, findKey } from 'lodash'
43
import { EuiFlexGroup, EuiFlexItem } from '@elastic/eui'
54
import cx from 'classnames'
65
import * as monacoEditor from 'monaco-editor/esm/vs/editor/editor.api'
@@ -11,7 +10,6 @@ import { Nullable, } from 'uiSrc/utils'
1110
import { sendEventTelemetry, TelemetryEvent } from 'uiSrc/telemetry'
1211
import { fetchGuides, workbenchGuidesSelector } from 'uiSrc/slices/workbench/wb-guides'
1312
import { fetchTutorials, workbenchTutorialsSelector } from 'uiSrc/slices/workbench/wb-tutorials'
14-
import { IEnablementAreaItem } from 'uiSrc/slices/interfaces'
1513

1614
import EnablementArea from './EnablementArea'
1715
import EnablementAreaCollapse from './EnablementAreaCollapse/EnablementAreaCollapse'
@@ -27,18 +25,6 @@ export interface Props {
2725
isCodeBtnDisabled?: boolean
2826
}
2927

30-
const sortItems = (guides: Record<string, IEnablementAreaItem>, tutorials: Record<string, IEnablementAreaItem>)
31-
: Record<string, IEnablementAreaItem> => {
32-
const mergedItems = { ...guides, ...tutorials }
33-
const lastItemKey = findKey(mergedItems, { args: { order: 'last' } })
34-
35-
if (lastItemKey) {
36-
return { ...omit(mergedItems, lastItemKey), lastItemKey: mergedItems[lastItemKey] }
37-
}
38-
39-
return mergedItems
40-
}
41-
4228
const EnablementAreaWrapper = ({ isMinimized, setIsMinimized, scriptEl, setScript, isCodeBtnDisabled }: Props) => {
4329
const { loading: loadingGuides, items: guides } = useSelector(workbenchGuidesSelector)
4430
const { loading: loadingTutorials, items: tutorials } = useSelector(workbenchTutorialsSelector)
@@ -53,9 +39,6 @@ const EnablementAreaWrapper = ({ isMinimized, setIsMinimized, scriptEl, setScrip
5339
dispatch(fetchTutorials())
5440
}, [])
5541

56-
// TODO: update it when tutorials repo will be finish
57-
const items = useMemo(() => sortItems(guides, tutorials), [guides, tutorials])
58-
5942
const sendEventButtonClickedTelemetry = (data: Record<string, any>) => {
6043
sendEventTelemetry({
6144
event: TelemetryEvent.WORKBENCH_ENABLEMENT_AREA_COMMAND_CLICKED,
@@ -106,7 +89,8 @@ const EnablementAreaWrapper = ({ isMinimized, setIsMinimized, scriptEl, setScrip
10689
grow={!isMinimized}
10790
>
10891
<EnablementArea
109-
items={items}
92+
guides={guides}
93+
tutorials={tutorials}
11094
loading={loadingGuides || loadingTutorials}
11195
openScript={openScript}
11296
onOpenInternalPage={onOpenInternalPage}

redisinsight/ui/src/slices/workbench/wb-guides.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import { ApiEndpoints, MONACO_MANUAL } from 'uiSrc/constants'
33
import { getApiErrorMessage, isStatusSuccessful, } from 'uiSrc/utils'
44
import { resourcesService } from 'uiSrc/services'
55
import { EnablementAreaComponent, IEnablementAreaItem, StateWorkbenchEnablementArea } from 'uiSrc/slices/interfaces'
6-
import { MOCK_GUIDES_ITEMS } from 'uiSrc/constants'
76

87
import { AppDispatch, RootState } from '../store'
98

@@ -34,7 +33,6 @@ const workbenchGuidesSlice = createSlice({
3433
getWBGuidesSuccess: (state, { payload }) => {
3534
state.loading = false
3635
state.items = payload
37-
// state.items = MOCK_GUIDES_ITEMS
3836
},
3937
getWBGuidesFailure: (state, { payload }) => {
4038
state.loading = false

0 commit comments

Comments
 (0)