Skip to content

Commit eba48c0

Browse files
committed
feat: Enhance BulkDeployModal and MaterialListEmptyState for improved material handling and error management
1 parent 9c94714 commit eba48c0

File tree

3 files changed

+33
-25
lines changed

3 files changed

+33
-25
lines changed

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

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -236,6 +236,7 @@ const BulkDeployModal = ({ handleClose, stageType, workflows, isVirtualEnvironme
236236
...prev,
237237
[selectedAppId]: {
238238
...prev[selectedAppId],
239+
materialResponse: response[selectedAppId]?.materialResponse,
239240
warningMessage,
240241
materialError,
241242
deploymentWindowMetadata,
@@ -251,6 +252,10 @@ const BulkDeployModal = ({ handleClose, stageType, workflows, isVirtualEnvironme
251252
}))
252253
}
253254

255+
const reloadMaterials = async () => {
256+
await reloadOrSearchSelectedApp()
257+
}
258+
254259
const handleLoadOlderImages = async () => {
255260
try {
256261
// Even if user changes selectedAppId this will persist since a state closure
@@ -452,29 +457,31 @@ const BulkDeployModal = ({ handleClose, stageType, workflows, isVirtualEnvironme
452457
const handleTagChange: DeployImageContentProps['handleTagChange'] = (tagOption) => {
453458
setSelectedImageTagOption(tagOption)
454459

455-
const selectedApp = appInfoMap[selectedAppId]
456-
const updatedMaterials = getUpdatedMaterialsForTagSelection(
457-
tagOption.value,
458-
selectedApp.materialResponse?.materials || [],
459-
)
460-
const { tagsWarning, updatedMaterials: newMaterials } = updatedMaterials
460+
setAppInfoMap((prev) => {
461+
const updatedAppInfoMap = structuredClone(prev)
462+
Object.values(updatedAppInfoMap).forEach((appDetails) => {
463+
const { tagsWarning, updatedMaterials } = getUpdatedMaterialsForTagSelection(
464+
tagOption.value,
465+
appDetails.materialResponse?.materials || [],
466+
)
461467

462-
const { tagsWarning: previousTagWarning } = getUpdatedMaterialsForTagSelection(
463-
selectedImageTagOption.value,
464-
selectedApp.materialResponse?.materials || [],
465-
)
468+
const { tagsWarning: previousTagWarning } = getUpdatedMaterialsForTagSelection(
469+
selectedImageTagOption.value,
470+
appDetails.materialResponse?.materials || [],
471+
)
466472

467-
setAppInfoMap((prev) => ({
468-
...prev,
469-
[selectedAppId]: {
470-
...prev[selectedAppId],
471-
materialResponse: {
472-
...prev[selectedAppId].materialResponse,
473-
materials: newMaterials,
474-
},
475-
warningMessage: previousTagWarning ? tagsWarning : prev[selectedAppId].warningMessage,
476-
},
477-
}))
473+
updatedAppInfoMap[appDetails.appId] = {
474+
...appDetails,
475+
materialResponse: {
476+
...appDetails.materialResponse,
477+
materials: updatedMaterials,
478+
},
479+
warningMessage:
480+
previousTagWarning || !appDetails.warningMessage ? tagsWarning : appDetails.warningMessage,
481+
}
482+
})
483+
return updatedAppInfoMap
484+
})
478485
}
479486

480487
const changeApp: DeployImageContentProps['changeApp'] = (appId) => {
@@ -601,7 +608,7 @@ const BulkDeployModal = ({ handleClose, stageType, workflows, isVirtualEnvironme
601608
appName={appName}
602609
isSecurityModuleInstalled={isSecurityModuleInstalled}
603610
envName={envName}
604-
reloadMaterials={reloadOrSearchSelectedApp}
611+
reloadMaterials={reloadMaterials}
605612
parentEnvironmentName={parentEnvironmentName}
606613
isVirtualEnvironment={isVirtualEnvironment}
607614
loadOlderImages={handleLoadOlderImages}

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ const MaterialListEmptyState = ({
4242
const isApprovalConfigured = getIsApprovalPolicyConfigured(
4343
materialResponse?.deploymentApprovalInfo?.approvalConfigData,
4444
)
45-
const areNoMoreImagesPresent = materialResponse && materialResponse.materials.length >= materialResponse.totalCount
45+
const areNoMoreImagesPresent = materialResponse && material.length >= materialResponse.totalCount
4646
const resourceFilters = materialResponse?.resourceFilters ?? []
4747

4848
const clearSearch = () => {

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

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -520,7 +520,7 @@ export const getBulkCDDetailsMapFromResponse: GetBulkCDDetailsMapFromResponseTyp
520520
cdMaterialResponseList.forEach((materialResponse, index) => {
521521
const { appId } = validWorkflows[index]
522522

523-
if (materialResponse.status === PromiseAllStatusType.FULFILLED) {
523+
if (materialResponse.status === PromiseAllStatusType.FULFILLED && materialResponse.value) {
524524
const { tagsWarning, updatedMaterials } = getUpdatedMaterialsForTagSelection(
525525
selectedTagName,
526526
materialResponse.value.materials,
@@ -552,7 +552,8 @@ export const getBulkCDDetailsMapFromResponse: GetBulkCDDetailsMapFromResponseTyp
552552
materialResponse: {} as CDMaterialResponseType,
553553
deploymentWindowMetadata: {} as DeploymentWindowProfileMetaData,
554554
deployViewState: structuredClone(INITIAL_DEPLOY_VIEW_STATE),
555-
materialError: materialResponse.reason,
555+
materialError:
556+
materialResponse.status === PromiseAllStatusType.REJECTED ? materialResponse.reason : null,
556557
areMaterialsLoading: false,
557558
}
558559
}

0 commit comments

Comments
 (0)