Skip to content

Commit 90caa7d

Browse files
authored
Merge pull request #1013 from devtron-labs/feat/react-router-v6
feat: react router v6
2 parents 1df33ea + ee4d70c commit 90caa7d

101 files changed

Lines changed: 2222 additions & 1494 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.eslintignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,3 @@ src/Common/Select/Select.tsx
5353
src/Common/ServerError.ts
5454
src/Common/TippyCustomized.tsx
5555
src/Common/ToastBody.tsx
56-
src/Common/Types.ts

package-lock.json

Lines changed: 599 additions & 661 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@devtron-labs/devtron-fe-common-lib",
3-
"version": "1.22.8-beta-8",
3+
"version": "1.22.8-beta-14",
44
"description": "Supporting common component library",
55
"type": "module",
66
"main": "dist/index.js",
@@ -49,7 +49,6 @@
4949
"@types/react": "^18.3.27",
5050
"@types/react-csv": "^1.1.10",
5151
"@types/react-dom": "^18.3.7",
52-
"@types/react-router-dom": "^5.3.3",
5352
"@typescript-eslint/eslint-plugin": "8.3.0",
5453
"@typescript-eslint/parser": "8.3.0",
5554
"@vitejs/plugin-react": "4.5.2",
@@ -87,7 +86,7 @@
8786
"react": "^18.3.1",
8887
"react-dom": "^18.3.1",
8988
"react-ga4": "^1.4.1",
90-
"react-router-dom": "^5.3.0",
89+
"react-router-dom": "^6.30.3",
9190
"react-select": "5.8.0",
9291
"rxjs": "^7.8.1",
9392
"yaml": "^2.4.1"

src/Common/API/types.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@ export interface FetchInTimeParamsType<Data = object> {
3838
}
3939

4040
export interface FetchAPIParamsType<Data = object>
41-
extends Omit<FetchInTimeParamsType<Data>, 'options'>,
41+
extends
42+
Omit<FetchInTimeParamsType<Data>, 'options'>,
4243
Pick<
4344
APIOptions,
4445
'preventAutoLogout' | 'preventLicenseRedirect' | 'shouldParseServerErrorForUnauthorizedUser' | 'isProxyHost'

src/Common/API/utils.ts

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,9 @@
1616

1717
import { MutableRefObject } from 'react'
1818

19-
import { URLS } from '@Common/Constants'
2019
import { getUrlWithSearchParams } from '@Common/Helper'
2120
import { ServerErrors } from '@Common/ServerError'
21+
import { ROUTER_URLS } from '@PagesDevtron2.0/index'
2222

2323
import { RESPONSE_MESSAGES } from './constants'
2424

@@ -63,11 +63,14 @@ export const getIsRequestAborted = (error) =>
6363

6464
export const handleDashboardLogout = () => {
6565
const continueParam = `${window.location.pathname.replace(window.__BASE_URL__, '')}${window.location.search}`
66-
window.location.href = getUrlWithSearchParams(`${window.location.origin}${window.__BASE_URL__}${URLS.LOGIN_SSO}`, {
67-
continue: continueParam,
68-
})
66+
window.location.href = getUrlWithSearchParams(
67+
`${window.location.origin}${window.__BASE_URL__}${ROUTER_URLS.LOGIN.SSO}`,
68+
{
69+
continue: continueParam,
70+
},
71+
)
6972
}
7073

7174
export const handleRedirectToLicenseActivation = () => {
72-
window.location.href = `${window.location.origin}${window.__BASE_URL__}${URLS.LICENSE_AUTH}`
75+
window.location.href = `${window.location.origin}${window.__BASE_URL__}${ROUTER_URLS.LICENSE_AUTH}`
7376
}

src/Common/BreadCrumb/BreadCrumb.tsx

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,18 @@
1515
*/
1616

1717
import React, { useMemo, useEffect } from 'react'
18-
import { Link, useRouteMatch, useParams } from 'react-router-dom'
18+
import { generatePath, Link, useParams } from 'react-router-dom'
1919
import { useBreadcrumbContext, getBreadCrumbSeparator } from './BreadcrumbStore'
2020
import { ConditionalWrap } from '../Helper'
2121
import { Breadcrumb, Breadcrumbs, UseBreadcrumbOptionalProps, UseBreadcrumbState } from './Types'
2222

2323
export const BreadcrumbContext = React.createContext(null)
2424

25-
export function useBreadcrumb(props?: UseBreadcrumbOptionalProps, deps?: any[]): UseBreadcrumbState {
25+
export function useBreadcrumb(pathPattern: string, props?: UseBreadcrumbOptionalProps, deps?: any[]): UseBreadcrumbState {
2626
const sep = props?.sep || '/'
2727
deps = deps || []
28-
const { url, path } = useRouteMatch()
2928
const params = useParams()
29+
const url = generatePath(pathPattern, params)
3030
const { state, setState } = useBreadcrumbContext()
3131

3232
useEffect(() => {
@@ -48,7 +48,7 @@ export function useBreadcrumb(props?: UseBreadcrumbOptionalProps, deps?: any[]):
4848
}
4949

5050
const levels: Breadcrumb[] = useMemo(() => {
51-
const paths = path.split('/').filter(Boolean)
51+
const paths = pathPattern.split('/').filter(Boolean)
5252
const urls = url.split('/').filter(Boolean)
5353
return paths.map((path, idx) => {
5454
const crumb: Breadcrumb = { to: urls[idx], name: path }
@@ -57,7 +57,7 @@ export function useBreadcrumb(props?: UseBreadcrumbOptionalProps, deps?: any[]):
5757
}
5858
return crumb
5959
})
60-
}, [path, url])
60+
}, [pathPattern, url])
6161
const { res: breadcrumbs } = useMemo(
6262
() =>
6363
levels.reduce(
@@ -89,10 +89,12 @@ export function useBreadcrumb(props?: UseBreadcrumbOptionalProps, deps?: any[]):
8989

9090
export const BreadCrumb: React.FC<Breadcrumbs> = ({
9191
breadcrumbs,
92+
path,
9293
sep = '/',
9394
className = 'dc__devtron-breadcrumb__item fs-16 fw-4 lh-1-5 dc__ellipsis-right dc__mxw-155',
9495
}) => {
95-
const { url } = useRouteMatch()
96+
const params = useParams()
97+
const url = generatePath(path, params)
9698
const filteredCrumbs = breadcrumbs.filter((crumb) => !!crumb.name)
9799
return (
98100
<>

src/Common/BreadCrumb/Types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ export interface UseBreadcrumbProps {
3838

3939
export interface Breadcrumbs {
4040
breadcrumbs: Breadcrumb[]
41+
path: string
4142
sep?: string
4243
className?: string
4344
}

src/Common/Constants.ts

Lines changed: 4 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,6 @@
1515
*/
1616

1717
import { SelectPickerOptionType } from '@Shared/Components'
18-
import { CostBreakdownItemViewParamsType, CostBreakdownViewType } from '@PagesDevtron2.0/CostVisibility'
19-
import { BackupAndScheduleListViewEnum, BackupLocationsTypes } from '@PagesDevtron2.0/DataProtectionManagement'
20-
21-
import { InfrastructureManagementAppListType } from './Types'
2218

2319
export const FALLBACK_REQUEST_TIMEOUT = 60000
2420
export const Host = window?.__ORCHESTRATOR_ROOT__ ?? '/orchestrator'
@@ -51,108 +47,17 @@ export const PATTERNS = {
5147
ALPHANUMERIC_WITH_SPECIAL_CHAR_AND_SLASH: /^[A-Za-z0-9._/-]+$/, // allow alphanumeric,(.) ,(-),(_),(/)
5248
EMAIL: /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,
5349
}
54-
55-
const APPLICATION_MANAGEMENT_ROOT = '/application-management'
56-
const APPLICATION_MANAGEMENT_TEMPLATES_DEVTRON_APP = `${APPLICATION_MANAGEMENT_ROOT}/templates/devtron-app`
57-
const APPLICATION_MANAGEMENT_CONFIGURATIONS = `${APPLICATION_MANAGEMENT_ROOT}/configurations`
58-
const INFRASTRUCTURE_MANAGEMENT_ROOT = '/infrastructure-management'
59-
const SOFTWARE_RELEASE_MANAGEMENT_ROOT = '/software-release-management'
60-
const COST_VISIBILITY_ROOT = '/cost-visibility'
61-
const SECURITY_CENTER_ROOT = '/security-center'
62-
const AUTOMATION_AND_ENABLEMENT_ROOT = '/automation-and-enablement'
63-
const DATA_PROTECTION_ROOT = '/data-protection-management'
64-
const DATA_PROTECTION_BACKUP_AND_SCHEDULE =
65-
`${DATA_PROTECTION_ROOT}/backup-and-schedule/:view(${Object.values(BackupAndScheduleListViewEnum).join('|')})` as const
66-
const GLOBAL_CONFIG_ROOT = '/global-configuration'
67-
50+
/** @deprecated */
6851
export const URLS = {
69-
LOGIN: '/login',
70-
LOGIN_SSO: '/login/sso',
71-
APP_LIST: 'list',
72-
CREATE_JOB: 'create-job',
73-
GETTING_STARTED: 'getting-started',
74-
STACK_MANAGER_ABOUT: '/stack-manager/about',
7552
APP_CI_DETAILS: 'ci-details',
7653
LOGS: 'Logs',
77-
CREATE: '/create',
78-
RELEASES: '/releases',
79-
DEVTRON_CHARTS: 'dc',
80-
APP_DEPLOYMNENT_HISTORY: 'deployments',
8154
APP_DETAILS: 'details',
8255
APP_DETAILS_K8: 'k8s-resources', // for V2
8356
DETAILS: '/details',
84-
CD_DETAILS: 'cd-details',
85-
APP_TRIGGER: 'trigger',
86-
DEPLOYMENT_HISTORY_CONFIGURATIONS: '/configuration',
87-
NETWORK_STATUS_INTERFACE: '/network-status-interface',
88-
COMPARE_CLUSTERS: '/compare-clusters',
57+
DEPLOYMENT_HISTORY_CONFIGURATIONS: 'configuration',
8958
APP_CONFIG: 'edit',
90-
LICENSE_AUTH: '/license-auth',
91-
// APPLICATION MANAGEMENT
92-
APPLICATION_MANAGEMENT: APPLICATION_MANAGEMENT_ROOT,
93-
APPLICATION_MANAGEMENT_OVERVIEW: `${APPLICATION_MANAGEMENT_ROOT}/overview`,
94-
APPLICATION_MANAGEMENT_APP: `${APPLICATION_MANAGEMENT_ROOT}/devtron-app`,
95-
APPLICATION_MANAGEMENT_APP_LIST: `${APPLICATION_MANAGEMENT_ROOT}/devtron-app/list`,
96-
APPLICATION_MANAGEMENT_CREATE_DEVTRON_APP: `${APPLICATION_MANAGEMENT_ROOT}/devtron-app/list/create-app`,
97-
APPLICATION_MANAGEMENT_APPLICATION_GROUP: `${APPLICATION_MANAGEMENT_ROOT}/application-group`,
98-
APPLICATION_MANAGEMENT_TEMPLATES_DEVTRON_APP,
99-
APPLICATION_MANAGEMENT_TEMPLATES_DEVTRON_APP_CREATE: `${APPLICATION_MANAGEMENT_TEMPLATES_DEVTRON_APP}/create`,
100-
// NOTE: using appId since we are re-using AppConfig component
101-
APPLICATION_MANAGEMENT_TEMPLATES_DEVTRON_APP_DETAIL: `${APPLICATION_MANAGEMENT_TEMPLATES_DEVTRON_APP}/detail/:appId`,
102-
APPLICATION_MANAGEMENT_CONFIGURATIONS,
103-
APPLICATION_MANAGEMENT_CONFIGURATIONS_DEPLOYMENT_CHARTS: `${APPLICATION_MANAGEMENT_CONFIGURATIONS}/deployment-charts`,
104-
APPLICATION_MANAGEMENT_CONFIGURATIONS_SCOPED_VARIABLES: `${APPLICATION_MANAGEMENT_CONFIGURATIONS}/scoped-variables`,
105-
APPLICATION_MANAGEMENT_CONFIGURATIONS_BUILD_INFRA: `${APPLICATION_MANAGEMENT_CONFIGURATIONS}/build-infra`,
106-
APPLICATION_MANAGEMENT_CONFIGURATIONS_BUILD_INFRA_PROFILES: `${APPLICATION_MANAGEMENT_CONFIGURATIONS}/build-infra/profiles`,
107-
APPLICATION_MANAGEMENT_CONFIGURATIONS_NOTIFICATIONS: `${APPLICATION_MANAGEMENT_CONFIGURATIONS}/notifications`,
108-
// INFRASTRUCTURE MANAGEMENT
109-
INFRASTRUCTURE_MANAGEMENT: INFRASTRUCTURE_MANAGEMENT_ROOT,
110-
INFRASTRUCTURE_MANAGEMENT_OVERVIEW: `${INFRASTRUCTURE_MANAGEMENT_ROOT}/overview`,
111-
INFRASTRUCTURE_MANAGEMENT_APP_LIST: `${INFRASTRUCTURE_MANAGEMENT_ROOT}/apps/:appType(${Object.values(InfrastructureManagementAppListType).join('|')})`,
112-
INFRASTRUCTURE_MANAGEMENT_APP: `${INFRASTRUCTURE_MANAGEMENT_ROOT}/apps`,
113-
INFRASTRUCTURE_MANAGEMENT_CHART_STORE: `${INFRASTRUCTURE_MANAGEMENT_ROOT}/chart-store`,
114-
INFRASTRUCTURE_MANAGEMENT_CHART_STORE_DISCOVER: `${INFRASTRUCTURE_MANAGEMENT_ROOT}/chart-store/discover`,
115-
INFRASTRUCTURE_MANAGEMENT_RESOURCE_BROWSER: `${INFRASTRUCTURE_MANAGEMENT_ROOT}/resource-browser`,
116-
INFRASTRUCTURE_MANAGEMENT_RESOURCE_WATCHER: `${INFRASTRUCTURE_MANAGEMENT_ROOT}/resource-watcher`,
117-
// SOFTWARE RELEASE MANAGEMENT
118-
SOFTWARE_RELEASE_MANAGEMENT: SOFTWARE_RELEASE_MANAGEMENT_ROOT,
119-
// COST VISIBILITY
120-
COST_VISIBILITY: COST_VISIBILITY_ROOT,
121-
COST_VISIBILITY_OVERVIEW: `${COST_VISIBILITY_ROOT}/overview`,
122-
COST_BREAKDOWN_ROUTE: `${COST_VISIBILITY_ROOT}/breakdown/:breakdownViewType`,
123-
COST_BREAKDOWN_CLUSTERS: `${COST_VISIBILITY_ROOT}/breakdown/${CostBreakdownViewType.CLUSTERS}`,
124-
COST_BREAKDOWN_ENVIRONMENTS: `${COST_VISIBILITY_ROOT}/breakdown/${CostBreakdownViewType.ENVIRONMENTS}`,
125-
COST_BREAKDOWN_PROJECTS: `${COST_VISIBILITY_ROOT}/breakdown/${CostBreakdownViewType.PROJECTS}`,
126-
COST_BREAKDOWN_APPLICATIONS: `${COST_VISIBILITY_ROOT}/breakdown/${CostBreakdownViewType.APPLICATIONS}`,
127-
COST_BREAKDOWN_DETAIL: `:${CostBreakdownItemViewParamsType.ITEM_NAME}/:${CostBreakdownItemViewParamsType.VIEW}/:${CostBreakdownItemViewParamsType.DETAIL}?`,
128-
COST_CONFIGURATIONS: `${COST_VISIBILITY_ROOT}/configurations`,
129-
// SECURITY CENTER
130-
SECURITY_CENTER: SECURITY_CENTER_ROOT,
131-
SECURITY_CENTER_OVERVIEW: `${SECURITY_CENTER_ROOT}/overview`,
132-
SECURITY_CENTER_VULNERABILITIES: `${SECURITY_CENTER_ROOT}/vulnerabilities`,
133-
SECURITY_CENTER_VULNERABILITY_DEPLOYMENTS: `${SECURITY_CENTER_ROOT}/vulnerabilities/deployments`,
134-
SECURITY_CENTER_VULNERABILITY_CVES: `${SECURITY_CENTER_ROOT}/vulnerabilities/cves`,
135-
SECURITY_CENTER_SECURITY_ENABLEMENT: `${SECURITY_CENTER_ROOT}/security-enablement`,
136-
SECURITY_CENTER_POLICIES: `${SECURITY_CENTER_ROOT}/policies`,
137-
// AUTOMATION AND ENABLEMENT
138-
AUTOMATION_AND_ENABLEMENT: AUTOMATION_AND_ENABLEMENT_ROOT,
139-
AUTOMATION_AND_ENABLEMENT_JOB: `${AUTOMATION_AND_ENABLEMENT_ROOT}/job`,
140-
// DATA PROTECTION
141-
DATA_PROTECTION: DATA_PROTECTION_ROOT,
142-
DATA_PROTECTION_OVERVIEW: `${DATA_PROTECTION_ROOT}/overview`,
143-
DATA_PROTECTION_BACKUP_AND_SCHEDULE,
144-
DATA_PROTECTION_BACKUP_AND_SCHEDULE_DETAIL: `${DATA_PROTECTION_BACKUP_AND_SCHEDULE}/detail/:id`,
145-
DATA_PROTECTION_RESTORES: `${DATA_PROTECTION_ROOT}/restores`,
146-
DATA_PROTECTION_RESTORES_DETAIL: `${DATA_PROTECTION_ROOT}/restores/:restoreId`,
147-
DATA_PROTECTION_BACKUP_LOCATIONS: `${DATA_PROTECTION_ROOT}/backup-locations/:type(${Object.values(BackupLocationsTypes).join('|')})`,
148-
BACKUP_LOCATION_DETAILS: `/:locationId`,
149-
// GLOBAL CONFIGURATION
150-
GLOBAL_CONFIG: GLOBAL_CONFIG_ROOT,
151-
GLOBAL_CONFIG_DOCKER: `${GLOBAL_CONFIG_ROOT}/docker`,
152-
GLOBAL_CONFIG_EDIT_CLUSTER: `${GLOBAL_CONFIG_ROOT}/cluster-env/edit/:clusterId`,
153-
GLOBAL_CONFIG_PROJECTS: `${GLOBAL_CONFIG_ROOT}/projects`,
154-
PERMISSION_GROUPS: `${GLOBAL_CONFIG_ROOT}/auth/groups`,
155-
EXTERNAL_APPS: 'ea',
59+
APPLICATION_MANAGEMENT_APP: '/application-management/devtron-app',
60+
GLOBAL_CONFIG_EDIT_CLUSTER: '/global-configuration/cluster-env/edit/:clusterId',
15661
} as const
15762

15863
export const ROUTES = {
@@ -171,7 +76,6 @@ export const ROUTES = {
17176
INFRA_CONFIG_PROFILE: 'infra-config/profile',
17277
SCAN_RESULT: 'scan-result',
17378
NOTIFIER: 'notification',
174-
APP_LIST: 'app/list',
17579
TELEMETRY_EVENT: 'telemetry/event',
17680
SERVER_INFO_API: 'server',
17781
ATTRIBUTES_USER: 'attributes/user',

src/Common/CustomTagSelector/Types.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,8 +74,10 @@ export interface TagLabelValueSelectorType {
7474
noBackDrop?: boolean
7575
}
7676

77-
export interface ResizableTagTextAreaProps
78-
extends Omit<DetailedHTMLProps<TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>, 'value'> {
77+
export interface ResizableTagTextAreaProps extends Omit<
78+
DetailedHTMLProps<TextareaHTMLAttributes<HTMLTextAreaElement>, HTMLTextAreaElement>,
79+
'value'
80+
> {
7981
minHeight?: number
8082
maxHeight?: number
8183
value: string

src/Common/Dialogs/DialogForm.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ export class DialogForm extends Component<PropsWithChildren<DialogFormProps>> {
5757
<div className={`modal__header ${this.props.headerClassName || ''}`}>
5858
<h1 className="modal__title">{this.props.title}</h1>
5959
<button type="button" className="dc__transparent" onClick={this.props.close}>
60-
{' '}
6160
<img src={close} alt="close" />
6261
</button>
6362
</div>

0 commit comments

Comments
 (0)