@devtron-labs/devtron-fe-common-lib 0.0.37-beta-2 → 0.0.37-beta-3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Common/Common.service.d.ts +2 -2
- package/dist/Common/Constants.d.ts +1 -0
- package/dist/Common/Types.d.ts +36 -5
- package/dist/index.js +193 -74
- package/package.json +1 -1
- package/src/Common/Common.service.ts +223 -76
- package/src/Common/Constants.ts +1 -0
- package/src/Common/ImageTags.tsx +11 -2
- package/src/Common/Types.ts +44 -5
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TeamList, ResponseType, DeploymentNodeType } from './Types';
|
|
1
|
+
import { TeamList, ResponseType, DeploymentNodeType, CDMaterialServiceEnum, CDMaterialServiceQueryParams, CDMaterialResponseType } from './Types';
|
|
2
2
|
export declare const getTeamListMin: () => Promise<TeamList>;
|
|
3
3
|
interface UserRole extends ResponseType {
|
|
4
4
|
result?: {
|
|
@@ -13,7 +13,7 @@ export declare const SourceTypeMap: {
|
|
|
13
13
|
};
|
|
14
14
|
export declare function getUserRole(appName?: string): Promise<UserRole>;
|
|
15
15
|
export declare function setImageTags(request: any, pipelineId: number, artifactId: number): Promise<ResponseType>;
|
|
16
|
-
export declare const
|
|
16
|
+
export declare const genericCDMaterialsService: (serviceType: CDMaterialServiceEnum, cdMaterialID: number, stage: DeploymentNodeType, signal: AbortSignal, queryParams?: CDMaterialServiceQueryParams) => Promise<CDMaterialResponseType>;
|
|
17
17
|
export declare function extractImage(image: string): string;
|
|
18
18
|
export declare function createGitCommitUrl(url: string, revision: string): string;
|
|
19
19
|
export {};
|
package/dist/Common/Types.d.ts
CHANGED
|
@@ -202,6 +202,9 @@ export declare enum FilterStates {
|
|
|
202
202
|
BLOCKED = 1,
|
|
203
203
|
ERROR = 2
|
|
204
204
|
}
|
|
205
|
+
export declare enum MaterialDataSource {
|
|
206
|
+
EXTERNAL = "ext"
|
|
207
|
+
}
|
|
205
208
|
export interface CDMaterialType {
|
|
206
209
|
index: number;
|
|
207
210
|
id: string;
|
|
@@ -228,9 +231,31 @@ export interface CDMaterialType {
|
|
|
228
231
|
imageReleaseTags?: ReleaseTag[];
|
|
229
232
|
artifactStatus?: string;
|
|
230
233
|
filterState: FilterStates;
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
+
scanToolId?: number;
|
|
235
|
+
appliedFiltersTimestamp?: string;
|
|
236
|
+
appliedFilters?: FilterConditionsListType[];
|
|
237
|
+
appliedFiltersState?: FilterStates;
|
|
238
|
+
createdTime?: string;
|
|
239
|
+
deployed?: boolean;
|
|
240
|
+
dataSource?: MaterialDataSource;
|
|
241
|
+
}
|
|
242
|
+
export declare enum CDMaterialServiceEnum {
|
|
243
|
+
ROLLBACK = "rollback",
|
|
244
|
+
CD_MATERIALS = "cd-materials"
|
|
245
|
+
}
|
|
246
|
+
export declare enum CDMaterialResourceQuery {
|
|
247
|
+
PENDING_APPROVAL = "PENDING_APPROVAL"
|
|
248
|
+
}
|
|
249
|
+
export declare enum CDMaterialFilterQuery {
|
|
250
|
+
RESOURCE = "ELIGIBLE_RESOURCES",
|
|
251
|
+
ALL = "ALL_RESOURCES"
|
|
252
|
+
}
|
|
253
|
+
export interface CDMaterialServiceQueryParams {
|
|
254
|
+
search?: string;
|
|
255
|
+
offset?: number;
|
|
256
|
+
size?: number;
|
|
257
|
+
resource?: CDMaterialResourceQuery;
|
|
258
|
+
filter?: CDMaterialFilterQuery;
|
|
234
259
|
}
|
|
235
260
|
export interface CommonNodeAttr {
|
|
236
261
|
connectingCiPipelineId?: number;
|
|
@@ -337,15 +362,21 @@ export interface FilterConditionsListType {
|
|
|
337
362
|
description: string;
|
|
338
363
|
conditions: FilterConditionsInfo[];
|
|
339
364
|
}
|
|
340
|
-
export interface
|
|
365
|
+
export interface CDMaterialsApprovalInfo {
|
|
341
366
|
approvalUsers: string[];
|
|
342
|
-
materials: any[];
|
|
343
367
|
userApprovalConfig: UserApprovalConfigType;
|
|
344
368
|
requestedUserId: number;
|
|
369
|
+
}
|
|
370
|
+
export interface CDMaterialsMetaInfo {
|
|
345
371
|
tagsEditable: boolean;
|
|
346
372
|
appReleaseTagNames: string[];
|
|
347
373
|
hideImageTaggingHardDelete: boolean;
|
|
348
374
|
resourceFilters?: FilterConditionsListType[];
|
|
375
|
+
totalCount: number;
|
|
376
|
+
canApproverDeploy: boolean;
|
|
377
|
+
}
|
|
378
|
+
export interface CDMaterialResponseType extends CDMaterialsMetaInfo, CDMaterialsApprovalInfo {
|
|
379
|
+
materials: CDMaterialType[];
|
|
349
380
|
}
|
|
350
381
|
export interface InputDetailType {
|
|
351
382
|
label: string;
|
package/dist/index.js
CHANGED
|
@@ -44,6 +44,7 @@ var ROUTES = {
|
|
|
44
44
|
PROJECT_LIST_MIN: 'team/autocomplete',
|
|
45
45
|
USER_CHECK_ROLE: 'user/check/roles',
|
|
46
46
|
IMAGE_TAGGING: 'app/image-tagging',
|
|
47
|
+
CD_MATERIAL_GET: 'app/cd-pipeline'
|
|
47
48
|
};
|
|
48
49
|
exports.KEY_VALUE = void 0;
|
|
49
50
|
(function (KEY_VALUE) {
|
|
@@ -430,6 +431,24 @@ exports.FilterStates = void 0;
|
|
|
430
431
|
FilterStates[FilterStates["BLOCKED"] = 1] = "BLOCKED";
|
|
431
432
|
FilterStates[FilterStates["ERROR"] = 2] = "ERROR";
|
|
432
433
|
})(exports.FilterStates || (exports.FilterStates = {}));
|
|
434
|
+
exports.MaterialDataSource = void 0;
|
|
435
|
+
(function (MaterialDataSource) {
|
|
436
|
+
MaterialDataSource["EXTERNAL"] = "ext";
|
|
437
|
+
})(exports.MaterialDataSource || (exports.MaterialDataSource = {}));
|
|
438
|
+
exports.CDMaterialServiceEnum = void 0;
|
|
439
|
+
(function (CDMaterialServiceEnum) {
|
|
440
|
+
CDMaterialServiceEnum["ROLLBACK"] = "rollback";
|
|
441
|
+
CDMaterialServiceEnum["CD_MATERIALS"] = "cd-materials";
|
|
442
|
+
})(exports.CDMaterialServiceEnum || (exports.CDMaterialServiceEnum = {}));
|
|
443
|
+
exports.CDMaterialResourceQuery = void 0;
|
|
444
|
+
(function (CDMaterialResourceQuery) {
|
|
445
|
+
CDMaterialResourceQuery["PENDING_APPROVAL"] = "PENDING_APPROVAL";
|
|
446
|
+
})(exports.CDMaterialResourceQuery || (exports.CDMaterialResourceQuery = {}));
|
|
447
|
+
exports.CDMaterialFilterQuery = void 0;
|
|
448
|
+
(function (CDMaterialFilterQuery) {
|
|
449
|
+
CDMaterialFilterQuery["RESOURCE"] = "ELIGIBLE_RESOURCES";
|
|
450
|
+
CDMaterialFilterQuery["ALL"] = "ALL_RESOURCES";
|
|
451
|
+
})(exports.CDMaterialFilterQuery || (exports.CDMaterialFilterQuery = {}));
|
|
433
452
|
exports.DeploymentAppTypes = void 0;
|
|
434
453
|
(function (DeploymentAppTypes) {
|
|
435
454
|
DeploymentAppTypes["HELM"] = "helm";
|
|
@@ -22689,77 +22708,170 @@ function getUserRole(appName) {
|
|
|
22689
22708
|
function setImageTags(request, pipelineId, artifactId) {
|
|
22690
22709
|
return post("".concat(ROUTES.IMAGE_TAGGING, "/").concat(pipelineId, "/").concat(artifactId), request);
|
|
22691
22710
|
}
|
|
22692
|
-
|
|
22693
|
-
var
|
|
22694
|
-
|
|
22695
|
-
|
|
22696
|
-
|
|
22697
|
-
|
|
22698
|
-
|
|
22699
|
-
|
|
22700
|
-
|
|
22701
|
-
|
|
22702
|
-
|
|
22703
|
-
};
|
|
22711
|
+
var processURL = function (url, params) {
|
|
22712
|
+
var validParams = Object.keys(params).filter(function (key) {
|
|
22713
|
+
return params[key] != null;
|
|
22714
|
+
});
|
|
22715
|
+
if (!validParams.length) {
|
|
22716
|
+
return url;
|
|
22717
|
+
}
|
|
22718
|
+
var queryString = validParams
|
|
22719
|
+
.map(function (key) {
|
|
22720
|
+
if (Array.isArray(params[key])) {
|
|
22721
|
+
return "".concat(key, "=").concat(params[key].join(','));
|
|
22704
22722
|
}
|
|
22705
|
-
|
|
22706
|
-
|
|
22707
|
-
|
|
22708
|
-
|
|
22709
|
-
|
|
22710
|
-
|
|
22711
|
-
|
|
22712
|
-
|
|
22713
|
-
|
|
22714
|
-
|
|
22715
|
-
|
|
22716
|
-
|
|
22717
|
-
|
|
22718
|
-
|
|
22719
|
-
|
|
22720
|
-
|
|
22721
|
-
|
|
22722
|
-
tab: CDModalTab.Changes,
|
|
22723
|
-
showSourceInfo: false,
|
|
22724
|
-
deployed: material.deployed || false,
|
|
22725
|
-
latest: material.latest || false,
|
|
22726
|
-
vulnerabilitiesLoading: true,
|
|
22727
|
-
scanned: material.scanned,
|
|
22728
|
-
scanEnabled: material.scanEnabled,
|
|
22729
|
-
isSelected: !material.vulnerable && filterState === exports.FilterStates.ALLOWED && index === 0,
|
|
22730
|
-
vulnerable: material.vulnerable,
|
|
22731
|
-
runningOnParentCd: material.runningOnParentCd,
|
|
22732
|
-
artifactStatus: artifactStatusValue,
|
|
22733
|
-
userApprovalMetadata: material.userApprovalMetadata,
|
|
22734
|
-
triggeredBy: material.triggeredBy,
|
|
22735
|
-
isVirtualEnvironment: material.isVirtualEnvironment,
|
|
22736
|
-
imageComment: material.imageComment,
|
|
22737
|
-
imageReleaseTags: material.imageReleaseTags,
|
|
22738
|
-
materialInfo: material.material_info
|
|
22739
|
-
? material.material_info.map(function (mat) {
|
|
22740
|
-
return {
|
|
22741
|
-
modifiedTime: mat.modifiedTime ? moment(mat.modifiedTime).format("ddd, DD MMM YYYY, hh:mm A") : '',
|
|
22742
|
-
commitLink: createGitCommitUrl(mat.url, mat.revision),
|
|
22743
|
-
author: mat.author || '',
|
|
22744
|
-
message: mat.message || '',
|
|
22745
|
-
revision: mat.revision || '',
|
|
22746
|
-
tag: mat.tag || '',
|
|
22747
|
-
webhookData: mat.webhookData || '',
|
|
22748
|
-
url: mat.url || '',
|
|
22749
|
-
branch: (material.ciConfigureSourceType === SourceTypeMap.WEBHOOK
|
|
22750
|
-
? material.ciConfigureSourceValue
|
|
22751
|
-
: mat.branch) || '',
|
|
22752
|
-
type: material.ciConfigureSourceType || '',
|
|
22753
|
-
};
|
|
22754
|
-
})
|
|
22755
|
-
: [],
|
|
22756
|
-
filterState: filterState,
|
|
22757
|
-
};
|
|
22758
|
-
});
|
|
22759
|
-
return {
|
|
22760
|
-
materials: materials
|
|
22761
|
-
};
|
|
22723
|
+
return "".concat(key, "=").concat(params[key]);
|
|
22724
|
+
})
|
|
22725
|
+
.join('&');
|
|
22726
|
+
return "".concat(url, "?").concat(queryString);
|
|
22727
|
+
};
|
|
22728
|
+
var cdMaterialListModal = function (artifacts, offset, artifactId, artifactStatus) {
|
|
22729
|
+
if (!artifacts || !artifacts.length)
|
|
22730
|
+
return [];
|
|
22731
|
+
var markFirstSelected = offset === 0;
|
|
22732
|
+
var startIndex = offset;
|
|
22733
|
+
var isImageMarked = false;
|
|
22734
|
+
var materials = artifacts.map(function (material, index) {
|
|
22735
|
+
var _a, _b, _c, _d, _e, _f;
|
|
22736
|
+
var artifactStatusValue = '';
|
|
22737
|
+
var filterState = (_a = material.filterState) !== null && _a !== void 0 ? _a : exports.FilterStates.ALLOWED;
|
|
22738
|
+
if (artifactId && artifactStatus && material.id === artifactId) {
|
|
22739
|
+
artifactStatusValue = artifactStatus;
|
|
22762
22740
|
}
|
|
22741
|
+
var selectImage = !isImageMarked && markFirstSelected && filterState === exports.FilterStates.ALLOWED ? !material.vulnerable : false;
|
|
22742
|
+
if (selectImage) {
|
|
22743
|
+
isImageMarked = true;
|
|
22744
|
+
}
|
|
22745
|
+
return {
|
|
22746
|
+
index: startIndex + index,
|
|
22747
|
+
id: material.id,
|
|
22748
|
+
deployedTime: material.deployed_time
|
|
22749
|
+
? moment(material.deployed_time).format('ddd, DD MMM YYYY, hh:mm A')
|
|
22750
|
+
: 'Not Deployed',
|
|
22751
|
+
deployedBy: material.deployedBy,
|
|
22752
|
+
wfrId: material.wfrId,
|
|
22753
|
+
tab: CDModalTab.Changes,
|
|
22754
|
+
image: extractImage(material.image),
|
|
22755
|
+
showChanges: false,
|
|
22756
|
+
vulnerabilities: [],
|
|
22757
|
+
buildTime: material.build_time || '',
|
|
22758
|
+
isSelected: selectImage,
|
|
22759
|
+
showSourceInfo: false,
|
|
22760
|
+
deployed: material.deployed || false,
|
|
22761
|
+
latest: material.latest || false,
|
|
22762
|
+
vulnerabilitiesLoading: true,
|
|
22763
|
+
scanned: material.scanned,
|
|
22764
|
+
scanEnabled: material.scanEnabled,
|
|
22765
|
+
vulnerable: material.vulnerable,
|
|
22766
|
+
runningOnParentCd: material.runningOnParentCd,
|
|
22767
|
+
artifactStatus: artifactStatusValue,
|
|
22768
|
+
userApprovalMetadata: material.userApprovalMetadata,
|
|
22769
|
+
triggeredBy: material.triggeredBy,
|
|
22770
|
+
isVirtualEnvironment: material.isVirtualEnvironment,
|
|
22771
|
+
imageComment: material.imageComment,
|
|
22772
|
+
imageReleaseTags: material.imageReleaseTags,
|
|
22773
|
+
// It is going to be null but required in type so can't remove
|
|
22774
|
+
lastExecution: material.lastExecution,
|
|
22775
|
+
materialInfo: material.material_info
|
|
22776
|
+
? material.material_info.map(function (mat) {
|
|
22777
|
+
return {
|
|
22778
|
+
modifiedTime: mat.modifiedTime
|
|
22779
|
+
? moment(mat.modifiedTime).format('ddd, DD MMM YYYY, hh:mm A')
|
|
22780
|
+
: '',
|
|
22781
|
+
commitLink: createGitCommitUrl(mat.url, mat.revision),
|
|
22782
|
+
author: mat.author || '',
|
|
22783
|
+
message: mat.message || '',
|
|
22784
|
+
revision: mat.revision || '',
|
|
22785
|
+
tag: mat.tag || '',
|
|
22786
|
+
webhookData: mat.webhookData || '',
|
|
22787
|
+
url: mat.url || '',
|
|
22788
|
+
branch: (material.ciConfigureSourceType === SourceTypeMap.WEBHOOK
|
|
22789
|
+
? material.ciConfigureSourceValue
|
|
22790
|
+
: mat.branch) || '',
|
|
22791
|
+
type: material.ciConfigureSourceType || '',
|
|
22792
|
+
};
|
|
22793
|
+
})
|
|
22794
|
+
: [],
|
|
22795
|
+
filterState: filterState,
|
|
22796
|
+
appliedFiltersTimestamp: (_b = material.appliedFiltersTimestamp) !== null && _b !== void 0 ? _b : '',
|
|
22797
|
+
appliedFilters: (_c = material.appliedFilters) !== null && _c !== void 0 ? _c : [],
|
|
22798
|
+
appliedFiltersState: (_d = material.appliedFiltersState) !== null && _d !== void 0 ? _d : exports.FilterStates.ALLOWED,
|
|
22799
|
+
createdTime: (_e = material.createdTime) !== null && _e !== void 0 ? _e : '',
|
|
22800
|
+
dataSource: (_f = material.data_source) !== null && _f !== void 0 ? _f : '',
|
|
22801
|
+
};
|
|
22802
|
+
});
|
|
22803
|
+
return materials;
|
|
22804
|
+
};
|
|
22805
|
+
var processCDMaterialsApprovalInfo = function (enableApproval, cdMaterialsResult) {
|
|
22806
|
+
if (!enableApproval) {
|
|
22807
|
+
return {
|
|
22808
|
+
approvalUsers: [],
|
|
22809
|
+
userApprovalConfig: null,
|
|
22810
|
+
requestedUserId: 0,
|
|
22811
|
+
};
|
|
22812
|
+
}
|
|
22813
|
+
return {
|
|
22814
|
+
approvalUsers: cdMaterialsResult.approvalUsers,
|
|
22815
|
+
userApprovalConfig: cdMaterialsResult.userApprovalConfig,
|
|
22816
|
+
requestedUserId: cdMaterialsResult.requestedUserId,
|
|
22817
|
+
};
|
|
22818
|
+
};
|
|
22819
|
+
var processCDMaterialsMetaInfo = function (cdMaterialsResult) {
|
|
22820
|
+
var _a, _b, _c, _d;
|
|
22821
|
+
if (!cdMaterialsResult) {
|
|
22822
|
+
return {
|
|
22823
|
+
tagsEditable: false,
|
|
22824
|
+
appReleaseTagNames: [],
|
|
22825
|
+
hideImageTaggingHardDelete: false,
|
|
22826
|
+
resourceFilters: [],
|
|
22827
|
+
totalCount: 0,
|
|
22828
|
+
canApproverDeploy: (_a = cdMaterialsResult.canApproverDeploy) !== null && _a !== void 0 ? _a : false,
|
|
22829
|
+
};
|
|
22830
|
+
}
|
|
22831
|
+
return {
|
|
22832
|
+
appReleaseTagNames: cdMaterialsResult.appReleaseTagNames,
|
|
22833
|
+
tagsEditable: cdMaterialsResult.tagsEditable,
|
|
22834
|
+
hideImageTaggingHardDelete: cdMaterialsResult.hideImageTaggingHardDelete,
|
|
22835
|
+
resourceFilters: (_b = cdMaterialsResult.resourceFilters) !== null && _b !== void 0 ? _b : [],
|
|
22836
|
+
totalCount: (_c = cdMaterialsResult.totalCount) !== null && _c !== void 0 ? _c : 0,
|
|
22837
|
+
canApproverDeploy: (_d = cdMaterialsResult.canApproverDeploy) !== null && _d !== void 0 ? _d : false,
|
|
22838
|
+
};
|
|
22839
|
+
};
|
|
22840
|
+
var processCDMaterialServiceResponse = function (cdMaterialsResult, stage, offset, filter) {
|
|
22841
|
+
if (!cdMaterialsResult) {
|
|
22842
|
+
return __assign(__assign({ materials: [] }, processCDMaterialsMetaInfo(cdMaterialsResult)), processCDMaterialsApprovalInfo(false, cdMaterialsResult));
|
|
22843
|
+
}
|
|
22844
|
+
var materials = cdMaterialListModal(cdMaterialsResult.ci_artifacts, offset !== null && offset !== void 0 ? offset : 0, cdMaterialsResult.latest_wf_artifact_id, cdMaterialsResult.latest_wf_artifact_status);
|
|
22845
|
+
var approvalInfo = processCDMaterialsApprovalInfo(stage === exports.DeploymentNodeType.CD || stage === exports.DeploymentNodeType.APPROVAL, cdMaterialsResult);
|
|
22846
|
+
var metaInfo = processCDMaterialsMetaInfo(cdMaterialsResult);
|
|
22847
|
+
// TODO: On update of service would remove from here
|
|
22848
|
+
var filteredMaterials = filter && filter === exports.CDMaterialFilterQuery.RESOURCE
|
|
22849
|
+
? materials.filter(function (material) {
|
|
22850
|
+
return material.filterState === exports.FilterStates.ALLOWED;
|
|
22851
|
+
})
|
|
22852
|
+
: materials;
|
|
22853
|
+
return __assign(__assign({ materials: filteredMaterials }, approvalInfo), metaInfo);
|
|
22854
|
+
};
|
|
22855
|
+
var getSanitizedQueryParams = function (queryParams) {
|
|
22856
|
+
queryParams.filter; var rest = __rest(queryParams, ["filter"]);
|
|
22857
|
+
return rest;
|
|
22858
|
+
};
|
|
22859
|
+
var genericCDMaterialsService = function (serviceType, cdMaterialID, stage, signal, queryParams) {
|
|
22860
|
+
if (queryParams === void 0) { queryParams = {}; }
|
|
22861
|
+
// TODO: On update of service would remove from here
|
|
22862
|
+
var manipulatedParams = getSanitizedQueryParams(queryParams);
|
|
22863
|
+
var URL;
|
|
22864
|
+
switch (serviceType) {
|
|
22865
|
+
case exports.CDMaterialServiceEnum.ROLLBACK:
|
|
22866
|
+
URL = processURL("".concat(ROUTES.CD_MATERIAL_GET, "/").concat(cdMaterialID, "/material/rollback"), manipulatedParams);
|
|
22867
|
+
break;
|
|
22868
|
+
// Meant for handling getCDMaterialList
|
|
22869
|
+
default:
|
|
22870
|
+
URL = processURL("".concat(ROUTES.CD_MATERIAL_GET, "/").concat(cdMaterialID, "/material"), __assign(__assign({}, manipulatedParams), { stage: stageMap[stage] }));
|
|
22871
|
+
break;
|
|
22872
|
+
}
|
|
22873
|
+
return get(URL, { signal: signal }).then(function (response) {
|
|
22874
|
+
return processCDMaterialServiceResponse(response.result, stage, queryParams.offset, queryParams.filter);
|
|
22763
22875
|
});
|
|
22764
22876
|
};
|
|
22765
22877
|
function extractImage(image) {
|
|
@@ -23126,7 +23238,9 @@ var SvgIcEnter = function SvgIcEnter(props) {
|
|
|
23126
23238
|
};
|
|
23127
23239
|
|
|
23128
23240
|
var ImageTagsContainer = function (_a) {
|
|
23129
|
-
var
|
|
23241
|
+
var
|
|
23242
|
+
// Setting it to zero in case of external pipeline
|
|
23243
|
+
ciPipelineId = _a.ciPipelineId, artifactId = _a.artifactId, imageComment = _a.imageComment, imageReleaseTags = _a.imageReleaseTags, updateCurrentAppMaterial = _a.updateCurrentAppMaterial, appReleaseTagNames = _a.appReleaseTagNames, setAppReleaseTagNames = _a.setAppReleaseTagNames, tagsEditable = _a.tagsEditable, setTagsEditable = _a.setTagsEditable, toggleCardMode = _a.toggleCardMode, hideHardDelete = _a.hideHardDelete, forceReInit = _a.forceReInit, isSuperAdmin = _a.isSuperAdmin;
|
|
23130
23244
|
var _b = __read(React.useState(imageReleaseTags ? imageReleaseTags : []), 2), initialTags = _b[0], setInitialTags = _b[1];
|
|
23131
23245
|
var _c = __read(React.useState(imageComment ? imageComment.comment : ''), 2), initialDescription = _c[0], setInitialDescription = _c[1];
|
|
23132
23246
|
var _d = __read(React.useState(appReleaseTagNames ? appReleaseTagNames : []), 2), existingTags = _d[0], setExistingTags = _d[1];
|
|
@@ -23140,6 +23254,7 @@ var ImageTagsContainer = function (_a) {
|
|
|
23140
23254
|
var _m = __read(React.useState([]), 2), hardDeleteTags = _m[0], setHardDeleteTags = _m[1];
|
|
23141
23255
|
var _o = __read(React.useState(''), 2), descriptionValidationMessage = _o[0], setDescriptionValidationMessage = _o[1];
|
|
23142
23256
|
var _p = __read(React.useState(''), 2), textInput = _p[0], setTextInput = _p[1];
|
|
23257
|
+
var _q = __read(React.useState(false), 2), loading = _q[0], setLoading = _q[1];
|
|
23143
23258
|
React.useEffect(function () {
|
|
23144
23259
|
reInitState();
|
|
23145
23260
|
}, [imageReleaseTags, imageComment, tagsEditable]);
|
|
@@ -23287,7 +23402,8 @@ var ImageTagsContainer = function (_a) {
|
|
|
23287
23402
|
hardDeleteTags: hardDeleteTags,
|
|
23288
23403
|
};
|
|
23289
23404
|
// set loading state true
|
|
23290
|
-
|
|
23405
|
+
setLoading(true);
|
|
23406
|
+
setImageTags(payload, ciPipelineId !== null && ciPipelineId !== void 0 ? ciPipelineId : 0, artifactId)
|
|
23291
23407
|
.then(function (res) {
|
|
23292
23408
|
var _a, _b, _c, _d, _e, _f, _g, _h, _j;
|
|
23293
23409
|
var tags = (_b = (_a = res.result) === null || _a === void 0 ? void 0 : _a.imageReleaseTags) === null || _b === void 0 ? void 0 : _b.map(function (tag) { return ({
|
|
@@ -23326,6 +23442,9 @@ var ImageTagsContainer = function (_a) {
|
|
|
23326
23442
|
else {
|
|
23327
23443
|
showError(err);
|
|
23328
23444
|
}
|
|
23445
|
+
})
|
|
23446
|
+
.finally(function () {
|
|
23447
|
+
setLoading(false);
|
|
23329
23448
|
});
|
|
23330
23449
|
return [2 /*return*/];
|
|
23331
23450
|
});
|
|
@@ -23376,10 +23495,10 @@ var ImageTagsContainer = function (_a) {
|
|
|
23376
23495
|
}, tagId: tag.id, softDeleteTags: softDeleteTags, isSuperAdmin: isSuperAdmin, duplicateTag: tag === null || tag === void 0 ? void 0 : tag.duplicateTag, hideHardDelete: hideHardDelete }, tag.id)); }) })), showTagsWarning && (jsxRuntime.jsxs("div", __assign({ className: "cn-7 mb-8 flex left" }, { children: [jsxRuntime.jsx(SvgIcInfoFilled, { className: "form__icon--info icon-dim-16 mr-2" }), "Tags cannot be edited/removed later"] }))), jsxRuntime.jsx("div", __assign({ className: "cn-7 mt-12" }, { children: "Comment" })), jsxRuntime.jsx("div", __assign({ className: "flex left flex-wrap dc__gap-8 w-100 mt-6 mb-12", "data-testid": "add-image-comment-text-area" }, { children: jsxRuntime.jsx("textarea", { value: newDescription, onChange: handleDescriptionChange, className: "flex left flex-wrap dc__gap-8 dc__description-textarea fs-13", style: { height: '90px !important' } }) })), descriptionValidationMessage !== '' && (jsxRuntime.jsxs("div", __assign({ className: "flex left" }, { children: [jsxRuntime.jsx(SvgIcWarning, { className: "form__icon form__icon--error" }), jsxRuntime.jsx("div", __assign({ className: "form__error" }, { children: descriptionValidationMessage }))] }))), jsxRuntime.jsxs("div", __assign({ className: "w-100 flex right mt-12" }, { children: [jsxRuntime.jsx("button", __assign({ className: "cta flex cancel h-32 lh-32-imp", type: "button", onClick: function (e) {
|
|
23377
23496
|
stopPropagation(e);
|
|
23378
23497
|
handleCancel();
|
|
23379
|
-
} }, { children: "Cancel" })), jsxRuntime.jsx("button", __assign({ className: "cta flex h-32 lh-32-imp ml-12", "data-testid": "save-tags-button", type: "button", onClick: function (e) {
|
|
23498
|
+
}, disabled: loading }, { children: "Cancel" })), jsxRuntime.jsx("button", __assign({ className: "cta flex h-32 lh-32-imp ml-12", "data-testid": "save-tags-button", type: "button", onClick: function (e) {
|
|
23380
23499
|
stopPropagation(e);
|
|
23381
23500
|
onClickSave();
|
|
23382
|
-
} }, { children:
|
|
23501
|
+
}, disabled: loading }, { children: loading ? jsxRuntime.jsx(Progressing, {}) : 'Save' }))] }))] }))) : (jsxRuntime.jsxs("div", __assign({ className: "top br-4 bcn-0 image-tags-container flexbox" }, { children: [jsxRuntime.jsx("div", __assign({ className: "flex left image-tag-left-border w-100 mt-8 mb-8 pr-10 pl-10", "data-testid": "image-tags-container-hover" }, { children: jsxRuntime.jsxs("div", __assign({ className: 'w-100' }, { children: [initialDescription && jsxRuntime.jsx("div", __assign({ className: "mb-6 fs-13 lh-20 dc__word-break-all" }, { children: initialDescription })), jsxRuntime.jsx("div", __assign({ className: "flex-wrap flex left" }, { children: initialTags === null || initialTags === void 0 ? void 0 : initialTags.map(function (tag, index) { return (jsxRuntime.jsx(ImageTagButton, { text: tag === null || tag === void 0 ? void 0 : tag.tagName, isSoftDeleted: tag === null || tag === void 0 ? void 0 : tag.deleted, isEditing: isEditing, onSoftDeleteClick: function (e) {
|
|
23383
23502
|
stopPropagation(e);
|
|
23384
23503
|
handleTagSoftDelete(index);
|
|
23385
23504
|
}, onHardDeleteClick: function (e) {
|
|
@@ -23683,9 +23802,9 @@ exports.closeOnEscKeyPressed = closeOnEscKeyPressed;
|
|
|
23683
23802
|
exports.copyToClipboard = copyToClipboard;
|
|
23684
23803
|
exports.createGitCommitUrl = createGitCommitUrl;
|
|
23685
23804
|
exports.extractImage = extractImage;
|
|
23805
|
+
exports.genericCDMaterialsService = genericCDMaterialsService;
|
|
23686
23806
|
exports.get = get;
|
|
23687
23807
|
exports.getAlphabetIcon = getAlphabetIcon;
|
|
23688
|
-
exports.getCDMaterials = getCDMaterials;
|
|
23689
23808
|
exports.getCookie = getCookie;
|
|
23690
23809
|
exports.getEmptyArrayOfLength = getEmptyArrayOfLength;
|
|
23691
23810
|
exports.getLoginInfo = getLoginInfo;
|
package/package.json
CHANGED
|
@@ -2,7 +2,19 @@ import moment from 'moment';
|
|
|
2
2
|
import {get, post} from './Api';
|
|
3
3
|
import { ROUTES } from './Constants'
|
|
4
4
|
import { sortCallback } from './Helper';
|
|
5
|
-
import {
|
|
5
|
+
import {
|
|
6
|
+
TeamList,
|
|
7
|
+
ResponseType,
|
|
8
|
+
DeploymentNodeType,
|
|
9
|
+
CDModalTab,
|
|
10
|
+
FilterStates,
|
|
11
|
+
CDMaterialServiceEnum,
|
|
12
|
+
CDMaterialServiceQueryParams,
|
|
13
|
+
CDMaterialResponseType,
|
|
14
|
+
CDMaterialsMetaInfo,
|
|
15
|
+
CDMaterialsApprovalInfo,
|
|
16
|
+
CDMaterialFilterQuery,
|
|
17
|
+
} from './Types'
|
|
6
18
|
|
|
7
19
|
export const getTeamListMin = (): Promise<TeamList> => {
|
|
8
20
|
// ignore active field
|
|
@@ -30,7 +42,7 @@ interface UserRole extends ResponseType {
|
|
|
30
42
|
}
|
|
31
43
|
}
|
|
32
44
|
|
|
33
|
-
|
|
45
|
+
const stageMap = {
|
|
34
46
|
PRECD: 'PRE',
|
|
35
47
|
CD: 'DEPLOY',
|
|
36
48
|
POSTCD: 'POST',
|
|
@@ -51,83 +63,218 @@ export function setImageTags(request, pipelineId: number, artifactId: number){
|
|
|
51
63
|
return post(`${ROUTES.IMAGE_TAGGING}/${pipelineId}/${artifactId}`,request )
|
|
52
64
|
}
|
|
53
65
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
if (!response.result) {
|
|
68
|
-
return {
|
|
69
|
-
materials: [],
|
|
66
|
+
const processURL = (url: string, params: object) => {
|
|
67
|
+
const validParams = Object.keys(params).filter((key) => {
|
|
68
|
+
return params[key] != null
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
if (!validParams.length) {
|
|
72
|
+
return url
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const queryString = validParams
|
|
76
|
+
.map((key) => {
|
|
77
|
+
if (Array.isArray(params[key])) {
|
|
78
|
+
return `${key}=${params[key].join(',')}`
|
|
70
79
|
}
|
|
80
|
+
return `${key}=${params[key]}`
|
|
81
|
+
})
|
|
82
|
+
.join('&')
|
|
83
|
+
|
|
84
|
+
return `${url}?${queryString}`
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
const cdMaterialListModal = (artifacts: any[], offset: number, artifactId?: number, artifactStatus?: string) => {
|
|
88
|
+
if (!artifacts || !artifacts.length) return []
|
|
89
|
+
|
|
90
|
+
const markFirstSelected = offset === 0
|
|
91
|
+
const startIndex = offset
|
|
92
|
+
let isImageMarked = false
|
|
93
|
+
|
|
94
|
+
const materials = artifacts.map((material, index) => {
|
|
95
|
+
let artifactStatusValue = ''
|
|
96
|
+
const filterState = material.filterState ?? FilterStates.ALLOWED
|
|
97
|
+
|
|
98
|
+
if (artifactId && artifactStatus && material.id === artifactId) {
|
|
99
|
+
artifactStatusValue = artifactStatus
|
|
71
100
|
}
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
101
|
+
|
|
102
|
+
const selectImage =
|
|
103
|
+
!isImageMarked && markFirstSelected && filterState === FilterStates.ALLOWED ? !material.vulnerable : false
|
|
104
|
+
if (selectImage) {
|
|
105
|
+
isImageMarked = true
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
return {
|
|
109
|
+
index: startIndex + index,
|
|
110
|
+
id: material.id,
|
|
111
|
+
deployedTime: material.deployed_time
|
|
112
|
+
? moment(material.deployed_time).format('ddd, DD MMM YYYY, hh:mm A')
|
|
113
|
+
: 'Not Deployed',
|
|
114
|
+
deployedBy: material.deployedBy,
|
|
115
|
+
wfrId: material.wfrId,
|
|
116
|
+
tab: CDModalTab.Changes,
|
|
117
|
+
image: extractImage(material.image),
|
|
118
|
+
showChanges: false,
|
|
119
|
+
vulnerabilities: [],
|
|
120
|
+
buildTime: material.build_time || '',
|
|
121
|
+
isSelected: selectImage,
|
|
122
|
+
showSourceInfo: false,
|
|
123
|
+
deployed: material.deployed || false,
|
|
124
|
+
latest: material.latest || false,
|
|
125
|
+
vulnerabilitiesLoading: true,
|
|
126
|
+
scanned: material.scanned,
|
|
127
|
+
scanEnabled: material.scanEnabled,
|
|
128
|
+
vulnerable: material.vulnerable,
|
|
129
|
+
runningOnParentCd: material.runningOnParentCd,
|
|
130
|
+
artifactStatus: artifactStatusValue,
|
|
131
|
+
userApprovalMetadata: material.userApprovalMetadata,
|
|
132
|
+
triggeredBy: material.triggeredBy,
|
|
133
|
+
isVirtualEnvironment: material.isVirtualEnvironment,
|
|
134
|
+
imageComment: material.imageComment,
|
|
135
|
+
imageReleaseTags: material.imageReleaseTags,
|
|
136
|
+
// It is going to be null but required in type so can't remove
|
|
137
|
+
lastExecution: material.lastExecution,
|
|
138
|
+
materialInfo: material.material_info
|
|
139
|
+
? material.material_info.map((mat) => {
|
|
140
|
+
return {
|
|
141
|
+
modifiedTime: mat.modifiedTime
|
|
142
|
+
? moment(mat.modifiedTime).format('ddd, DD MMM YYYY, hh:mm A')
|
|
143
|
+
: '',
|
|
144
|
+
commitLink: createGitCommitUrl(mat.url, mat.revision),
|
|
145
|
+
author: mat.author || '',
|
|
146
|
+
message: mat.message || '',
|
|
147
|
+
revision: mat.revision || '',
|
|
148
|
+
tag: mat.tag || '',
|
|
149
|
+
webhookData: mat.webhookData || '',
|
|
150
|
+
url: mat.url || '',
|
|
151
|
+
branch:
|
|
152
|
+
(material.ciConfigureSourceType === SourceTypeMap.WEBHOOK
|
|
153
|
+
? material.ciConfigureSourceValue
|
|
154
|
+
: mat.branch) || '',
|
|
155
|
+
type: material.ciConfigureSourceType || '',
|
|
156
|
+
}
|
|
157
|
+
})
|
|
158
|
+
: [],
|
|
159
|
+
filterState,
|
|
160
|
+
appliedFiltersTimestamp: material.appliedFiltersTimestamp ?? '',
|
|
161
|
+
appliedFilters: material.appliedFilters ?? [],
|
|
162
|
+
appliedFiltersState: material.appliedFiltersState ?? FilterStates.ALLOWED,
|
|
163
|
+
createdTime: material.createdTime ?? '',
|
|
164
|
+
dataSource: material.data_source ?? '',
|
|
165
|
+
}
|
|
166
|
+
})
|
|
167
|
+
return materials
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const processCDMaterialsApprovalInfo = (enableApproval: boolean, cdMaterialsResult): CDMaterialsApprovalInfo => {
|
|
171
|
+
if (!enableApproval) {
|
|
172
|
+
return {
|
|
173
|
+
approvalUsers: [],
|
|
174
|
+
userApprovalConfig: null,
|
|
175
|
+
requestedUserId: 0,
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
return {
|
|
180
|
+
approvalUsers: cdMaterialsResult.approvalUsers,
|
|
181
|
+
userApprovalConfig: cdMaterialsResult.userApprovalConfig,
|
|
182
|
+
requestedUserId: cdMaterialsResult.requestedUserId,
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
const processCDMaterialsMetaInfo = (cdMaterialsResult): CDMaterialsMetaInfo => {
|
|
187
|
+
if (!cdMaterialsResult) {
|
|
188
|
+
return {
|
|
189
|
+
tagsEditable: false,
|
|
190
|
+
appReleaseTagNames: [],
|
|
191
|
+
hideImageTaggingHardDelete: false,
|
|
192
|
+
resourceFilters: [],
|
|
193
|
+
totalCount: 0,
|
|
194
|
+
canApproverDeploy: cdMaterialsResult.canApproverDeploy ?? false,
|
|
130
195
|
}
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
return {
|
|
199
|
+
appReleaseTagNames: cdMaterialsResult.appReleaseTagNames,
|
|
200
|
+
tagsEditable: cdMaterialsResult.tagsEditable,
|
|
201
|
+
hideImageTaggingHardDelete: cdMaterialsResult.hideImageTaggingHardDelete,
|
|
202
|
+
resourceFilters: cdMaterialsResult.resourceFilters ?? [],
|
|
203
|
+
totalCount: cdMaterialsResult.totalCount ?? 0,
|
|
204
|
+
canApproverDeploy: cdMaterialsResult.canApproverDeploy ?? false,
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
const processCDMaterialServiceResponse = (
|
|
209
|
+
cdMaterialsResult,
|
|
210
|
+
stage: DeploymentNodeType,
|
|
211
|
+
offset: number,
|
|
212
|
+
filter: CDMaterialFilterQuery,
|
|
213
|
+
): CDMaterialResponseType => {
|
|
214
|
+
if (!cdMaterialsResult) {
|
|
215
|
+
return {
|
|
216
|
+
materials: [],
|
|
217
|
+
...processCDMaterialsMetaInfo(cdMaterialsResult),
|
|
218
|
+
...processCDMaterialsApprovalInfo(false, cdMaterialsResult),
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
const materials = cdMaterialListModal(
|
|
223
|
+
cdMaterialsResult.ci_artifacts,
|
|
224
|
+
offset ?? 0,
|
|
225
|
+
cdMaterialsResult.latest_wf_artifact_id,
|
|
226
|
+
cdMaterialsResult.latest_wf_artifact_status,
|
|
227
|
+
)
|
|
228
|
+
const approvalInfo = processCDMaterialsApprovalInfo(
|
|
229
|
+
stage === DeploymentNodeType.CD || stage === DeploymentNodeType.APPROVAL,
|
|
230
|
+
cdMaterialsResult,
|
|
231
|
+
)
|
|
232
|
+
const metaInfo = processCDMaterialsMetaInfo(cdMaterialsResult)
|
|
233
|
+
|
|
234
|
+
// TODO: On update of service would remove from here
|
|
235
|
+
const filteredMaterials =
|
|
236
|
+
filter && filter === CDMaterialFilterQuery.RESOURCE
|
|
237
|
+
? materials.filter((material) => {
|
|
238
|
+
return material.filterState === FilterStates.ALLOWED
|
|
239
|
+
})
|
|
240
|
+
: materials
|
|
241
|
+
|
|
242
|
+
return {
|
|
243
|
+
materials: filteredMaterials,
|
|
244
|
+
...approvalInfo,
|
|
245
|
+
...metaInfo,
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
const getSanitizedQueryParams = (queryParams: CDMaterialServiceQueryParams): CDMaterialServiceQueryParams => {
|
|
250
|
+
const { filter, ...rest } = queryParams
|
|
251
|
+
return rest
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export const genericCDMaterialsService = (
|
|
255
|
+
serviceType: CDMaterialServiceEnum,
|
|
256
|
+
cdMaterialID: number,
|
|
257
|
+
stage: DeploymentNodeType,
|
|
258
|
+
signal: AbortSignal,
|
|
259
|
+
queryParams: CDMaterialServiceQueryParams = {},
|
|
260
|
+
): Promise<CDMaterialResponseType> => {
|
|
261
|
+
// TODO: On update of service would remove from here
|
|
262
|
+
const manipulatedParams = getSanitizedQueryParams(queryParams)
|
|
263
|
+
|
|
264
|
+
let URL
|
|
265
|
+
switch (serviceType) {
|
|
266
|
+
case CDMaterialServiceEnum.ROLLBACK:
|
|
267
|
+
URL = processURL(`${ROUTES.CD_MATERIAL_GET}/${cdMaterialID}/material/rollback`, manipulatedParams)
|
|
268
|
+
break
|
|
269
|
+
|
|
270
|
+
// Meant for handling getCDMaterialList
|
|
271
|
+
default:
|
|
272
|
+
URL = processURL(`${ROUTES.CD_MATERIAL_GET}/${cdMaterialID}/material`, { ...manipulatedParams, stage: stageMap[stage] })
|
|
273
|
+
break
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
return get(URL, { signal }).then((response) => {
|
|
277
|
+
return processCDMaterialServiceResponse(response.result, stage, queryParams.offset, queryParams.filter)
|
|
131
278
|
})
|
|
132
279
|
}
|
|
133
280
|
|
package/src/Common/Constants.ts
CHANGED
package/src/Common/ImageTags.tsx
CHANGED
|
@@ -18,8 +18,10 @@ import { showError, stopPropagation } from './Helper'
|
|
|
18
18
|
import { TippyCustomized } from './TippyCustomized'
|
|
19
19
|
import { setImageTags } from './Common.service'
|
|
20
20
|
import Tippy from '@tippyjs/react'
|
|
21
|
+
import { Progressing } from './Progressing'
|
|
21
22
|
|
|
22
23
|
export const ImageTagsContainer = ({
|
|
24
|
+
// Setting it to zero in case of external pipeline
|
|
23
25
|
ciPipelineId,
|
|
24
26
|
artifactId,
|
|
25
27
|
imageComment,
|
|
@@ -47,6 +49,7 @@ export const ImageTagsContainer = ({
|
|
|
47
49
|
const [hardDeleteTags, setHardDeleteTags] = useState<ReleaseTag[]>([])
|
|
48
50
|
const [descriptionValidationMessage, setDescriptionValidationMessage] = useState<string>('')
|
|
49
51
|
const [textInput, setTextInput] = useState<string>('')
|
|
52
|
+
const [loading, setLoading] = useState<boolean>(false)
|
|
50
53
|
|
|
51
54
|
|
|
52
55
|
useEffect(() => {
|
|
@@ -213,7 +216,8 @@ export const ImageTagsContainer = ({
|
|
|
213
216
|
}
|
|
214
217
|
|
|
215
218
|
// set loading state true
|
|
216
|
-
|
|
219
|
+
setLoading(true)
|
|
220
|
+
setImageTags(payload, ciPipelineId ?? 0, artifactId)
|
|
217
221
|
.then((res) => {
|
|
218
222
|
const tags = res.result?.imageReleaseTags?.map((tag) => ({
|
|
219
223
|
id: tag.id,
|
|
@@ -249,6 +253,9 @@ export const ImageTagsContainer = ({
|
|
|
249
253
|
showError(err)
|
|
250
254
|
}
|
|
251
255
|
})
|
|
256
|
+
.finally(()=>{
|
|
257
|
+
setLoading(false)
|
|
258
|
+
})
|
|
252
259
|
}
|
|
253
260
|
|
|
254
261
|
const renderInfoCard = (): JSX.Element => {
|
|
@@ -425,6 +432,7 @@ export const ImageTagsContainer = ({
|
|
|
425
432
|
stopPropagation(e)
|
|
426
433
|
handleCancel()
|
|
427
434
|
}}
|
|
435
|
+
disabled={loading}
|
|
428
436
|
>
|
|
429
437
|
Cancel
|
|
430
438
|
</button>
|
|
@@ -436,8 +444,9 @@ export const ImageTagsContainer = ({
|
|
|
436
444
|
stopPropagation(e)
|
|
437
445
|
onClickSave()
|
|
438
446
|
}}
|
|
447
|
+
disabled={loading}
|
|
439
448
|
>
|
|
440
|
-
Save
|
|
449
|
+
{loading ? <Progressing /> : 'Save'}
|
|
441
450
|
</button>
|
|
442
451
|
</div>
|
|
443
452
|
</div>
|
package/src/Common/Types.ts
CHANGED
|
@@ -226,6 +226,10 @@ export enum FilterStates {
|
|
|
226
226
|
ERROR = 2,
|
|
227
227
|
}
|
|
228
228
|
|
|
229
|
+
export enum MaterialDataSource {
|
|
230
|
+
EXTERNAL = "ext"
|
|
231
|
+
}
|
|
232
|
+
|
|
229
233
|
export interface CDMaterialType {
|
|
230
234
|
index: number
|
|
231
235
|
id: string
|
|
@@ -252,9 +256,36 @@ export interface CDMaterialType {
|
|
|
252
256
|
imageReleaseTags?: ReleaseTag[]
|
|
253
257
|
artifactStatus?: string
|
|
254
258
|
filterState: FilterStates
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
259
|
+
// Not even coming from API but required in CDMaterials for Security which makes its own api call but stores data in CDMaterials
|
|
260
|
+
scanToolId?: number
|
|
261
|
+
appliedFiltersTimestamp?: string
|
|
262
|
+
appliedFilters?: FilterConditionsListType[]
|
|
263
|
+
appliedFiltersState?: FilterStates
|
|
264
|
+
createdTime?: string
|
|
265
|
+
deployed?: boolean
|
|
266
|
+
dataSource?: MaterialDataSource
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
export enum CDMaterialServiceEnum {
|
|
270
|
+
ROLLBACK = 'rollback',
|
|
271
|
+
CD_MATERIALS = 'cd-materials',
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export enum CDMaterialResourceQuery {
|
|
275
|
+
PENDING_APPROVAL = 'PENDING_APPROVAL'
|
|
276
|
+
}
|
|
277
|
+
|
|
278
|
+
export enum CDMaterialFilterQuery {
|
|
279
|
+
RESOURCE = 'ELIGIBLE_RESOURCES',
|
|
280
|
+
ALL = 'ALL_RESOURCES'
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
export interface CDMaterialServiceQueryParams {
|
|
284
|
+
search?: string
|
|
285
|
+
offset?: number
|
|
286
|
+
size?: number
|
|
287
|
+
resource?: CDMaterialResourceQuery
|
|
288
|
+
filter?: CDMaterialFilterQuery
|
|
258
289
|
}
|
|
259
290
|
|
|
260
291
|
export interface CommonNodeAttr {
|
|
@@ -370,15 +401,23 @@ export interface FilterConditionsListType {
|
|
|
370
401
|
conditions: FilterConditionsInfo[]
|
|
371
402
|
}
|
|
372
403
|
|
|
373
|
-
export interface
|
|
404
|
+
export interface CDMaterialsApprovalInfo {
|
|
374
405
|
approvalUsers: string[]
|
|
375
|
-
materials: any[]
|
|
376
406
|
userApprovalConfig: UserApprovalConfigType
|
|
377
407
|
requestedUserId: number
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
export interface CDMaterialsMetaInfo {
|
|
378
411
|
tagsEditable: boolean
|
|
379
412
|
appReleaseTagNames: string[]
|
|
380
413
|
hideImageTaggingHardDelete: boolean
|
|
381
414
|
resourceFilters?: FilterConditionsListType[]
|
|
415
|
+
totalCount: number
|
|
416
|
+
canApproverDeploy: boolean
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
export interface CDMaterialResponseType extends CDMaterialsMetaInfo, CDMaterialsApprovalInfo {
|
|
420
|
+
materials: CDMaterialType[]
|
|
382
421
|
}
|
|
383
422
|
|
|
384
423
|
export interface InputDetailType {
|