Skip to content

Commit 9b4be29

Browse files
committed
refactor: enhance approval policy checks and update tag warning logic in deployment utilities
1 parent 57cd39c commit 9b4be29

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

src/components/app/details/triggerView/DeployImageModal/BulkDeployModal.tsx

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
Drawer,
1515
genericCDMaterialsService,
1616
GenericEmptyState,
17+
getIsApprovalPolicyConfigured,
1718
Icon,
1819
MODAL_TYPE,
1920
ModuleNameMap,
@@ -478,6 +479,9 @@ const BulkDeployModal = ({
478479
const { tagsWarning, updatedMaterials } = getUpdatedMaterialsForTagSelection(
479480
tagOption.value,
480481
appDetails.materialResponse?.materials || [],
482+
!getIsApprovalPolicyConfigured(
483+
appDetails.materialResponse?.deploymentApprovalInfo?.approvalConfigData,
484+
) || getIsExceptionUser(appDetails.materialResponse),
481485
)
482486

483487
updatedAppInfoMap[appDetails.appId] = {

src/components/app/details/triggerView/DeployImageModal/utils.tsx

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import {
1414
DeploymentWithConfigType,
1515
ExcludedImageNode,
1616
FilterStates,
17+
getIsApprovalPolicyConfigured,
1718
getIsRequestAborted,
1819
getStageTitle,
1920
Icon,
@@ -381,7 +382,11 @@ export const getDeployButtonStyle = (
381382
export const getIsConsumedImageAvailable = (materials: CDMaterialType[]) =>
382383
materials.some((materialItem) => materialItem.deployed && materialItem.latest) ?? false
383384

384-
const getTagWarningRelatedToMaterial = (updatedMaterials: CDMaterialType[], selectedImageTagName: string): string => {
385+
const getTagWarningRelatedToMaterial = (
386+
updatedMaterials: CDMaterialType[],
387+
selectedImageTagName: string,
388+
canSelectNonApprovedImage: boolean,
389+
): string => {
385390
const selectedImage = updatedMaterials.find((material) => material.isSelected)
386391

387392
const selectedTagParsedName =
@@ -399,11 +404,23 @@ const getTagWarningRelatedToMaterial = (updatedMaterials: CDMaterialType[], sele
399404
return `Tag ${selectedTagParsedName} is not eligible for deployment`
400405
}
401406

407+
const isNonApprovedImage =
408+
!selectedImage.userApprovalMetadata ||
409+
selectedImage.userApprovalMetadata.approvalRuntimeState !== ApprovalRuntimeStateType.approved
410+
411+
if (isNonApprovedImage && !canSelectNonApprovedImage) {
412+
return `Tag ${selectedTagParsedName} is not approved`
413+
}
414+
402415
return ''
403416
}
404417

405418
// If tag is not present, and image is selected we will show mixed tag
406-
export const getUpdatedMaterialsForTagSelection = (tagName: string, materials: CDMaterialType[]) => {
419+
export const getUpdatedMaterialsForTagSelection = (
420+
tagName: string,
421+
materials: CDMaterialType[],
422+
canSelectNonApprovedImage: boolean,
423+
) => {
407424
const sourceMaterials = structuredClone(materials)
408425

409426
const updatedMaterials = sourceMaterials.map((material, materialIndex) => {
@@ -438,7 +455,7 @@ export const getUpdatedMaterialsForTagSelection = (tagName: string, materials: C
438455

439456
const selectedImage = updatedMaterials.find((material) => material.isSelected)
440457

441-
const tagsWarning = getTagWarningRelatedToMaterial(updatedMaterials, tagName)
458+
const tagsWarning = getTagWarningRelatedToMaterial(updatedMaterials, tagName, canSelectNonApprovedImage)
442459

443460
if (selectedImage && tagsWarning) {
444461
selectedImage.isSelected = false
@@ -522,6 +539,8 @@ export const getBulkCDDetailsMapFromResponse: GetBulkCDDetailsMapFromResponseTyp
522539
const { tagsWarning, updatedMaterials } = getUpdatedMaterialsForTagSelection(
523540
selectedTagName,
524541
materialResponse.value.materials,
542+
!getIsApprovalPolicyConfigured(materialResponse?.value.deploymentApprovalInfo?.approvalConfigData) ||
543+
getIsExceptionUser(materialResponse.value),
525544
)
526545

527546
const parsedTagsWarning = searchText ? '' : tagsWarning

0 commit comments

Comments
 (0)