Skip to content

Commit c3c319b

Browse files
committed
Merge branch 'main' of github.com:devtron-labs/dashboard into feat/catalog-dependencies
2 parents 915ff9f + ac7f35e commit c3c319b

File tree

34 files changed

+1056
-369
lines changed

34 files changed

+1056
-369
lines changed

src/App.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import {
1818
ToastBody3 as UpdateToast,
1919
ErrorBoundary,
2020
} from './components/common'
21-
import { showError, Progressing, BreadcrumbStore, Reload } from '@devtron-labs/devtron-fe-common-lib'
21+
import { showError, BreadcrumbStore, Reload, DevtronProgressing } from '@devtron-labs/devtron-fe-common-lib'
2222
import * as serviceWorker from './serviceWorker'
2323
import Hotjar from './components/Hotjar/Hotjar'
2424
import { validateToken } from './services/service'
@@ -207,7 +207,7 @@ export default function App() {
207207
<Suspense fallback={null}>
208208
{validating ? (
209209
<div className="full-height-width">
210-
<Progressing pageLoader />
210+
<DevtronProgressing parentClasses="h-100 flex bcn-0" classes="icon-dim-80"/>
211211
</div>
212212
) : (
213213
<>

src/components/ApplicationGroup/List/EnvironmentsList.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import React, { useState, useEffect, useContext } from 'react'
2-
import { Progressing, useAsync } from '@devtron-labs/devtron-fe-common-lib'
2+
import { DevtronProgressing, useAsync } from '@devtron-labs/devtron-fe-common-lib'
33
import { useRouteMatch } from 'react-router'
44
import { ReactComponent as Search } from '../../../assets/icons/ic-search.svg'
55
import { ReactComponent as Clear } from '../../../assets/icons/ic-error.svg'
@@ -191,7 +191,7 @@ export default function EnvironmentsList({ isSuperAdmin }: AppGroupAdminType) {
191191
}
192192

193193
if (loading) {
194-
return <Progressing pageLoader />
194+
return <DevtronProgressing parentClasses="h-100 flex bcn-0" classes="icon-dim-80"/>
195195
}
196196

197197
return (

src/components/Jobs/JobDetails/JobDetails.tsx

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,11 @@ export default function JobDetails() {
3030
const { appId } = useParams<{ appId: string }>()
3131
const [jobName, setJobName] = useState('')
3232
const [appMetaInfo, setAppMetaInfo] = useState<AppMetaInfo>()
33+
const [jobListLoading, setJobListLoading] = useState<boolean>(false)
3334

3435
useEffect(() => {
35-
getAppMetaInfoRes()
36+
setJobListLoading(true)
37+
getAppMetaInfoRes().finally(() => setJobListLoading(false))
3638
}, [appId])
3739

3840
const getAppMetaInfoRes = async (): Promise<AppMetaInfo> => {
@@ -47,6 +49,9 @@ export default function JobDetails() {
4749
showError(err)
4850
}
4951
}
52+
if (jobListLoading) {
53+
return <Progressing pageLoader />
54+
}
5055

5156
return (
5257
<div className="job-details-page">

src/components/Jobs/JobList/JobsList.tsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import { Route, Switch, useHistory, useLocation, useRouteMatch } from 'react-rou
33
import { URLS } from '../../../config'
44
import {
55
ErrorScreenManager,
6-
Progressing,
76
showError,
87
stopPropagation,
98
ServerErrors,
109
useAsync,
10+
DevtronProgressing,
1111
} from '@devtron-labs/devtron-fe-common-lib'
1212
import { Filter, FilterOption } from '../../common'
1313
import HeaderWithCreateButton from '../../common/header/HeaderWithCreateButton/HeaderWithCreateButton'
@@ -331,8 +331,8 @@ export default function JobsList() {
331331
return (
332332
<div className="jobs-view-container">
333333
{dataStateType === JobListViewType.LOADING && (
334-
<div className="dc__loading-wrapper">
335-
<Progressing pageLoader />
334+
<div className="w-100 h-100vh">
335+
<DevtronProgressing parentClasses="h-100 w-100 flex bcn-0" classes="icon-dim-80"/>
336336
</div>
337337
)}
338338
{dataStateType === JobListViewType.ERROR && (

src/components/ResourceBrowser/ResourceList/ResourceList.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import {
1616
useBreadcrumb,
1717
ErrorScreenManager,
1818
Reload,
19+
DevtronProgressing,
1920
} from '@devtron-labs/devtron-fe-common-lib'
2021
import PageHeader from '../../common/header/PageHeader'
2122
import {
@@ -1039,7 +1040,7 @@ export default function ResourceList() {
10391040
} else if ((loader && !selectedCluster?.value) || clusterLoader) {
10401041
return (
10411042
<div style={{ height: 'calc(100vh - 48px)' }}>
1042-
<Progressing pageLoader />
1043+
<DevtronProgressing parentClasses="h-100 flex bcn-0" classes="icon-dim-80" />
10431044
</div>
10441045
)
10451046
} else if (!selectedCluster?.value) {

src/components/apiTokens/CreateAPIToken.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ function CreateAPIToken({
9494
action: ActionTypes.VIEW,
9595
entityName: [],
9696
})
97-
const [k8sPermission, setK8sPermission] = useState<any[]>([]);
97+
const [k8sPermission, setK8sPermission] = useState<any[]>([])
9898
const [customDate, setCustomDate] = useState<Moment>(null)
9999
const validationRules = new ValidationRules()
100100

src/components/apiTokens/authorization.utils.ts

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,8 @@ export const getDateInMilliseconds = (days) => {
3333
}
3434

3535
export const getSelectedEnvironments = (permission) => {
36-
if (permission.accessType === ACCESS_TYPE_MAP.DEVTRON_APPS) {
37-
return getSelectedPermissionValues(permission.environment)
36+
if (permission.accessType === ACCESS_TYPE_MAP.DEVTRON_APPS || permission.entity === EntityTypes.JOB) {
37+
return getSelectedPermissionValues(permission.environment)
3838
} else {
3939
let allFutureCluster = {}
4040
let envList = ''
@@ -83,25 +83,36 @@ export const createUserPermissionPayload = (
8383
(permission) =>
8484
permission.team?.value && permission.environment.length && permission.entityName.length,
8585
)
86-
.map((permission) => ({
87-
...permission,
88-
action: permission.action.value,
89-
team: permission.team.value,
90-
environment: getSelectedEnvironments(permission),
91-
entityName: getSelectedPermissionValues(permission.entityName),
92-
})),
93-
...k8sPermission.map((permission) => ({
94-
...permission,
95-
entity: EntityTypes.CLUSTER,
96-
action: permission.action.value,
97-
cluster: permission.cluster.label,
98-
group: permission.group.value === '*' ? '' : permission.group.value,
99-
kind: permission.kind.value === '*' ? '' : permission.kind.label,
100-
namespace: permission.namespace.value === '*' ? '' : permission.namespace.value,
101-
resource: permission.resource.find((entity) => entity.value === '*')
86+
.map((permission) => {
87+
const payload = {
88+
...permission,
89+
action: permission.action.value,
90+
team: permission.team.value,
91+
environment: getSelectedEnvironments(permission),
92+
entityName: getSelectedPermissionValues(permission.entityName),
93+
entity: permission.entity,
94+
...(permission.entity === EntityTypes.JOB && {
95+
workflow: permission.workflow?.length
96+
? permission.workflow.find((workflow) => workflow.value === '*')
97+
? ''
98+
: permission.workflow.map((workflow) => workflow.value).join(',')
99+
: '',
100+
}),
101+
}
102+
return payload
103+
}),
104+
...k8sPermission.map((permission) => ({
105+
...permission,
106+
entity: EntityTypes.CLUSTER,
107+
action: permission.action.value,
108+
cluster: permission.cluster.label,
109+
group: permission.group.value === '*' ? '' : permission.group.value,
110+
kind: permission.kind.value === '*' ? '' : permission.kind.label,
111+
namespace: permission.namespace.value === '*' ? '' : permission.namespace.value,
112+
resource: permission.resource.find((entity) => entity.value === '*')
102113
? ''
103-
: permission.resource.map((entity) => entity.value).join(',')
104-
}))
114+
: permission.resource.map((entity) => entity.value).join(','),
115+
})),
105116
],
106117
superAdmin: isSuperAdminAccess,
107118
}

src/components/app/details/appConfig/appConfig.scss

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,6 @@
2323
}
2424
}
2525

26-
&:not(.hide-app-config-help) {
27-
&.hide-external-links {
28-
grid-template-rows: 110px repeat(6, 32px) 1fr auto;
29-
}
30-
}
31-
3226
&.job-compose__side-nav {
3327
grid-template-rows: 110px repeat(4, 32px) 1fr;
3428

src/components/app/details/appDetails/DeployedCommitCard.tsx

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import React, { useEffect, useState } from 'react'
22
import Tippy from '@tippyjs/react'
33
import { ReactComponent as Question } from '../../../../assets/icons/ic-help-outline.svg'
4-
import { ReactComponent as GitHub } from '../../../../assets/icons/git/github.svg'
4+
// import { ReactComponent as GitHub } from '../../../../assets/icons/git/github.svg'
55
import { ReactComponent as CommitIcon } from '../../../../assets/icons/ic-code-commit.svg'
66
import { DeployedCommitCardType } from './appDetails.type'
77
import { showError } from '@devtron-labs/devtron-fe-common-lib'
@@ -11,6 +11,7 @@ import LoadingCard from './LoadingCard'
1111
const DeployedCommitCard = ({ cardLoading, showCommitInfoDrawer, envId, ciArtifactId }: DeployedCommitCardType) => {
1212
const [commitId, setCommitId] = useState<string>(null)
1313
const [commitMessage, setCommitMessage] = useState<string>(null)
14+
const [noValidCommit, setNoValidCommit] = useState<boolean>(false)
1415

1516
useEffect(() => {
1617
if (envId && ciArtifactId) {
@@ -22,17 +23,23 @@ const DeployedCommitCard = ({ cardLoading, showCommitInfoDrawer, envId, ciArtifa
2223
getCITriggerInfoModal(params, null)
2324
.then((response) => {
2425
const materials = response.result?.materials
25-
const lastCommit = materials[0]?.history[0]
26-
const shortenCommitId = lastCommit?.commit?.slice(0, 8)
27-
setCommitId(shortenCommitId)
28-
setCommitMessage(lastCommit?.message)
26+
if (materials && materials.length > 0) {
27+
const lastCommit = materials[0]?.history[0]
28+
const shortenCommitId = lastCommit?.commit?.slice(0, 8)
29+
setCommitId(shortenCommitId)
30+
setCommitMessage(lastCommit?.message)
31+
} else {
32+
setNoValidCommit(true)
33+
}
2934
})
3035
.catch((error) => {
3136
showError(error)
37+
setNoValidCommit(true)
3238
})
3339
}
3440
}, [envId, ciArtifactId])
3541

42+
if (noValidCommit) return null
3643
if (cardLoading || !commitId) return <LoadingCard />
3744

3845
return (
@@ -59,7 +66,9 @@ const DeployedCommitCard = ({ cardLoading, showCommitInfoDrawer, envId, ciArtifa
5966
<div className="dc__ellipsis-right cn-7 ml-2 fw-4 fs-12 dc__ff-monospace">{commitId}</div>
6067
</div>
6168
</div>
62-
<GitHub className="github-icon" />
69+
<div className="dc__git-logo" />
70+
{/* @TODO: This should be dynamic, dependent on the source */}
71+
{/* <GitHub className="github-icon" /> */}
6372
</div>
6473
<div className="app-details-info-card__bottom-container dc__content-space">
6574
<span className="app-details-info-card__bottom-container__message fs-12 fw-4">{commitMessage}</span>

src/components/app/details/appDetails/SourceInfo.tsx

Lines changed: 44 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
//@ts-nocheck
2-
3-
import React, { useMemo } from 'react'
1+
// @ts-nocheck - @TODO: Remove this by fixing the type issues
2+
import React, { useEffect, useMemo, useState } from 'react'
43
import { Link } from 'react-router-dom'
54
import { URLS } from '../../../../config'
65
import { EnvSelector } from './AppDetails'
@@ -11,7 +10,7 @@ import { Nodes, SourceInfoType } from '../../types'
1110
import Tippy from '@tippyjs/react'
1211
import { ReactComponent as LinkIcon } from '../../../../assets/icons/ic-link.svg'
1312
import { ReactComponent as Trash } from '../../../../assets/icons/ic-delete-dots.svg'
14-
import { ConditionalWrap, DeploymentAppTypes } from '@devtron-labs/devtron-fe-common-lib'
13+
import { ConditionalWrap, DeploymentAppTypes, showError } from '@devtron-labs/devtron-fe-common-lib'
1514
import DeploymentStatusCard from './DeploymentStatusCard'
1615
import { importComponentFromFELibrary } from '../../../common/helpers/Helpers'
1716
import DeploymentTypeIcon from '../../../common/DeploymentTypeIcon/DeploymentTypeIcon'
@@ -20,6 +19,7 @@ import DeployedCommitCard from './DeployedCommitCard'
2019
import IssuesCard from './IssuesCard'
2120
import SecurityVulnerabilityCard from './SecurityVulnerabilityCard'
2221
import AppStatusCard from './AppStatusCard'
22+
import { getLastExecutionByArtifactId } from '../../../../services/service'
2323

2424
const AppDetailsDownloadCard = importComponentFromFELibrary('AppDetailsDownloadCard')
2525

@@ -45,6 +45,7 @@ export function SourceInfo({
4545
ciArtifactId,
4646
setErrorsList,
4747
}: SourceInfoType) {
48+
const [showVulnerabilitiesCard, setShowVulnerabilitiesCard] = useState<boolean>(false)
4849
const isdeploymentAppDeleting = appDetails?.deploymentAppDeleteRequest || false
4950
const isArgoCdApp = appDetails?.deploymentAppType === DeploymentAppTypes.GITOPS
5051
const status = appDetails?.resourceTree?.status || ''
@@ -63,6 +64,30 @@ export function SourceInfo({
6364
message = Rollout[0].health.message
6465
}
6566

67+
const getScannedStatus = async () => {
68+
const { appId, ciArtifactId } = appDetails
69+
try {
70+
const {
71+
result: { scanEnabled, scanned },
72+
} = await getLastExecutionByArtifactId(appId, ciArtifactId)
73+
if (scanEnabled && scanned) {
74+
// If scanEnabled and scanned is true, then show the vulnerabilities card
75+
setShowVulnerabilitiesCard(true)
76+
} else {
77+
setShowVulnerabilitiesCard(false)
78+
}
79+
} catch (error) {
80+
setShowVulnerabilitiesCard(false)
81+
showError(error)
82+
}
83+
}
84+
85+
useEffect(() => {
86+
if (appDetails?.ciArtifactId && appDetails?.appId) {
87+
getScannedStatus()
88+
}
89+
}, [appDetails?.ciArtifactId, appDetails?.appId])
90+
6691
const onClickShowCommitInfo = (): void => {
6792
showCommitInfo(true)
6893
}
@@ -218,17 +243,21 @@ export function SourceInfo({
218243
isVirtualEnvironment={isVirtualEnvironment}
219244
refetchDeploymentStatus={refetchDeploymentStatus}
220245
/>
221-
<DeployedCommitCard
222-
cardLoading={cardLoading}
223-
showCommitInfoDrawer={onClickShowCommitInfo}
224-
envId={envId}
225-
ciArtifactId={ciArtifactId}
226-
/>
227-
<SecurityVulnerabilityCard
228-
cardLoading={cardLoading}
229-
severityCount={severityCount}
230-
showVulnerabilitiesModal={showVulnerabilitiesModal}
231-
/>
246+
{appDetails?.dataSource !== 'EXTERNAL' && (
247+
<DeployedCommitCard
248+
cardLoading={cardLoading}
249+
showCommitInfoDrawer={onClickShowCommitInfo}
250+
envId={envId}
251+
ciArtifactId={ciArtifactId}
252+
/>
253+
)}
254+
{!appDetails?.deploymentAppDeleteRequest && showVulnerabilitiesCard && (
255+
<SecurityVulnerabilityCard
256+
cardLoading={cardLoading}
257+
severityCount={severityCount}
258+
showVulnerabilitiesModal={showVulnerabilitiesModal}
259+
/>
260+
)}
232261
<div className="flex right ml-auto">
233262
{appDetails?.appStoreChartId && (
234263
<>

0 commit comments

Comments
 (0)