Skip to content

Commit 3d87500

Browse files
authored
Merge pull request #2728 from devtron-labs/feat/react-query-setup
feat: integrate QueryClientProvider
2 parents ae36df1 + bc28984 commit 3d87500

19 files changed

+373
-344
lines changed

.eslintignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -370,7 +370,6 @@ src/components/workflowEditor/workflowEditor.tsx
370370
src/config/constants.ts
371371
src/config/routes.ts
372372
src/config/utils.ts
373-
src/index.tsx
374373
src/services/fetchWithFullRoute.ts
375374
src/services/service.ts
376375
src/services/service.types.ts

.eslintrc.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ const tsconfigPath = require('./tsconfig.json')
1818

1919
module.exports = {
2020
parser: '@typescript-eslint/parser',
21-
plugins: ['@typescript-eslint', 'react', 'prettier', 'import', 'simple-import-sort'],
21+
plugins: ['@typescript-eslint', 'react', 'prettier', 'import', 'simple-import-sort', '@tanstack/query'],
2222
env: {
2323
browser: true,
2424
es2021: true,
@@ -42,6 +42,7 @@ module.exports = {
4242
'airbnb',
4343
'airbnb/hooks',
4444
'prettier',
45+
'plugin:@tanstack/query/recommended',
4546
],
4647
rules: {
4748
'prettier/prettier': ['error'],
@@ -126,9 +127,9 @@ module.exports = {
126127
// Side effect imports.
127128
['^\\u0000'],
128129
// Put same-folder imports, `..` and `.` last. Other relative imports.
129-
['^\\.\\.(?!/?$)', '^\\.\\./?$', '^\\./(?=.*/)(?!/?$)', '^\\.(?!/?$)', '^\\./?$',],
130+
['^\\.\\.(?!/?$)', '^\\.\\./?$', '^\\./(?=.*/)(?!/?$)', '^\\.(?!/?$)', '^\\./?$'],
130131
// Style imports.
131-
[ '^.+\\.?(css|scss)$'],
132+
['^.+\\.?(css|scss)$'],
132133
],
133134
},
134135
],

package.json

Lines changed: 3 additions & 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.17.0-pre-15",
7+
"@devtron-labs/devtron-fe-common-lib": "1.18.0-pre-0",
88
"@esbuild-plugins/node-globals-polyfill": "0.2.3",
99
"@rjsf/core": "^5.13.3",
1010
"@rjsf/utils": "^5.13.3",
@@ -70,12 +70,14 @@
7070
"devDependencies": {
7171
"@playwright/test": "^1.32.1",
7272
"@sentry/cli": "^2.2.0",
73+
"@tanstack/eslint-plugin-query": "<5",
7374
"@testing-library/jest-dom": "^5.16.2",
7475
"@testing-library/react": "^12.1.4",
7576
"@types/jest": "^27.4.1",
7677
"@types/node": "20.11.0",
7778
"@types/react": "17.0.39",
7879
"@types/react-csv": "^1.1.3",
80+
"@types/react-dates": "^21.8.6",
7981
"@types/react-dom": "17.0.13",
8082
"@types/react-router-dom": "^5.3.3",
8183
"@types/react-transition-group": "^4.4.4",

src/components/ClusterNodes/ClusterTerminal.tsx

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*/
1616

1717
import { useEffect, useRef, useState } from 'react'
18-
import { useHistory, useLocation, useParams } from 'react-router-dom'
18+
import { generatePath, useHistory, useLocation } from 'react-router-dom'
1919

2020
import {
2121
Checkbox,
@@ -27,6 +27,7 @@ import {
2727
NodeTaintType,
2828
noop,
2929
OptionType,
30+
RESOURCE_BROWSER_ROUTES,
3031
ResponseType,
3132
SelectPickerOptionType,
3233
ServerErrors,
@@ -35,12 +36,11 @@ import {
3536
TabProps,
3637
} from '@devtron-labs/devtron-fe-common-lib'
3738

38-
import { K8sResourceListURLParams } from '@Components/ResourceBrowser/ResourceList/types'
39+
import { ResourceBrowserTabsId } from '@Components/ResourceBrowser/Constants'
3940
import { getClusterTerminalParamsData } from '@Pages/GlobalConfigurations/ClustersAndEnvironments/cluster.util'
4041

4142
import { BUSYBOX_LINK, DEFAULT_CONTAINER_NAME, NETSHOOT_LINK, shellTypes } from '../../config/constants'
4243
import { clusterImageDescription, convertToOptionsList } from '../common'
43-
import { AppDetailsTabs } from '../v2/appDetails/appDetails.store'
4444
import {
4545
EditModeType,
4646
TERMINAL_STATUS,
@@ -84,11 +84,15 @@ const ClusterTerminal = ({
8484
clusterImageList,
8585
namespaceList = [],
8686
taints,
87-
updateTerminalTabUrl,
87+
updateTabUrl,
8888
}: ClusterTerminalType) => {
89-
const { kind } = useParams<K8sResourceListURLParams>()
9089
const { replace } = useHistory()
9190
const location = useLocation()
91+
const isAdminTerminalVisible =
92+
location.pathname ===
93+
generatePath(RESOURCE_BROWSER_ROUTES.TERMINAL, {
94+
clusterId,
95+
})
9296
const queryParams = new URLSearchParams(location.search)
9397
const terminalAccessIdRef = useRef()
9498
const clusterShellTypes = shellTypes.filter((types) => types.label === 'sh' || types.label === 'bash')
@@ -157,7 +161,7 @@ const ClusterTerminal = ({
157161
}
158162

159163
useEffect(() => {
160-
if (kind !== 'terminal' || queryParamsData.selectedNode.value === selectedNodeName.value || !update) {
164+
if (!isAdminTerminalVisible || queryParamsData.selectedNode.value === selectedNodeName.value || !update) {
161165
return
162166
}
163167
/* NOTE: update selectedNodeName */
@@ -182,8 +186,11 @@ const ClusterTerminal = ({
182186
queryParams.set('namespace', selectedNamespace.value)
183187
queryParams.set('shell', selectedTerminalType.value)
184188
queryParams.set('node', selectedNodeName.value)
185-
updateTerminalTabUrl(queryParams.toString())
186-
if (kind === AppDetailsTabs.terminal) {
189+
updateTabUrl({
190+
id: ResourceBrowserTabsId.terminal,
191+
url: `${generatePath(RESOURCE_BROWSER_ROUTES.TERMINAL, { clusterId })}?${queryParams.toString()}`,
192+
})
193+
if (isAdminTerminalVisible) {
187194
replace({ search: queryParams.toString() })
188195
}
189196
}, [selectedNodeName.value, selectedNamespace.value, selectedImage.value, selectedTerminalType.value])
@@ -1031,7 +1038,7 @@ const ClusterTerminal = ({
10311038
renderConnectionStrip: renderStripMessage(),
10321039
setSocketConnection,
10331040
socketConnection,
1034-
isTerminalTab: selectedTabIndex === 0 && kind === 'terminal',
1041+
isTerminalTab: selectedTabIndex === 0 && isAdminTerminalVisible,
10351042
sessionId,
10361043
registerLinkMatcher: renderRegisterLinkMatcher,
10371044
},

src/components/ClusterNodes/types.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ export interface ClusterTerminalType {
155155
namespaceList: string[]
156156
nodeGroups: SelectGroupType[]
157157
taints: Map<string, NodeTaintType[]>
158-
updateTerminalTabUrl: (queryParams: string) => void
158+
updateTabUrl: UseTabsReturnType['updateTabUrl']
159159
}
160160

161161
export const TEXT_COLOR_CLASS = {

src/components/ResourceBrowser/PageHeader.buttons.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,9 +47,9 @@ export const CreateResourceButton: React.FC<CreateResourceButtonType> = ({ clust
4747
})
4848
}
4949

50-
const handleModalClose = () => {
50+
const handleModalClose = (shouldUpdate: boolean) => {
5151
setShowModal(false)
52-
closeModal(true)
52+
closeModal(shouldUpdate)
5353
}
5454

5555
return (

src/components/ResourceBrowser/ResourceList/AdminTerminal.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import ClusterTerminal from '../../ClusterNodes/ClusterTerminal'
2727
import { createGroupSelectList, filterImageList } from '../../common'
2828
import { AdminTerminalProps, ClusterDetailBaseParams } from '../Types'
2929

30-
const AdminTerminal: React.FC<AdminTerminalProps> = ({ updateTerminalTabUrl }: AdminTerminalProps) => {
30+
const AdminTerminal: React.FC<AdminTerminalProps> = ({ updateTabUrl }: AdminTerminalProps) => {
3131
const { clusterId } = useParams<ClusterDetailBaseParams>()
3232

3333
const [loading, data, error] = useAsync(
@@ -72,7 +72,7 @@ const AdminTerminal: React.FC<AdminTerminalProps> = ({ updateTerminalTabUrl }: A
7272
taints={details.taints}
7373
clusterImageList={details.clusterImageList}
7474
namespaceList={details.namespaceList}
75-
updateTerminalTabUrl={updateTerminalTabUrl}
75+
updateTabUrl={updateTabUrl}
7676
/>
7777
)
7878
}

src/components/ResourceBrowser/ResourceList/AdminTerminalDummy.tsx

Lines changed: 0 additions & 27 deletions
This file was deleted.

src/components/ResourceBrowser/ResourceList/CreateResource.tsx

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,12 +46,13 @@ export const CreateResource: React.FC<CreateResourceType> = ({ closePopup, clust
4646
const [loader, setLoader] = useState(false)
4747
const [resourceYAML, setResourceYAML] = useState('')
4848
const [resourceResponse, setResourceResponse] = useState<CreateResourceDTO[]>(null)
49+
const [needsUpdate, setNeedsUpdate] = useState(false)
4950

5051
const onClose = (): void => {
5152
if (loader) {
5253
return
5354
}
54-
closePopup(true)
55+
closePopup(needsUpdate)
5556
}
5657

5758
useEffect(() => {
@@ -85,6 +86,7 @@ export const CreateResource: React.FC<CreateResourceType> = ({ closePopup, clust
8586
if (result) {
8687
setResourceResponse(result)
8788
toggleCodeEditorView(false)
89+
setNeedsUpdate(true)
8890
}
8991
} catch (err) {
9092
showError(err)
@@ -96,7 +98,7 @@ export const CreateResource: React.FC<CreateResourceType> = ({ closePopup, clust
9698
const renderFooter = (): JSX.Element => {
9799
if (showCodeEditorView) {
98100
return (
99-
<div className="dc__border-top flex right p-16">
101+
<div className="dc__border-top flex right p-16 dc__gap-8">
100102
<Button
101103
dataTestId="cancel-create-resource"
102104
text={CREATE_RESOURCE_MODAL_MESSAGING.actionButtonText.cancel}

src/components/ResourceBrowser/ResourceList/DynamicTabComponentWrapper.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,5 +61,7 @@ export const DynamicTabComponentWrapper = ({
6161
updateTabUrl({ id: tabId, url: `${pathname}${search}` })
6262
}, [pathname, search])
6363

64-
return cloneElement(children, { ...children.props, key: getTabById(tabId)?.componentKey }) as ReactElement
64+
return children
65+
? (cloneElement(children, { ...children.props, key: getTabById(tabId)?.componentKey }) as ReactElement)
66+
: null
6567
}

0 commit comments

Comments
 (0)