Skip to content

Commit c13d4e4

Browse files
Merge pull request #139 from devtron-labs/feat/release-image-selection
feat: release image selection
2 parents 0fe6d90 + b8ccfd8 commit c13d4e4

File tree

6 files changed

+42
-7
lines changed

6 files changed

+42
-7
lines changed

src/Common/Common.service.ts

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -62,12 +62,12 @@ export function setImageTags(request, pipelineId: number, artifactId: number) {
6262
return post(`${ROUTES.IMAGE_TAGGING}/${pipelineId}/${artifactId}`, request)
6363
}
6464

65-
const cdMaterialListModal = (artifacts: any[], offset: number, artifactId?: number, artifactStatus?: string) => {
65+
const cdMaterialListModal = (artifacts: any[], offset: number, artifactId?: number, artifactStatus?: string, disableDefaultSelection?: boolean) => {
6666
if (!artifacts || !artifacts.length) return []
6767

6868
const markFirstSelected = offset === 0
6969
const startIndex = offset
70-
let isImageMarked = false
70+
let isImageMarked = disableDefaultSelection
7171

7272
const materials = artifacts.map((material, index) => {
7373
let artifactStatusValue = ''
@@ -178,8 +178,8 @@ const processCDMaterialsMetaInfo = (cdMaterialsResult): CDMaterialsMetaInfo => {
178178
}
179179

180180
return {
181-
appReleaseTagNames: cdMaterialsResult.appReleaseTagNames,
182-
tagsEditable: cdMaterialsResult.tagsEditable,
181+
appReleaseTagNames: cdMaterialsResult.appReleaseTagNames ?? [],
182+
tagsEditable: cdMaterialsResult.tagsEditable ?? false,
183183
hideImageTaggingHardDelete: cdMaterialsResult.hideImageTaggingHardDelete,
184184
resourceFilters: cdMaterialsResult.resourceFilters ?? [],
185185
totalCount: cdMaterialsResult.totalCount ?? 0,
@@ -201,11 +201,12 @@ const processImagePromotionInfo = (cdMaterialsResult): ImagePromotionMaterialInf
201201
}
202202
}
203203

204-
const processCDMaterialServiceResponse = (
204+
export const processCDMaterialServiceResponse = (
205205
cdMaterialsResult,
206206
stage: DeploymentNodeType,
207207
offset: number,
208208
filter: CDMaterialFilterQuery,
209+
disableDefaultSelection?: boolean,
209210
): CDMaterialResponseType => {
210211
if (!cdMaterialsResult) {
211212
return {
@@ -221,6 +222,7 @@ const processCDMaterialServiceResponse = (
221222
offset ?? 0,
222223
cdMaterialsResult.latest_wf_artifact_id,
223224
cdMaterialsResult.latest_wf_artifact_status,
225+
disableDefaultSelection,
224226
)
225227
const approvalInfo = processCDMaterialsApprovalInfo(
226228
stage === DeploymentNodeType.CD || stage === DeploymentNodeType.APPROVAL,
@@ -251,7 +253,7 @@ const getSanitizedQueryParams = (queryParams: CDMaterialServiceQueryParams): CDM
251253
export const genericCDMaterialsService = (
252254
serviceType: CDMaterialServiceEnum,
253255
/**
254-
* In case of hotfix would be sending it as null
256+
* In case of multiple candidates are there like promotion, would be sending it as null
255257
*/
256258
cdMaterialID: number,
257259
/**
@@ -274,7 +276,6 @@ export const genericCDMaterialsService = (
274276
// Directly sending queryParams since do not need to get queryParams sanitized in case of image promotion
275277
URL = getUrlWithSearchParams(ROUTES.APP_ARTIFACT_PROMOTE_MATERIAL, queryParams)
276278
break
277-
278279
// Meant for handling getCDMaterialList
279280
default:
280281
URL = getUrlWithSearchParams(`${ROUTES.CD_MATERIAL_GET}/${cdMaterialID}/material`, {
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { createContext, useContext, useMemo } from 'react'
2+
import { ImageSelectionUtilityContextType, ImageSelectionUtilityProviderProps } from './types'
3+
4+
export const ImageSelectionUtilityContext = createContext<ImageSelectionUtilityContextType>(null)
5+
export const useImageSelectionUtilityContext = () => {
6+
const context = useContext<ImageSelectionUtilityContextType>(ImageSelectionUtilityContext)
7+
if (!context) {
8+
throw new Error('useImageSelectionUtilityContext must be used within ImageSelectionUtilityProvider')
9+
}
10+
11+
return context
12+
}
13+
14+
export const ImageSelectionUtilityProvider = ({ children, value }: ImageSelectionUtilityProviderProps) => {
15+
const memoizedValue = useMemo(() => value, [value])
16+
17+
return (
18+
<ImageSelectionUtilityContext.Provider value={memoizedValue}>{children}</ImageSelectionUtilityContext.Provider>
19+
)
20+
}
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export * from './ImageSelectionUtility'
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
export interface ImageSelectionUtilityContextType {
2+
// TODO: Not Intended but will remove it later if time remains
3+
gitCommitInfoGeneric: (...props) => JSX.Element
4+
// TODO: Not Intended but will remove it later if time remains
5+
getModuleInfo: (moduleName: string) => Promise<any>
6+
}
7+
8+
export interface ImageSelectionUtilityProviderProps {
9+
children: React.ReactNode
10+
value: ImageSelectionUtilityContextType
11+
}

src/Shared/Providers/MainContextProvider.tsx

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { createContext, useContext } from 'react'
22
import { MainContext, MainContextProviderProps } from './types'
33

4+
// TODO: (Arun) - Move to separate folder
45
const mainContext = createContext<MainContext>(null)
56

67
export const useMainContext = () => {

src/Shared/Providers/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
11
export * from './MainContextProvider'
2+
export * from './ImageSelectionUtility'

0 commit comments

Comments
 (0)