Skip to content

Commit 16dd3b7

Browse files
Merge pull request #2803 from devtron-labs/feat/rb-table
fix: RB table
2 parents 2f62253 + cd97905 commit 16dd3b7

14 files changed

+74
-75
lines changed

Dockerfile

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
1-
FROM node:20-alpine AS builder
2-
3-
RUN apk add --no-cache git
1+
FROM node:22-alpine AS builder
42

53
WORKDIR /app
4+
5+
RUN corepack enable yarn && \
6+
yarn set version 4.9.2
7+
68
COPY package.json .
79
COPY yarn.lock .
10+
COPY .yarn/ .yarn/
11+
COPY .yarnrc.yml ./
812

9-
RUN yarn install --frozen-lockfile --network-timeout 600000
13+
RUN apk add --no-cache git
14+
RUN yarn install --immutable --network-timeout 600000
1015

11-
COPY src/ src
12-
COPY nginx.conf .
13-
COPY tsconfig.json .
14-
COPY vite.config.mts .
1516
COPY . .
1617

1718
RUN echo `git rev-parse --short=9 HEAD` > health.html && \
1819
echo "" >> .env && \
19-
echo "SENTRY_RELEASE_VERSION=dashboard@$(git rev-parse --short=9 HEAD)" >> .env
20-
21-
RUN yarn build
20+
echo "SENTRY_RELEASE_VERSION=dashboard@$(git rev-parse --short=9 HEAD)" >> .env && \
21+
yarn build
2222

2323
FROM fholzer/nginx-brotli:v1.26.2
2424

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"private": true,
55
"homepage": "/dashboard",
66
"dependencies": {
7-
"@devtron-labs/devtron-fe-common-lib": "1.16.0-pre-7",
7+
"@devtron-labs/devtron-fe-common-lib": "1.16.0-pre-8",
88
"@esbuild-plugins/node-globals-polyfill": "0.2.3",
99
"@rjsf/core": "^5.13.3",
1010
"@rjsf/utils": "^5.13.3",

src/components/ClusterNodes/ClusterOverview.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import React, { useEffect, useRef, useState } from 'react'
1818
import { generatePath, useHistory, useParams } from 'react-router-dom'
1919

2020
import {
21-
DUMMY_RESOURCE_GVK_VERSION,
2221
EditableTextArea,
2322
ErrorScreenManager,
2423
getRandomColor,
@@ -216,7 +215,6 @@ function ClusterOverview({ selectedCluster, addTab }: ClusterOverviewProps) {
216215
clusterId,
217216
kind: 'node',
218217
group: K8S_EMPTY_GROUP,
219-
version: DUMMY_RESOURCE_GVK_VERSION,
220218
})}?${queryParam}=${encodeURIComponent(filterText)}`
221219
history.push(newUrl)
222220
}

src/components/ResourceBrowser/Constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -397,7 +397,7 @@ export const AI_BUTTON_CONFIG_MAP: Record<string, ShowAIButtonConfig> = Object.f
397397
export const ResourceBrowserRouteToTabIdMap: Partial<
398398
Record<(typeof RESOURCE_BROWSER_ROUTES)[keyof typeof RESOURCE_BROWSER_ROUTES], ResourceBrowserTabsId | string>
399399
> = {
400-
'/resource-browser/:clusterId/:kind/:group/:version': ResourceBrowserTabsId.k8s_Resources,
400+
'/resource-browser/:clusterId/:kind/:group': ResourceBrowserTabsId.k8s_Resources,
401401
'/resource-browser/:clusterId/overview': ResourceBrowserTabsId.cluster_overview,
402402
'/resource-browser/:clusterId/monitoring-dashboard': MONITORING_DASHBOARD_TAB_ID,
403403
'/resource-browser/:clusterId/terminal': ResourceBrowserTabsId.terminal,

src/components/ResourceBrowser/ResourceList/ClusterSelector.tsx

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414
* limitations under the License.
1515
*/
1616

17-
import React, { useRef, useState } from 'react'
17+
import React, { useEffect, useRef, useState } from 'react'
1818
import { useHistory } from 'react-router-dom'
1919
import ReactSelect, { Props as SelectProps, SelectInstance } from 'react-select'
2020

@@ -29,6 +29,7 @@ import {
2929
PopupMenu,
3030
ToastManager,
3131
ToastVariantType,
32+
useRegisterShortcut,
3233
ValueContainerWithLoadingShimmer,
3334
} from '@devtron-labs/devtron-fe-common-lib'
3435

@@ -66,6 +67,22 @@ const ClusterSelector: React.FC<ClusterSelectorType> = ({
6667

6768
const selectRef = useRef<SelectInstance>(null)
6869

70+
const { registerShortcut, unregisterShortcut } = useRegisterShortcut()
71+
72+
useEffect(() => {
73+
registerShortcut({
74+
keys: ['S'],
75+
callback: () => {
76+
selectRef.current?.focus()
77+
selectRef.current?.openMenu('first')
78+
},
79+
})
80+
81+
return () => {
82+
unregisterShortcut(['S'])
83+
}
84+
}, [])
85+
6986
let filteredClusterList = clusterList
7087
if (window._env_.HIDE_DEFAULT_CLUSTER) {
7188
filteredClusterList = clusterList.filter((item) => Number(item.value) !== DEFAULT_CLUSTER_ID)

src/components/ResourceBrowser/ResourceList/ClusterUpgradeCompatibilityInfoTableCellComponent.tsx

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import DOMPurify from 'dompurify'
55
import {
66
ALL_NAMESPACE_OPTION,
77
ClipboardButton,
8-
DUMMY_RESOURCE_GVK_VERSION,
98
GVKType,
109
highlightSearchText,
1110
K8sResourceDetailDataType,
@@ -49,7 +48,6 @@ const ClusterUpgradeCompatibilityInfoTableCellComponent = ({
4948
name,
5049
kind: kind.toLowerCase(),
5150
group,
52-
version: DUMMY_RESOURCE_GVK_VERSION,
5351
})
5452

5553
push(`${url}/${tab}`)

src/components/ResourceBrowser/ResourceList/K8sResourceListTableCellComponent.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import {
88
ButtonVariantType,
99
ClipboardButton,
1010
ConditionalWrap,
11-
DUMMY_RESOURCE_GVK_VERSION,
1211
getAIAnalyticsEvents,
1312
highlightSearchText,
1413
Icon,
@@ -90,7 +89,6 @@ const K8sResourceListTableCellComponent = ({
9089
name,
9190
kind: kind.toLowerCase(),
9291
group: _group || K8S_EMPTY_GROUP,
93-
version: DUMMY_RESOURCE_GVK_VERSION,
9492
})
9593

9694
push(`${url}/${tab}`)
@@ -154,7 +152,6 @@ const K8sResourceListTableCellComponent = ({
154152
name,
155153
group,
156154
kind,
157-
version: DUMMY_RESOURCE_GVK_VERSION,
158155
}),
159156
)
160157
}

src/components/ResourceBrowser/ResourceList/NodeListSearchFilter.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,12 @@ const NodeListSearchFilter = ({
107107

108108
useEffect(() => {
109109
if (registerShortcut) {
110-
registerShortcut({ keys: ['R'], callback: handleFocusInput })
110+
registerShortcut({ keys: ['/'], callback: handleFocusInput })
111111
registerShortcut({ keys: ['Escape'], callback: handleBlurInput })
112112
}
113113

114114
return (): void => {
115-
unregisterShortcut(['R'])
115+
unregisterShortcut(['/'])
116116
unregisterShortcut(['Escape'])
117117
}
118118
}, [])
@@ -249,7 +249,7 @@ const NodeListSearchFilter = ({
249249
)}
250250

251251
{!searchTextType && (
252-
<ShortcutKeyBadge shortcutKey="r" rootClassName="node-listing-search-container__shortcut-key" />
252+
<ShortcutKeyBadge shortcutKey="/" rootClassName="node-listing-search-container__shortcut-key" />
253253
)}
254254
</button>
255255

src/components/ResourceBrowser/ResourceList/ResourceFilterOptions.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -130,13 +130,13 @@ const ResourceFilterOptions = ({
130130

131131
useEffect(() => {
132132
if (registerShortcut) {
133-
registerShortcut({ keys: ['R'], callback: handleInputShortcut })
133+
registerShortcut({ keys: ['/'], callback: handleInputShortcut })
134134
registerShortcut({ keys: ['F'], callback: handleShowFilterModal })
135135
registerShortcut({ keys: ['N'], callback: handleFocusNamespaceFilter })
136136
}
137137
return (): void => {
138138
unregisterShortcut(['F'])
139-
unregisterShortcut(['R'])
139+
unregisterShortcut(['/'])
140140
unregisterShortcut(['N'])
141141
}
142142
}, [])
@@ -243,7 +243,7 @@ const ResourceFilterOptions = ({
243243
/>
244244
{showShortcutKey && (
245245
<ShortcutKeyBadge
246-
shortcutKey="r"
246+
shortcutKey="/"
247247
rootClassName="resource-search-shortcut-key"
248248
onClick={handleInputShortcut}
249249
/>

src/components/ResourceBrowser/ResourceList/Sidebar.tsx

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ import DOMPurify from 'dompurify'
2222

2323
import {
2424
ApiResourceGroupType,
25-
DUMMY_RESOURCE_GVK_VERSION,
2625
highlightSearchText,
26+
K8S_EMPTY_GROUP,
2727
Nodes,
2828
ReactSelectInputAction,
2929
RESOURCE_BROWSER_ROUTES,
@@ -33,7 +33,7 @@ import {
3333

3434
import { ReactComponent as ICExpand } from '../../../assets/icons/ic-expand.svg'
3535
import { AggregationKeys } from '../../app/types'
36-
import { K8S_EMPTY_GROUP, KIND_SEARCH_COMMON_STYLES, ResourceBrowserTabsId, SIDEBAR_KEYS } from '../Constants'
36+
import { KIND_SEARCH_COMMON_STYLES, ResourceBrowserTabsId, SIDEBAR_KEYS } from '../Constants'
3737
import { K8SObjectChildMapType, K8SObjectMapType, K8sObjectOptionType, SidebarType } from '../Types'
3838
import {
3939
convertK8sObjectMapToOptionsList,
@@ -47,7 +47,7 @@ const Sidebar = ({ apiResources, selectedResource, updateK8sResourceTab, updateT
4747
const { registerShortcut, unregisterShortcut } = useRegisterShortcut()
4848
const location = useLocation()
4949
const { push } = useHistory()
50-
const { clusterId, kind } = useParams<K8sResourceListURLParams>()
50+
const { clusterId, kind, group } = useParams<K8sResourceListURLParams>()
5151
const [searchText, setSearchText] = useState('')
5252
/* NOTE: apiResources prop will only change after a component mount/dismount */
5353
const [list, setList] = useState(convertResourceGroupListToK8sObjectList(apiResources || null, kind))
@@ -121,7 +121,6 @@ const Sidebar = ({ apiResources, selectedResource, updateK8sResourceTab, updateT
121121
clusterId,
122122
kind: _selectedKind,
123123
group: _selectedGroup || K8S_EMPTY_GROUP,
124-
version: DUMMY_RESOURCE_GVK_VERSION,
125124
})
126125

127126
if (path === location.pathname) {
@@ -161,8 +160,14 @@ const Sidebar = ({ apiResources, selectedResource, updateK8sResourceTab, updateT
161160
return
162161
}
163162
/* NOTE: match will never be null; due to node fallback */
163+
const lowercasedKind = kind.toLowerCase()
164+
const lowercasedGroup = group.toLowerCase()
164165
const match =
165-
k8sObjectOptionsList.find((option) => option.dataset.kind.toLowerCase() === kind) ?? k8sObjectOptionsList[0]
166+
k8sObjectOptionsList.find(
167+
(option) =>
168+
option.dataset.kind.toLowerCase() === lowercasedKind &&
169+
(option.dataset.group || K8S_EMPTY_GROUP).toLowerCase() === lowercasedGroup,
170+
) ?? k8sObjectOptionsList[0]
166171
/* NOTE: if nodeType doesn't match the selectedResource kind, set it accordingly */
167172
selectNode(
168173
{
@@ -172,7 +177,7 @@ const Sidebar = ({ apiResources, selectedResource, updateK8sResourceTab, updateT
172177
},
173178
match.groupName,
174179
)
175-
}, [kind, k8sObjectOptionsList])
180+
}, [kind, group, k8sObjectOptionsList])
176181

177182
const selectedChildRef: React.Ref<HTMLButtonElement> = (node) => {
178183
/**

0 commit comments

Comments
 (0)