Skip to content

Commit 4276f66

Browse files
committed
Merge branch 'develop' of https://github.com/devtron-labs/dashboard into feat/scan-cve-listing
2 parents bb9d83f + 14efaaa commit 4276f66

File tree

24 files changed

+278
-411
lines changed

24 files changed

+278
-411
lines changed

.eslintignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,6 @@ src/components/notifications/notifications.util.tsx
262262
src/components/onboardingGuide/GuideCommonHeader.tsx
263263
src/components/onboardingGuide/OnboardingGuide.tsx
264264
src/components/onboardingGuide/onboarding.utils.ts
265-
src/components/project/Project.tsx
266265
src/components/project/ProjectList.tsx
267266
src/components/scopedVariables/Descriptor.tsx
268267
src/components/scopedVariables/DescriptorSearchBar.tsx

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
{
22
"name": "dashboard",
3-
"version": "1.14.2",
3+
"version": "1.21.0",
44
"private": true,
55
"homepage": "/dashboard",
66
"dependencies": {
7-
"@devtron-labs/devtron-fe-common-lib": "1.20.6-pre-52",
7+
"@devtron-labs/devtron-fe-common-lib": "1.21.0-pre-1",
88
"@esbuild-plugins/node-globals-polyfill": "0.2.3",
99
"@rjsf/core": "^5.13.3",
1010
"@rjsf/utils": "^5.13.3",

src/Pages/Applications/DevtronApps/Details/AppConfigurations/MainContent/DeploymentConfigCompare/DeploymentConfigCompare.tsx

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,6 @@ export const DeploymentConfigCompare = ({
398398
updateSearchParams({
399399
compareWith: value,
400400
chartRefId: null,
401-
manifestChartRefId: null,
402401
compareWithManifestChartRefId: null,
403402
compareWithIdentifierId: null,
404403
compareWithPipelineId: null,

src/components/CIPipelineN/OutputDirectoryPath.tsx

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,18 @@
1414
* limitations under the License.
1515
*/
1616

17-
import React, { useContext } from 'react'
17+
import { useContext } from 'react'
1818
import { CustomInput } from '@devtron-labs/devtron-fe-common-lib'
1919
import { TaskFieldDescription, TaskFieldLabel } from '../ciPipeline/types'
2020
import { ReactComponent as Close } from '../../assets/icons/ic-close.svg'
2121
import { ReactComponent as Add } from '../../assets/icons/ic-add.svg'
2222
import TaskFieldTippyDescription from './TaskFieldTippyDescription'
2323
import { pipelineContext } from '../workflowEditor/workflowEditor'
24+
import { ValidationRules } from '@Components/ciPipeline/validationRules'
2425

2526
const OutputDirectoryPath = () => {
26-
const { selectedTaskIndex, formData, setFormData, activeStageName } = useContext(pipelineContext)
27+
const { selectedTaskIndex, formData, setFormData, activeStageName, formDataErrorObj, setFormDataErrorObj } =
28+
useContext(pipelineContext)
2729

2830
const addOutputDirectoryPath = (): void => {
2931
const _formData = { ...formData }
@@ -33,18 +35,50 @@ const OutputDirectoryPath = () => {
3335
}
3436
_formData[activeStageName].steps[selectedTaskIndex].outputDirectoryPath.unshift('')
3537
setFormData(_formData)
38+
39+
const updatedErrorObj = { ...formDataErrorObj }
40+
if (!updatedErrorObj[activeStageName].steps[selectedTaskIndex].outputDirectoryPath) {
41+
updatedErrorObj[activeStageName].steps[selectedTaskIndex].outputDirectoryPath = []
42+
}
43+
updatedErrorObj[activeStageName].steps[selectedTaskIndex].outputDirectoryPath.unshift({
44+
isValid: true,
45+
message: '',
46+
})
47+
setFormDataErrorObj(updatedErrorObj)
3648
}
3749

3850
const handleStoreArtifact = (ev, index) => {
3951
const _formData = { ...formData }
40-
_formData[activeStageName].steps[selectedTaskIndex].outputDirectoryPath[index] = ev.target.value
52+
const value = ev.target.value
53+
54+
const currentOutputPaths = _formData[activeStageName].steps[selectedTaskIndex].outputDirectoryPath
55+
currentOutputPaths[index] = value
4156
setFormData(_formData)
57+
58+
const updatedErrorObj = { ...formDataErrorObj }
59+
const outputPathErrors = updatedErrorObj[activeStageName].steps[selectedTaskIndex].outputDirectoryPath
60+
61+
// If already saved, create valid error array of same length
62+
if (!outputPathErrors?.length && currentOutputPaths?.length) {
63+
updatedErrorObj[activeStageName].steps[selectedTaskIndex].outputDirectoryPath = new Array(
64+
currentOutputPaths.length,
65+
{ isValid: true, message: '' },
66+
)
67+
}
68+
69+
updatedErrorObj[activeStageName].steps[selectedTaskIndex].outputDirectoryPath[index] =
70+
new ValidationRules().outputDirectoryPath(value)
71+
setFormDataErrorObj(updatedErrorObj)
4272
}
4373

4474
const deleteOutputDirectory = (index) => {
4575
const _formData = { ...formData }
4676
_formData[activeStageName].steps[selectedTaskIndex].outputDirectoryPath.splice(index, 1)
4777
setFormData(_formData)
78+
79+
const updatedErrorObj = { ...formDataErrorObj }
80+
updatedErrorObj[activeStageName].steps[selectedTaskIndex].outputDirectoryPath.splice(index, 1)
81+
setFormDataErrorObj(updatedErrorObj)
4882
}
4983

5084
return (
@@ -72,6 +106,10 @@ const OutputDirectoryPath = () => {
72106
value={elm}
73107
onChange={(e) => handleStoreArtifact(e, index)}
74108
name="directory-path"
109+
error={
110+
formDataErrorObj[activeStageName].steps[selectedTaskIndex].outputDirectoryPath?.[index]
111+
?.message
112+
}
75113
/>
76114
<Close
77115
className="icon-dim-24 pointer mt-6 ml-6"

src/components/ResourceBrowser/ResourceList/ResourceBrowserActionMenu.tsx

Lines changed: 45 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,10 @@ import {
3535
} from '@devtron-labs/devtron-fe-common-lib'
3636

3737
import { ReactComponent as MenuDots } from '@Icons/ic-more-vertical.svg'
38+
import {
39+
getManifestResource,
40+
updateManifestResourceHelmApps,
41+
} from '@Components/v2/appDetails/k8Resource/nodeDetail/nodeDetail.api'
3842

3943
import { getShowResourceScanModal, importComponentFromFELibrary } from '../../common'
4044
import { NodeType } from '../../v2/appDetails/appDetails.type'
@@ -58,6 +62,8 @@ const getResourceScanDetails: ({
5862
'function',
5963
)
6064

65+
const RBRestartWorkloadModal = importComponentFromFELibrary('RBRestartWorkloadModal', null, 'function')
66+
6167
const ResourceBrowserActionMenu = forwardRef(
6268
(
6369
{
@@ -75,18 +81,20 @@ const ResourceBrowserActionMenu = forwardRef(
7581
const { installedModuleMap } = useMainContext()
7682

7783
const [showDeleteDialog, setShowDeleteDialog] = useState(false)
84+
const [showRestartModal, setShowRestartModal] = useState(false)
7885
const [showVulnerabilityModal, setShowVulnerabilityModal] = useState(false)
7986

87+
const resource = {
88+
name: String(resourceData.name),
89+
namespace: String(resourceData.namespace),
90+
group: selectedResource?.gvk?.Group,
91+
kind: selectedResource?.gvk?.Kind,
92+
version: selectedResource?.gvk?.Version,
93+
clusterId: +clusterId,
94+
}
95+
8096
const [resourceScanLoading, resourceScanResponse, resourceScanError] = useAsync(
81-
() =>
82-
getResourceScanDetails({
83-
name: String(resourceData.name),
84-
namespace: String(resourceData.namespace),
85-
group: selectedResource?.gvk?.Group,
86-
kind: selectedResource?.gvk?.Kind,
87-
version: selectedResource?.gvk?.Version,
88-
clusterId: +clusterId,
89-
}),
97+
() => getResourceScanDetails(resource),
9098
[],
9199
showVulnerabilityModal && !!getResourceScanDetails,
92100
)
@@ -125,6 +133,9 @@ const ResourceBrowserActionMenu = forwardRef(
125133
},
126134
})
127135
return
136+
case ResourceBrowserActionMenuEnum.restart:
137+
setShowRestartModal(true)
138+
return
128139
case ResourceBrowserActionMenuEnum.delete:
129140
toggleDeleteDialog()
130141
return
@@ -139,6 +150,10 @@ const ResourceBrowserActionMenu = forwardRef(
139150

140151
const id = JSON.stringify(resourceData)
141152

153+
const onRestartWorkloadModalClose = () => {
154+
setShowRestartModal(false)
155+
}
156+
142157
return (
143158
<>
144159
<ActionMenu<ResourceBrowserActionMenuEnum>
@@ -158,6 +173,18 @@ const ResourceBrowserActionMenu = forwardRef(
158173
label: 'Events',
159174
startIcon: { name: 'ic-calendar' },
160175
},
176+
...(RBRestartWorkloadModal &&
177+
window._env_.FEATURE_BULK_RESTART_WORKLOADS_FROM_RB.includes(
178+
selectedResource?.gvk?.Kind.toLowerCase(),
179+
)
180+
? [
181+
{
182+
id: ResourceBrowserActionMenuEnum.restart,
183+
label: 'Restart',
184+
startIcon: { name: 'ic-arrows-clockwise' },
185+
} as ActionMenuItemType<ResourceBrowserActionMenuEnum>,
186+
]
187+
: []),
161188
...(selectedResource?.gvk?.Kind === Nodes.Pod
162189
? [
163190
{
@@ -227,6 +254,15 @@ const ResourceBrowserActionMenu = forwardRef(
227254
hidePolicy
228255
/>
229256
)}
257+
258+
{RBRestartWorkloadModal && showRestartModal && (
259+
<RBRestartWorkloadModal
260+
resource={resource}
261+
getManifestResource={getManifestResource}
262+
updateManifestResourceHelmApps={updateManifestResourceHelmApps}
263+
onClose={onRestartWorkloadModalClose}
264+
/>
265+
)}
230266
</>
231267
)
232268
},

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import React, { useState, useEffect } from 'react'
1818
import {
1919
ComponentSizeType,
20+
DatePickerRangeController,
2021
DocLink,
2122
not,
2223
Progressing,
@@ -42,7 +43,7 @@ import {
4243
AppDetailsPathParams,
4344
} from './appDetails.type'
4445
import { GraphModal, GraphModalProps } from './GraphsModal'
45-
import { DatePickerType2 as DateRangePicker, InValidHostUrlWarningBlock } from '../../../common'
46+
import { InValidHostUrlWarningBlock } from '../../../common'
4647
import { ReactComponent as GraphIcon } from '../../../../assets/icons/ic-graph.svg'
4748
import { ReactComponent as Fullscreen } from '../../../../assets/icons/ic-fullscreen-2.svg'
4849
import { ReactComponent as OpenInNew } from '../../../../assets/icons/ic-open-in-new.svg'
@@ -393,7 +394,7 @@ export const AppMetrics: React.FC<{
393394
<span className="dc__tertiary-tab">Per Pod</span>
394395
</label>
395396
</div>
396-
<DateRangePicker
397+
<DatePickerRangeController
397398
calendar={calendar}
398399
calendarInputs={calendarInputs}
399400
focusedInput={focusedInput}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ const AppStatusCard = ({ appDetails, status, cardLoading, setDetailed, message }
8080
<div
8181
data-testid="app-status-card"
8282
onClick={showApplicationDetailedModal}
83-
className="app-details-info-card pointer flex left bg__primary br-8 mr-12 lh-20 w-200"
83+
className="app-details-info-card pointer flex left bg__primary br-8 lh-20 w-200"
8484
>
8585
<div className="app-details-info-card__top-container flex">
8686
<div className="app-details-info-card__top-container__content">

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ const DeployedCommitCard = ({ cardLoading, showCommitInfoDrawer, envId, ciArtifa
5454
<div
5555
data-testid="deployed-commit-card"
5656
onClick={showCommitInfoDrawer}
57-
className="app-details-info-card pointer flex left bg__primary br-8 mr-12 lh-20 w-200"
57+
className="app-details-info-card pointer flex left bg__primary br-8 lh-20 w-200"
5858
>
5959
<div className="app-details-info-card__top-container flex">
6060
<div className="app-details-info-card__top-container__content">

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ const DeploymentStatusCard = ({
119119
<div
120120
data-testid="deployment-status-card"
121121
onClick={onClickLastDeploymentStatus}
122-
className={`app-details-info-card flex left bg__primary br-8 mr-12 lh-20 w-250 ${hideDetails ? '' : 'cursor'}`}
122+
className={`app-details-info-card flex left bg__primary br-8 lh-20 w-250 ${hideDetails ? '' : 'cursor'}`}
123123
>
124124
{renderDeploymentStatus()}
125125
</div>

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

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616

1717
import { Component } from 'react'
1818
import { Moment } from 'moment'
19-
import { DatePickerType2 as DateRangePicker } from '../../../common'
2019
import { AppMetricsTabType, ChartType, StatusType, ChartTypes, StatusTypes, AppMetricsTab } from './appDetails.type'
2120
import { getIframeSrc, isK8sVersionValid, ThroughputSelect, getCalendarValue, LatencySelect, AppInfo } from './utils'
2221
import { ReactComponent as GraphIcon } from '../../../../assets/icons/ic-graph.svg'
2322
import { DEFAULTK8SVERSION } from '../../../../config'
2423
import { APP_METRICS_CALENDAR_INPUT_DATE_FORMAT } from './constants'
24+
import { DatePickerRangeController } from '@devtron-labs/devtron-fe-common-lib'
2525

2626
export const ChartNames = {
2727
cpu: 'CPU Usage',
@@ -464,7 +464,7 @@ export class GraphModal extends Component<GraphModalProps, GraphModalState> {
464464
<span className="dc__tertiary-tab">Per Pod</span>
465465
</label>
466466
</div>
467-
<DateRangePicker
467+
<DatePickerRangeController
468468
calendar={this.state.calendar}
469469
calendarInputs={this.state.calendarInputs}
470470
focusedInput={this.state.focusedInput}

0 commit comments

Comments
 (0)