@devtron-labs/devtron-fe-common-lib 0.0.48-beta-11 → 0.0.49

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.
Files changed (127) hide show
  1. package/.eslintrc.js +16 -84
  2. package/.github/workflows/release-package.yml +3 -2
  3. package/dist/Common/BreadCrumb/BreadCrumb.d.ts +1 -1
  4. package/dist/Common/BreadCrumb/BreadcrumbStore.d.ts +2 -2
  5. package/dist/Common/Constants.d.ts +2 -2
  6. package/dist/Common/CustomInput/CustomInput.d.ts +1 -1
  7. package/dist/Common/CustomInput/Types.d.ts +1 -2
  8. package/dist/Common/CustomTagSelector/ResizableTagTextArea.d.ts +1 -1
  9. package/dist/Common/DeleteComponentModal/DeleteComponent.d.ts +1 -1
  10. package/dist/Common/DevtronProgressing/DevtronProgressing.d.ts +1 -1
  11. package/dist/Common/Dialogs/ConfirmationDialog.d.ts +6 -6
  12. package/dist/Common/Dialogs/DeleteDialog.d.ts +1 -1
  13. package/dist/Common/Dialogs/ForceDeleteDialog.d.ts +1 -1
  14. package/dist/Common/Dialogs/Types.d.ts +1 -1
  15. package/dist/Common/EmptyState/EmptyState.d.ts +17 -20
  16. package/dist/Common/EmptyState/GenericEmptyState.d.ts +1 -1
  17. package/dist/Common/Error.d.ts +1 -2
  18. package/dist/Common/ErrorScreenNotFound.d.ts +1 -1
  19. package/dist/Common/Helper.d.ts +1 -1
  20. package/dist/Common/ImageTags.d.ts +1 -1
  21. package/dist/Common/InfoColorBar/InfoColourbar.d.ts +1 -1
  22. package/dist/Common/Modals/Modal.d.ts +2 -2
  23. package/dist/Common/Modals/OpaqueModal.d.ts +3 -3
  24. package/dist/Common/Modals/VisibleModal.d.ts +3 -3
  25. package/dist/Common/Modals/VisibleModal2.d.ts +3 -3
  26. package/dist/Common/MultiSelectCustomization.d.ts +1 -1
  27. package/dist/Common/Policy.Types.d.ts +2 -2
  28. package/dist/Common/PopupMenu.d.ts +5 -5
  29. package/dist/Common/Progressing.d.ts +2 -2
  30. package/dist/Common/RadioGroup/RadioGroup.d.ts +1 -1
  31. package/dist/Common/ResizableTextarea.d.ts +1 -1
  32. package/dist/Common/TippyCustomized.d.ts +1 -1
  33. package/dist/Common/ToastBody.d.ts +5 -5
  34. package/dist/index.d.ts +1 -1
  35. package/dist/index.js +338 -266
  36. package/package.json +2 -19
  37. package/src/Common/AddCDButton/AddCDButton.tsx +2 -1
  38. package/src/Common/Api.ts +29 -22
  39. package/src/Common/AppStatus/AppStatus.tsx +12 -12
  40. package/src/Common/AppStatus/utils.ts +5 -6
  41. package/src/Common/BreadCrumb/BreadCrumb.tsx +28 -32
  42. package/src/Common/BreadCrumb/BreadcrumbStore.tsx +2 -2
  43. package/src/Common/BreadCrumb/Types.ts +12 -11
  44. package/src/Common/Checkbox.tsx +19 -17
  45. package/src/Common/ClipboardButton/ClipboardButton.tsx +1 -1
  46. package/src/Common/ClipboardButton/__tests__/ClipboardButton.test.tsx +1 -0
  47. package/src/Common/Common.service.ts +64 -59
  48. package/src/Common/Constants.ts +11 -11
  49. package/src/Common/CustomInput/CustomInput.tsx +28 -22
  50. package/src/Common/CustomInput/Types.ts +3 -4
  51. package/src/Common/CustomInput/index.ts +1 -1
  52. package/src/Common/CustomTagSelector/PropagateTagInfo.tsx +18 -15
  53. package/src/Common/CustomTagSelector/ResizableTagTextArea.tsx +9 -9
  54. package/src/Common/CustomTagSelector/TagDetails.tsx +3 -9
  55. package/src/Common/CustomTagSelector/TagLabelSelect.tsx +9 -7
  56. package/src/Common/CustomTagSelector/TagLabelValueSelector.tsx +35 -31
  57. package/src/Common/CustomTagSelector/TagSelector.utils.ts +3 -2
  58. package/src/Common/CustomTagSelector/Types.ts +1 -1
  59. package/src/Common/CustomTagSelector/ValidationRules.ts +22 -18
  60. package/src/Common/CustomTagSelector/index.ts +2 -2
  61. package/src/Common/DebouncedSearch/DebouncedSearch.tsx +1 -2
  62. package/src/Common/DebouncedSearch/__tests__/DebouncedSearch.test.tsx +1 -0
  63. package/src/Common/DeleteComponentModal/DeleteComponent.tsx +32 -27
  64. package/src/Common/DeleteComponentModal/types.ts +1 -1
  65. package/src/Common/DevtronProgressing/DevtronProgressing.tsx +8 -5
  66. package/src/Common/Dialogs/ConfirmationDialog.tsx +24 -24
  67. package/src/Common/Dialogs/DeleteDialog.tsx +5 -3
  68. package/src/Common/Dialogs/DialogForm.tsx +35 -31
  69. package/src/Common/Dialogs/ForceDeleteDialog.tsx +7 -13
  70. package/src/Common/Dialogs/Types.ts +12 -12
  71. package/src/Common/Dialogs/index.ts +1 -1
  72. package/src/Common/Drawer/Drawer.tsx +1 -1
  73. package/src/Common/EmptyState/EmptyState.tsx +17 -13
  74. package/src/Common/EmptyState/GenericEmptyState.tsx +15 -25
  75. package/src/Common/Error.tsx +5 -5
  76. package/src/Common/ErrorScreenNotFound.tsx +12 -9
  77. package/src/Common/Grid/Grid.tsx +2 -1
  78. package/src/Common/Helper.tsx +24 -23
  79. package/src/Common/Hooks/UseClickOutside/UseClickOutside.tsx +1 -1
  80. package/src/Common/Hooks/UseSuperAdmin/UseSuperAdmin.tsx +1 -1
  81. package/src/Common/ImageTags.Types.ts +3 -2
  82. package/src/Common/ImageTags.tsx +66 -61
  83. package/src/Common/InfoColorBar/InfoColourbar.tsx +5 -10
  84. package/src/Common/Modals/Modal.tsx +3 -3
  85. package/src/Common/Modals/OpaqueModal.tsx +18 -25
  86. package/src/Common/Modals/VisibleModal.tsx +3 -7
  87. package/src/Common/Modals/VisibleModal2.tsx +15 -20
  88. package/src/Common/MultiSelectCustomization.tsx +13 -9
  89. package/src/Common/Policy.Types.ts +38 -38
  90. package/src/Common/PopupMenu.tsx +9 -10
  91. package/src/Common/Progressing.tsx +18 -15
  92. package/src/Common/RJSF/Form.tsx +1 -0
  93. package/src/Common/RJSF/common/FieldRow.tsx +1 -0
  94. package/src/Common/RJSF/config.ts +1 -0
  95. package/src/Common/RJSF/templates/ArrayFieldItemTemplate.tsx +1 -1
  96. package/src/Common/RJSF/templates/ArrayFieldTemplate.tsx +1 -0
  97. package/src/Common/RJSF/templates/BaseInput.tsx +1 -0
  98. package/src/Common/RJSF/templates/ButtonTemplates/AddButton.tsx +1 -0
  99. package/src/Common/RJSF/templates/ButtonTemplates/RemoveButton.tsx +1 -0
  100. package/src/Common/RJSF/templates/ButtonTemplates/SubmitButton.tsx +6 -1
  101. package/src/Common/RJSF/templates/Description.tsx +1 -0
  102. package/src/Common/RJSF/templates/Field.tsx +3 -14
  103. package/src/Common/RJSF/templates/FieldErrorTemplate.tsx +9 -6
  104. package/src/Common/RJSF/templates/ObjectFieldTemplate.tsx +7 -5
  105. package/src/Common/RJSF/templates/TitleField.tsx +1 -0
  106. package/src/Common/RJSF/templates/WrapIfAdditionalTemplate.tsx +1 -0
  107. package/src/Common/RJSF/utils.ts +57 -53
  108. package/src/Common/RJSF/widgets/Checkbox.tsx +2 -2
  109. package/src/Common/RJSF/widgets/Select.tsx +1 -0
  110. package/src/Common/RadioGroup/RadioGroup.tsx +23 -18
  111. package/src/Common/RadioGroup.tsx +23 -24
  112. package/src/Common/Reload.tsx +1 -0
  113. package/src/Common/ResizableTextarea.tsx +17 -18
  114. package/src/Common/Security/ScanVulnerabilitiesTable.tsx +34 -29
  115. package/src/Common/ServerError.ts +1 -5
  116. package/src/Common/TippyCustomized.tsx +38 -41
  117. package/src/Common/ToastBody.tsx +7 -6
  118. package/src/Common/Toggle/Toggle.tsx +3 -3
  119. package/src/Common/Types.ts +12 -12
  120. package/src/custom.d.ts +7 -7
  121. package/src/index.ts +1 -1
  122. package/.eslintignore +0 -75
  123. package/.github/pull_request_template.md +0 -25
  124. package/.github/workflows/ci.yml +0 -31
  125. package/.husky/pre-commit +0 -5
  126. package/.lintstagedrc +0 -3
  127. package/.nvmrc +0 -1
package/package.json CHANGED
@@ -1,16 +1,12 @@
1
1
  {
2
2
  "name": "@devtron-labs/devtron-fe-common-lib",
3
- "version": "0.0.48-beta-11",
3
+ "version": "0.0.49",
4
4
  "description": "Supporting common component library",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
7
- "prepare": "node -e \"try { require('husky').install() } catch (e) {}\"",
8
- "lint": "tsc --noEmit && eslint 'src/**/*.{js,jsx,ts,tsx}' --max-warnings 0",
9
- "lint-fix": "eslint 'src/**/*.{js,jsx,ts,tsx}' --fix",
10
7
  "test": "exit 0",
11
8
  "build-lib": "rollup -c --bundleConfigAsCjs",
12
- "build-watch": "rollup -c --bundleConfigAsCjs -w",
13
- "lint-staged": "lint-staged"
9
+ "build-watch": "rollup -c --bundleConfigAsCjs -w"
14
10
  },
15
11
  "repository": {
16
12
  "type": "git",
@@ -34,20 +30,7 @@
34
30
  "@types/react": "17.0.39",
35
31
  "@types/react-dom": "17.0.13",
36
32
  "@types/react-router-dom": "^5.3.3",
37
- "@typescript-eslint/eslint-plugin": "^6.17.0",
38
- "@typescript-eslint/parser": "^6.17.0",
39
- "eslint": "^8.56.0",
40
- "eslint-config-airbnb": "^19.0.4",
41
- "eslint-config-prettier": "^9.1.0",
42
- "eslint-plugin-import": "^2.29.1",
43
- "eslint-plugin-jsx-a11y": "^6.8.0",
44
- "eslint-plugin-prettier": "^5.1.2",
45
- "eslint-plugin-react": "^7.33.2",
46
- "eslint-plugin-react-hooks": "^4.6.0",
47
- "husky": "^7.0.4",
48
- "lint-staged": "^12.5.0",
49
33
  "moment": "^2.29.4",
50
- "prettier": "^3.1.1",
51
34
  "react-select": "5.2.2",
52
35
  "react-toastify": "^8.2.0",
53
36
  "rollup": "^3.10.0",
@@ -1,8 +1,9 @@
1
+ import React from 'react'
1
2
  import Tippy from '@tippyjs/react'
2
3
  import { AddCDButtonProps, TooltipContentProps } from './types'
3
4
  import { AddCDPositions } from '../Types'
4
5
 
5
- const TooltipContent = ({ tooltipContent }: TooltipContentProps) => {
6
+ function TooltipContent({ tooltipContent }: TooltipContentProps) {
6
7
  if (tooltipContent) {
7
8
  return (
8
9
  <div className="dc__white-space-pre-wrap">
package/src/Common/Api.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ServerErrors } from './ServerError'
2
- import { RequestTimeout, Host, URLS } from './Constants'
2
+ import { FALLBACK_REQUEST_TIMEOUT, Host, URLS } from './Constants'
3
3
  import { ResponseType, APIOptions } from './Types'
4
4
 
5
5
  const responseMessages = {
@@ -79,12 +79,12 @@ function handleLogout() {
79
79
  }
80
80
 
81
81
  async function handleServerError(contentType, response) {
82
- // Test for HTTP Status Code
83
- const code: number = response.status
82
+ //Test for HTTP Status Code
83
+ let code: number = response.status
84
84
  let status: string = response.statusText || responseMessages[code]
85
- const serverError = new ServerErrors({ code, errors: [] })
85
+ let serverError = new ServerErrors({ code, errors: [] })
86
86
  if (contentType !== 'application/json') {
87
- // used for better debugging,
87
+ //used for better debugging,
88
88
  status = `${responseMessages[code]}. Please try again.`
89
89
  } else {
90
90
  const responseBody = await response.json()
@@ -105,12 +105,12 @@ async function fetchAPI(
105
105
  preventAutoLogout = false,
106
106
  isMultipartRequest?: boolean,
107
107
  ): Promise<ResponseType> {
108
- const options = {
108
+ let options = {
109
109
  method: type,
110
110
  signal,
111
111
  body: data ? JSON.stringify(data) : undefined,
112
- credentials: 'include' as RequestCredentials,
113
112
  }
113
+ options['credentials'] = 'include' as RequestCredentials
114
114
  return fetch(
115
115
  `${Host}/${url}`,
116
116
  !isMultipartRequest
@@ -121,7 +121,7 @@ async function fetchAPI(
121
121
  } as RequestInit),
122
122
  ).then(
123
123
  async (response) => {
124
- const contentType = response.headers.get('Content-Type')
124
+ let contentType = response.headers.get('Content-Type')
125
125
  if (response.status === 401) {
126
126
  if (preventAutoLogout) {
127
127
  throw new ServerErrors({
@@ -140,23 +140,22 @@ async function fetchAPI(
140
140
  if (contentType === 'application/json') {
141
141
  return response.json().then((responseBody) => {
142
142
  if (responseBody.code >= 300 && responseBody.code <= 599) {
143
- // Test Code in Response Body, despite successful HTTP Response Code
143
+ //Test Code in Response Body, despite successful HTTP Response Code
144
144
  throw new ServerErrors({ code: responseBody.code, errors: responseBody.errors })
145
145
  } else {
146
- // Successfull Response. Expected Response Type {code, result, status}
146
+ //Successfull Response. Expected Response Type {code, result, status}
147
147
  return responseBody
148
148
  }
149
149
  })
150
- }
151
- if (contentType === 'octet-stream' || contentType === 'application/octet-stream') {
152
- // used in getArtifact() API only
150
+ } else if (contentType === 'octet-stream' || contentType === 'application/octet-stream') {
151
+ //used in getArtifact() API only
153
152
  return response
154
153
  }
155
154
  }
156
155
  },
157
156
  (error) => {
158
- // Network call fails. Handle Failed to Fetch
159
- const err = {
157
+ //Network call fails. Handle Failed to Fetch
158
+ let err = {
160
159
  code: 0,
161
160
  userMessage: error.message,
162
161
  internalMessage: error.message,
@@ -177,7 +176,9 @@ function fetchInTime(
177
176
  const controller = new AbortController()
178
177
  const { signal } = controller
179
178
  const timeoutPromise: Promise<ResponseType> = new Promise((resolve, reject) => {
180
- const timeout = options?.timeout ? options.timeout : RequestTimeout
179
+ const requestTimeout = (window as any)?._env_?.GLOBAL_API_TIMEOUT ?? FALLBACK_REQUEST_TIMEOUT
180
+ const timeout = options?.timeout ? options.timeout : requestTimeout
181
+
181
182
  setTimeout(() => {
182
183
  controller.abort()
183
184
  reject({
@@ -212,12 +213,18 @@ export const post = (
212
213
  data: object,
213
214
  options?: APIOptions,
214
215
  isMultipartRequest?: boolean,
215
- ): Promise<ResponseType> => fetchInTime(url, 'POST', data, options, isMultipartRequest)
216
+ ): Promise<ResponseType> => {
217
+ return fetchInTime(url, 'POST', data, options, isMultipartRequest)
218
+ }
216
219
 
217
- export const put = (url: string, data: object, options?: APIOptions): Promise<ResponseType> =>
218
- fetchInTime(url, 'PUT', data, options)
220
+ export const put = (url: string, data: object, options?: APIOptions): Promise<ResponseType> => {
221
+ return fetchInTime(url, 'PUT', data, options)
222
+ }
219
223
 
220
- export const get = (url: string, options?: APIOptions): Promise<ResponseType> => fetchInTime(url, 'GET', null, options)
224
+ export const get = (url: string, options?: APIOptions): Promise<ResponseType> => {
225
+ return fetchInTime(url, 'GET', null, options)
226
+ }
221
227
 
222
- export const trash = (url: string, data?: object, options?: APIOptions): Promise<ResponseType> =>
223
- fetchInTime(url, 'DELETE', data, options)
228
+ export const trash = (url: string, data?: object, options?: APIOptions): Promise<ResponseType> => {
229
+ return fetchInTime(url, 'DELETE', data, options)
230
+ }
@@ -25,24 +25,24 @@ export default function AppStatus({
25
25
  const renderIcon = () => {
26
26
  if (iconClass) {
27
27
  return <span className={`dc__app-summary__icon icon-dim-16 ${iconClass} ${iconClass}--node`} />
28
- }
29
- if (isVirtualEnv) {
28
+ } else if (isVirtualEnv) {
30
29
  return (
31
30
  <span
32
31
  className={`dc__app-summary__icon icon-dim-16 ${StatusConstants.NOT_DEPLOYED.lowerCase} ${StatusConstants.NOT_DEPLOYED.lowerCase}--node`}
33
32
  />
34
33
  )
34
+ } else {
35
+ return (
36
+ <Tippy
37
+ className="default-tt w-200"
38
+ arrow={false}
39
+ placement="top"
40
+ content="To fetch app status for GitOps based deployments open the app detail page"
41
+ >
42
+ <InfoIcon className="icon-dim-16 fcn-6" />
43
+ </Tippy>
44
+ )
35
45
  }
36
- return (
37
- <Tippy
38
- className="default-tt w-200"
39
- arrow={false}
40
- placement="top"
41
- content="To fetch app status for GitOps based deployments open the app detail page"
42
- >
43
- <InfoIcon className="icon-dim-16 fcn-6" />
44
- </Tippy>
45
- )
46
46
  }
47
47
 
48
48
  return hideStatusMessage ? (
@@ -1,15 +1,14 @@
1
1
  import { TIMELINE_STATUS } from './constants'
2
2
 
3
3
  export const triggerStatus = (triggerDetailStatus: string): string => {
4
- const triggerStatus = triggerDetailStatus?.toUpperCase()
4
+ let triggerStatus = triggerDetailStatus?.toUpperCase()
5
5
  if (triggerStatus === TIMELINE_STATUS.ABORTED || triggerStatus === TIMELINE_STATUS.DEGRADED) {
6
6
  return 'Failed'
7
- }
8
- if (triggerStatus === TIMELINE_STATUS.HEALTHY) {
7
+ } else if (triggerStatus === TIMELINE_STATUS.HEALTHY) {
9
8
  return 'Succeeded'
10
- }
11
- if (triggerStatus === TIMELINE_STATUS.INPROGRESS) {
9
+ } else if (triggerStatus === TIMELINE_STATUS.INPROGRESS) {
12
10
  return 'Inprogress'
11
+ } else {
12
+ return triggerDetailStatus
13
13
  }
14
- return triggerDetailStatus
15
14
  }
@@ -1,14 +1,12 @@
1
- import { useMemo, useEffect } from 'react'
2
- import * as React from 'react'
1
+ import React, { useMemo, useEffect } from 'react'
3
2
  import { Link, useRouteMatch, useParams } from 'react-router-dom'
4
3
  import { useBreadcrumbContext } from './BreadcrumbStore'
5
4
  import { ConditionalWrap } from '../Helper'
6
5
  import { Breadcrumb, Breadcrumbs, UseBreadcrumbOptionalProps, UseBreadcrumbState } from './Types'
7
-
8
6
  export const BreadcrumbContext = React.createContext(null)
9
7
 
10
8
  export function useBreadcrumb(props?: UseBreadcrumbOptionalProps, deps?: any[]): UseBreadcrumbState {
11
- const sep = props?.sep || '/'
9
+ let sep = props?.sep || '/'
12
10
  deps = deps || []
13
11
  const { url, path } = useRouteMatch()
14
12
  const params = useParams()
@@ -32,7 +30,7 @@ export function useBreadcrumb(props?: UseBreadcrumbOptionalProps, deps?: any[]):
32
30
  setState((state) => ({ ...state, alias: tempAlias }))
33
31
  }
34
32
 
35
- const levels: Breadcrumb[] = useMemo(() => {
33
+ let levels: Breadcrumb[] = useMemo(() => {
36
34
  const paths = path.split('/').filter(Boolean)
37
35
  const urls = url.split('/').filter(Boolean)
38
36
  return paths.map((path, idx) => {
@@ -43,31 +41,29 @@ export function useBreadcrumb(props?: UseBreadcrumbOptionalProps, deps?: any[]):
43
41
  return crumb
44
42
  })
45
43
  }, [path, url])
46
- const { res: breadcrumbs } = useMemo(
47
- () =>
48
- levels.reduce(
49
- (agg, curr, idx) => {
50
- const { res, prefix } = agg
51
- const { to, name } = curr
52
- res.push({
53
- to:
54
- !state.alias[name]?.component || (state.alias[name]?.component && state.alias[name]?.linked)
55
- ? `${prefix}${to}`
56
- : null,
57
- name:
58
- typeof state.alias[name] === 'object'
59
- ? state.alias[name]?.component
60
- ? state.alias[name].component
61
- : null
62
- : state.alias[name] || name,
63
- className: curr.className || '',
64
- })
65
- return { res, prefix: `${prefix}${curr.to}${sep}` }
66
- },
67
- { res: [], prefix: '/' },
68
- ),
69
- [levels, state],
70
- )
44
+ const { res: breadcrumbs } = useMemo(() => {
45
+ return levels.reduce(
46
+ (agg, curr, idx) => {
47
+ const { res, prefix } = agg
48
+ const { to, name } = curr
49
+ res.push({
50
+ to:
51
+ !state.alias[name]?.component || (state.alias[name]?.component && state.alias[name]?.linked)
52
+ ? `${prefix}${to}`
53
+ : null,
54
+ name:
55
+ typeof state.alias[name] === 'object'
56
+ ? !!state.alias[name]?.component
57
+ ? state.alias[name].component
58
+ : null
59
+ : state.alias[name] || name,
60
+ className: curr.className || '',
61
+ })
62
+ return { res, prefix: `${prefix}${curr.to}${sep}` }
63
+ },
64
+ { res: [], prefix: '/' },
65
+ )
66
+ }, [levels, state])
71
67
 
72
68
  return { breadcrumbs, setCrumb, resetCrumb }
73
69
  }
@@ -80,7 +76,7 @@ export const BreadCrumb: React.FC<Breadcrumbs> = ({
80
76
  const { url } = useRouteMatch()
81
77
  const filteredCrumbs = breadcrumbs.filter((crumb) => !!crumb.name)
82
78
  return (
83
- <>
79
+ <React.Fragment>
84
80
  {filteredCrumbs.map((breadcrumb, idx) => (
85
81
  <React.Fragment key={idx}>
86
82
  <ConditionalWrap
@@ -104,6 +100,6 @@ export const BreadCrumb: React.FC<Breadcrumbs> = ({
104
100
  )}
105
101
  </React.Fragment>
106
102
  ))}
107
- </>
103
+ </React.Fragment>
108
104
  )
109
105
  }
@@ -1,4 +1,4 @@
1
- import { useContext, createContext, useState } from 'react'
1
+ import React, { createContext, useState } from 'react'
2
2
 
3
3
  const initialState = {
4
4
  alias: {},
@@ -15,7 +15,7 @@ export const BreadcrumbContext = createContext({
15
15
  })
16
16
 
17
17
  export function useBreadcrumbContext() {
18
- const context = useContext(BreadcrumbContext)
18
+ const context = React.useContext(BreadcrumbContext)
19
19
  if (!context) {
20
20
  throw new Error(`breadcrumb components cannot be used outside Breadcrumb context`)
21
21
  }
@@ -1,23 +1,24 @@
1
+
1
2
  export interface Breadcrumb {
2
- to: string
3
- name: string
4
- className?: string
3
+ to: string
4
+ name: string
5
+ className?: string
5
6
  }
6
7
 
7
8
  export interface UseBreadcrumbState {
8
- breadcrumbs: Breadcrumb[]
9
- setCrumb: (props: { [key: string]: any }) => void
10
- resetCrumb: (props: string[]) => void
9
+ breadcrumbs: Breadcrumb[]
10
+ setCrumb: (props: { [key: string]: any }) => void
11
+ resetCrumb: (props: string[]) => void
11
12
  }
12
13
 
13
14
  export interface AdvancedAlias {
14
- component: any
15
- linked: boolean
15
+ component: any
16
+ linked: boolean
16
17
  }
17
18
 
18
19
  export interface UseBreadcrumbProps {
19
- sep?: string
20
- alias?: { [key: string]: AdvancedAlias | any }
20
+ sep?: string
21
+ alias?: { [key: string]: AdvancedAlias | any }
21
22
  }
22
23
 
23
24
  export interface Breadcrumbs {
@@ -26,4 +27,4 @@ export interface Breadcrumbs {
26
27
  className?: string
27
28
  }
28
29
 
29
- export type UseBreadcrumbOptionalProps = UseBreadcrumbProps | null
30
+ export type UseBreadcrumbOptionalProps = UseBreadcrumbProps | null
@@ -1,4 +1,4 @@
1
- import { Component } from 'react'
1
+ import React, { Component } from 'react'
2
2
  import { CheckboxProps } from './Types'
3
3
 
4
4
  /*
@@ -12,23 +12,25 @@ Valid States of Checkbox:
12
12
  */
13
13
  export class Checkbox extends Component<CheckboxProps> {
14
14
  render() {
15
- const rootClassName = `${this.props.rootClassName ? this.props.rootClassName : ''}`
15
+ let rootClassName = `${this.props.rootClassName ? this.props.rootClassName : ''}`
16
16
  return (
17
- <label className={`dc__position-rel flex left cursor ${rootClassName}`} onClick={this.props?.onClick}>
18
- <input
19
- type="checkbox"
20
- className="form__checkbox"
21
- disabled={this.props.disabled}
22
- value={this.props.value}
23
- onChange={this.props.onChange}
24
- tabIndex={this.props.tabIndex}
25
- checked={this.props.isChecked}
26
- id={this.props.id}
27
- data-testid={this.props.dataTestId}
28
- />
29
- <span className="form__checkbox-container" data-testid={`${this.props.dataTestId}-chk-span`} />
30
- <span className="form__checkbox-label">{this.props.children}</span>
31
- </label>
17
+ <>
18
+ <label className={`dc__position-rel flex left cursor ${rootClassName}`} onClick={this.props?.onClick}>
19
+ <input
20
+ type="checkbox"
21
+ className={'form__checkbox'}
22
+ disabled={this.props.disabled}
23
+ value={this.props.value}
24
+ onChange={this.props.onChange}
25
+ tabIndex={this.props.tabIndex}
26
+ checked={this.props.isChecked}
27
+ id={this.props.id}
28
+ data-testid={this.props.dataTestId}
29
+ />
30
+ <span className="form__checkbox-container" data-testid={`${this.props.dataTestId}-chk-span`}></span>
31
+ <span className={`form__checkbox-label`}>{this.props.children}</span>
32
+ </label>
33
+ </>
32
34
  )
33
35
  }
34
36
  }
@@ -1,4 +1,4 @@
1
- import { useState, useEffect, useCallback } from 'react'
1
+ import React, { useState, useEffect, useCallback } from 'react'
2
2
  import Tippy from '@tippyjs/react'
3
3
  import { copyToClipboard } from '../Helper'
4
4
  import ClipboardProps from './types'
@@ -1,3 +1,4 @@
1
+ import React from 'react'
1
2
  import { render, screen, fireEvent } from '@testing-library/react'
2
3
  import ClipboardButton from '../ClipboardButton'
3
4
 
@@ -1,7 +1,7 @@
1
- import moment from 'moment'
2
- import { get, post } from './Api'
1
+ import moment from 'moment';
2
+ import {get, post} from './Api';
3
3
  import { ROUTES } from './Constants'
4
- import { sortCallback } from './Helper'
4
+ import { sortCallback } from './Helper';
5
5
  import {
6
6
  TeamList,
7
7
  ResponseType,
@@ -17,21 +17,23 @@ import {
17
17
  } from './Types'
18
18
 
19
19
  export const getTeamListMin = (): Promise<TeamList> => {
20
- // ignore active field
21
- const URL = `${ROUTES.PROJECT_LIST_MIN}`
22
- return get(URL).then((response) => {
23
- let list = []
24
- if (response && response.result && Array.isArray(response.result)) {
25
- list = response.result
26
- }
27
- list = list.sort((a, b) => sortCallback('name', a, b))
28
- return {
29
- code: response.code,
30
- status: response.status,
31
- result: list,
32
- }
33
- })
34
- }
20
+ // ignore active field
21
+ const URL = `${ROUTES.PROJECT_LIST_MIN}`;
22
+ return get(URL).then(response => {
23
+ let list = [];
24
+ if (response && response.result && Array.isArray(response.result)) {
25
+ list = response.result;
26
+ }
27
+ list = list.sort((a, b) => {
28
+ return sortCallback('name', a, b);
29
+ });
30
+ return {
31
+ code: response.code,
32
+ status: response.status,
33
+ result: list,
34
+ };
35
+ });
36
+ };
35
37
 
36
38
  interface UserRole extends ResponseType {
37
39
  result?: {
@@ -57,12 +59,14 @@ export function getUserRole(appName?: string): Promise<UserRole> {
57
59
  return get(`${ROUTES.USER_CHECK_ROLE}${appName ? `?appName=${appName}` : ''}`)
58
60
  }
59
61
 
60
- export function setImageTags(request, pipelineId: number, artifactId: number) {
61
- return post(`${ROUTES.IMAGE_TAGGING}/${pipelineId}/${artifactId}`, request)
62
+ export function setImageTags(request, pipelineId: number, artifactId: number){
63
+ return post(`${ROUTES.IMAGE_TAGGING}/${pipelineId}/${artifactId}`,request )
62
64
  }
63
65
 
64
66
  const processURL = (url: string, params: object) => {
65
- const validParams = Object.keys(params).filter((key) => params[key] != null)
67
+ const validParams = Object.keys(params).filter((key) => {
68
+ return params[key] != null
69
+ })
66
70
 
67
71
  if (!validParams.length) {
68
72
  return url
@@ -71,11 +75,11 @@ const processURL = (url: string, params: object) => {
71
75
  const queryString = validParams
72
76
  .map((key) => {
73
77
  if (Array.isArray(params[key])) {
74
- return `${key}=${params[key].join(',')}`
78
+ return `${key}=${params[key].join(',')}`
75
79
  }
76
80
  return `${key}=${params[key]}`
77
81
  })
78
- .join('&')
82
+ .join('&')
79
83
 
80
84
  return `${url}?${queryString}`
81
85
  }
@@ -132,23 +136,25 @@ const cdMaterialListModal = (artifacts: any[], offset: number, artifactId?: numb
132
136
  // It is going to be null but required in type so can't remove
133
137
  lastExecution: material.lastExecution,
134
138
  materialInfo: material.material_info
135
- ? material.material_info.map((mat) => ({
136
- modifiedTime: mat.modifiedTime
137
- ? moment(mat.modifiedTime).format('ddd, DD MMM YYYY, hh:mm A')
138
- : '',
139
- commitLink: createGitCommitUrl(mat.url, mat.revision),
140
- author: mat.author || '',
141
- message: mat.message || '',
142
- revision: mat.revision || '',
143
- tag: mat.tag || '',
144
- webhookData: mat.webhookData || '',
145
- url: mat.url || '',
146
- branch:
147
- (material.ciConfigureSourceType === SourceTypeMap.WEBHOOK
148
- ? material.ciConfigureSourceValue
149
- : mat.branch) || '',
150
- type: material.ciConfigureSourceType || '',
151
- }))
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
+ })
152
158
  : [],
153
159
  filterState,
154
160
  appliedFiltersTimestamp: material.appliedFiltersTimestamp ?? '',
@@ -231,7 +237,9 @@ const processCDMaterialServiceResponse = (
231
237
  // TODO: On update of service would remove from here
232
238
  const filteredMaterials =
233
239
  filter && filter === CDMaterialFilterQuery.RESOURCE
234
- ? materials.filter((material) => material.filterState === FilterStates.ALLOWED)
240
+ ? materials.filter((material) => {
241
+ return material.filterState === FilterStates.ALLOWED
242
+ })
235
243
  : materials
236
244
 
237
245
  return {
@@ -255,7 +263,7 @@ export const genericCDMaterialsService = (
255
263
  ): Promise<CDMaterialResponseType> => {
256
264
  // TODO: On update of service would remove from here
257
265
  const manipulatedParams = getSanitizedQueryParams(queryParams)
258
-
266
+
259
267
  let URL
260
268
  switch (serviceType) {
261
269
  case CDMaterialServiceEnum.ROLLBACK:
@@ -264,16 +272,13 @@ export const genericCDMaterialsService = (
264
272
 
265
273
  // Meant for handling getCDMaterialList
266
274
  default:
267
- URL = processURL(`${ROUTES.CD_MATERIAL_GET}/${cdMaterialID}/material`, {
268
- ...manipulatedParams,
269
- stage: stageMap[stage],
270
- })
275
+ URL = processURL(`${ROUTES.CD_MATERIAL_GET}/${cdMaterialID}/material`, { ...manipulatedParams, stage: stageMap[stage] })
271
276
  break
272
277
  }
273
278
 
274
- return get(URL, { signal }).then((response) =>
275
- processCDMaterialServiceResponse(response.result, stage, queryParams.offset, queryParams.filter),
276
- )
279
+ return get(URL, { signal }).then((response) => {
280
+ return processCDMaterialServiceResponse(response.result, stage, queryParams.offset, queryParams.filter)
281
+ })
277
282
  }
278
283
 
279
284
  export function extractImage(image: string): string {
@@ -282,25 +287,25 @@ export function extractImage(image: string): string {
282
287
 
283
288
  export function createGitCommitUrl(url: string, revision: string): string {
284
289
  if (!url || !revision) {
285
- return 'NA'
290
+ return "NA"
286
291
  }
287
- if (url.indexOf('gitlab') > 0 || url.indexOf('github') > 0 || url.indexOf('azure') > 0) {
288
- const urlpart = url.split('@')
292
+ if (url.indexOf("gitlab") > 0 || url.indexOf("github") > 0 || url.indexOf("azure") > 0) {
293
+ let urlpart = url.split("@")
289
294
  if (urlpart.length > 1) {
290
- return `https://${urlpart[1].split('.git')[0]}/commit/${revision}`
295
+ return "https://" + urlpart[1].split(".git")[0] + "/commit/" + revision
291
296
  }
292
297
  if (urlpart.length == 1) {
293
- return `${urlpart[0].split('.git')[0]}/commit/${revision}`
298
+ return urlpart[0].split(".git")[0] + "/commit/" + revision
294
299
  }
295
300
  }
296
- if (url.indexOf('bitbucket') > 0) {
297
- const urlpart = url.split('@')
301
+ if (url.indexOf("bitbucket") > 0) {
302
+ let urlpart = url.split("@")
298
303
  if (urlpart.length > 1) {
299
- return `https://${urlpart[1].split('.git')[0]}/commits/${revision}`
304
+ return "https://" + urlpart[1].split(".git")[0] + "/commits/" + revision
300
305
  }
301
306
  if (urlpart.length == 1) {
302
- return `${urlpart[0].split('.git')[0]}/commits/${revision}`
307
+ return urlpart[0].split(".git")[0] + "/commits/" + revision
303
308
  }
304
309
  }
305
- return 'NA'
310
+ return "NA"
306
311
  }