@devtron-labs/devtron-fe-common-lib 0.0.63-beta-2 → 0.0.63-beta-4

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 (479) hide show
  1. package/.eslintignore +96 -0
  2. package/.eslintrc.js +109 -0
  3. package/.github/pull_request_template.md +25 -0
  4. package/.github/workflows/ci.yml +31 -0
  5. package/.github/workflows/release-package.yml +48 -0
  6. package/.husky/pre-commit +5 -0
  7. package/.lintstagedrc +3 -0
  8. package/.nvmrc +1 -0
  9. package/.prettierrc.js +7 -0
  10. package/dist/Common/AddCDButton/AddCDButton.d.ts +3 -3
  11. package/dist/Common/AddCDButton/index.d.ts +2 -2
  12. package/dist/Common/AddCDButton/types.d.ts +26 -26
  13. package/dist/Common/AddCDButton/utils.d.ts +2 -2
  14. package/dist/Common/Api.d.ts +14 -14
  15. package/dist/Common/AppStatus/AppStatus.d.ts +3 -3
  16. package/dist/Common/AppStatus/constants.d.ts +51 -51
  17. package/dist/Common/AppStatus/index.d.ts +1 -1
  18. package/dist/Common/AppStatus/types.d.ts +12 -12
  19. package/dist/Common/AppStatus/utils.d.ts +1 -1
  20. package/dist/Common/BreadCrumb/BreadCrumb.d.ts +5 -5
  21. package/dist/Common/BreadCrumb/BreadcrumbStore.d.ts +17 -17
  22. package/dist/Common/BreadCrumb/Types.d.ts +28 -28
  23. package/dist/Common/CIPipeline.Types.d.ts +265 -265
  24. package/dist/Common/ChartVersionAndTypeSelector.d.ts +4 -3
  25. package/dist/Common/Checkbox.d.ts +5 -5
  26. package/dist/Common/ClipboardButton/ClipboardButton.d.ts +10 -10
  27. package/dist/Common/ClipboardButton/types.d.ts +8 -8
  28. package/dist/Common/Common.service.d.ts +20 -20
  29. package/dist/Common/Constants.d.ts +90 -96
  30. package/dist/Common/CustomInput/CustomInput.d.ts +3 -2
  31. package/dist/Common/CustomInput/Types.d.ts +31 -31
  32. package/dist/Common/CustomInput/index.d.ts +2 -2
  33. package/dist/Common/CustomTagSelector/PropagateTagInfo.d.ts +4 -4
  34. package/dist/Common/CustomTagSelector/ResizableTagTextArea.d.ts +3 -2
  35. package/dist/Common/CustomTagSelector/TagDetails.d.ts +3 -2
  36. package/dist/Common/CustomTagSelector/TagLabelSelect.d.ts +3 -2
  37. package/dist/Common/CustomTagSelector/TagLabelValueSelector.d.ts +3 -2
  38. package/dist/Common/CustomTagSelector/TagSelector.utils.d.ts +12 -12
  39. package/dist/Common/CustomTagSelector/Types.d.ts +68 -68
  40. package/dist/Common/CustomTagSelector/ValidationRules.d.ts +10 -10
  41. package/dist/Common/CustomTagSelector/index.d.ts +6 -6
  42. package/dist/Common/DebouncedSearch/DebouncedSearch.d.ts +17 -17
  43. package/dist/Common/DebouncedSearch/Types.d.ts +14 -14
  44. package/dist/Common/DebouncedSearch/Utils.d.ts +1 -1
  45. package/dist/Common/DeleteComponentModal/DeleteComponent.d.ts +4 -3
  46. package/dist/Common/DeleteComponentModal/types.d.ts +15 -15
  47. package/dist/Common/DevtronProgressing/DevtronProgressing.d.ts +3 -2
  48. package/dist/Common/DevtronProgressing/index.d.ts +1 -1
  49. package/dist/Common/DevtronProgressing/types.d.ts +4 -4
  50. package/dist/Common/Dialogs/ConfirmationDialog.d.ts +9 -8
  51. package/dist/Common/Dialogs/DeleteDialog.d.ts +5 -5
  52. package/dist/Common/Dialogs/DialogForm.d.ts +14 -14
  53. package/dist/Common/Dialogs/ForceDeleteDialog.d.ts +3 -3
  54. package/dist/Common/Dialogs/Types.d.ts +45 -45
  55. package/dist/Common/Dialogs/index.d.ts +4 -4
  56. package/dist/Common/DraggableWrapper/DraggableButton.d.ts +3 -3
  57. package/dist/Common/DraggableWrapper/DraggableWrapper.d.ts +9 -9
  58. package/dist/Common/DraggableWrapper/index.d.ts +3 -3
  59. package/dist/Common/DraggableWrapper/types.d.ts +30 -23
  60. package/dist/Common/Drawer/Drawer.d.ts +16 -14
  61. package/dist/Common/EmptyState/EmptyState.d.ts +25 -0
  62. package/dist/Common/EmptyState/GenericEmptyState.d.ts +5 -3
  63. package/dist/Common/Error.d.ts +17 -17
  64. package/dist/Common/ErrorScreenNotFound.d.ts +3 -2
  65. package/dist/Common/Grid/Grid.d.ts +3 -3
  66. package/dist/Common/Grid/types.d.ts +10 -10
  67. package/dist/Common/Helper.d.ts +67 -68
  68. package/dist/Common/Hooks/UseClickOutside/UseClickOutside.d.ts +1 -1
  69. package/dist/Common/Hooks/UseSuperAdmin/UseSuperAdmin.d.ts +6 -6
  70. package/dist/Common/Hooks/UseSuperAdmin/types.d.ts +3 -3
  71. package/dist/Common/Hooks/UseWindowSize/UseWindowSize.d.ts +4 -4
  72. package/dist/Common/Hooks/index.d.ts +4 -4
  73. package/dist/Common/Hooks/useUrlFilters/constants.d.ts +8 -8
  74. package/dist/Common/Hooks/useUrlFilters/index.d.ts +2 -2
  75. package/dist/Common/Hooks/useUrlFilters/types.d.ts +59 -6
  76. package/dist/Common/Hooks/useUrlFilters/useUrlFilters.d.ts +20 -32
  77. package/dist/Common/ImageTags.Types.d.ts +40 -40
  78. package/dist/Common/ImageTags.d.ts +4 -3
  79. package/dist/Common/InfoColorBar/InfoColourbar.d.ts +5 -3
  80. package/dist/Common/Modals/Modal.d.ts +3 -3
  81. package/dist/Common/Modals/OpaqueModal.d.ts +12 -12
  82. package/dist/Common/Modals/VisibleModal.d.ts +15 -15
  83. package/dist/Common/Modals/VisibleModal2.d.ts +12 -12
  84. package/dist/Common/MultiSelectCustomization.d.ts +37 -37
  85. package/dist/Common/Pagination/PageSizeSelector.d.ts +4 -3
  86. package/dist/Common/Pagination/Pagination.d.ts +5 -3
  87. package/dist/Common/Pagination/constants.d.ts +5 -5
  88. package/dist/Common/Pagination/index.d.ts +1 -1
  89. package/dist/Common/Pagination/types.d.ts +51 -51
  90. package/dist/Common/Pagination/utils.d.ts +6 -6
  91. package/dist/Common/Policy.Types.d.ts +56 -56
  92. package/dist/Common/PopupMenu.d.ts +8 -7
  93. package/dist/Common/Progressing.d.ts +4 -3
  94. package/dist/Common/RJSF/Form.d.ts +4 -2
  95. package/dist/Common/RJSF/common/FieldRow.d.ts +6 -5
  96. package/dist/Common/RJSF/common/types.d.ts +8 -8
  97. package/dist/Common/RJSF/config.d.ts +4 -4
  98. package/dist/Common/RJSF/constants.d.ts +7 -7
  99. package/dist/Common/RJSF/index.d.ts +3 -3
  100. package/dist/Common/RJSF/templates/ArrayFieldItemTemplate.d.ts +3 -2
  101. package/dist/Common/RJSF/templates/ArrayFieldTemplate.d.ts +3 -2
  102. package/dist/Common/RJSF/templates/BaseInput.d.ts +3 -2
  103. package/dist/Common/RJSF/templates/ButtonTemplates/AddButton.d.ts +3 -2
  104. package/dist/Common/RJSF/templates/ButtonTemplates/RemoveButton.d.ts +3 -2
  105. package/dist/Common/RJSF/templates/ButtonTemplates/SubmitButton.d.ts +3 -2
  106. package/dist/Common/RJSF/templates/ButtonTemplates/index.d.ts +3 -3
  107. package/dist/Common/RJSF/templates/Description.d.ts +3 -2
  108. package/dist/Common/RJSF/templates/Field.d.ts +3 -2
  109. package/dist/Common/RJSF/templates/FieldErrorTemplate.d.ts +3 -2
  110. package/dist/Common/RJSF/templates/ObjectFieldTemplate.d.ts +3 -2
  111. package/dist/Common/RJSF/templates/TitleField.d.ts +3 -2
  112. package/dist/Common/RJSF/templates/WrapIfAdditionalTemplate.d.ts +3 -2
  113. package/dist/Common/RJSF/templates/index.d.ts +10 -10
  114. package/dist/Common/RJSF/types.d.ts +3 -3
  115. package/dist/Common/RJSF/utils.d.ts +26 -25
  116. package/dist/Common/RJSF/widgets/Checkbox.d.ts +3 -2
  117. package/dist/Common/RJSF/widgets/Select.d.ts +3 -2
  118. package/dist/Common/RJSF/widgets/index.d.ts +2 -2
  119. package/dist/Common/RadioGroup/RadioGroup.d.ts +17 -16
  120. package/dist/Common/RadioGroup.d.ts +8 -8
  121. package/dist/Common/Reload.d.ts +3 -3
  122. package/dist/Common/ResizableTextarea.d.ts +3 -3
  123. package/dist/Common/SearchBar/SearchBar.component.d.ts +39 -37
  124. package/dist/Common/SearchBar/index.d.ts +2 -2
  125. package/dist/Common/SearchBar/types.d.ts +35 -35
  126. package/dist/Common/Security/ScanVulnerabilitiesTable.d.ts +4 -3
  127. package/dist/Common/ServerError.d.ts +15 -15
  128. package/dist/Common/SortableTableHeaderCell/SortableTableHeaderCell.d.ts +18 -17
  129. package/dist/Common/SortableTableHeaderCell/index.d.ts +2 -2
  130. package/dist/Common/SortableTableHeaderCell/types.d.ts +25 -25
  131. package/dist/Common/TippyCustomized.d.ts +4 -2
  132. package/dist/Common/ToastBody.d.ts +23 -23
  133. package/dist/Common/Toggle/Toggle.d.ts +14 -12
  134. package/dist/Common/Types.d.ts +704 -704
  135. package/dist/Common/index.d.ts +51 -51
  136. package/dist/Pages/GlobalConfigurations/Authorization/constants.d.ts +19 -15
  137. package/dist/Pages/GlobalConfigurations/Authorization/index.d.ts +2 -1
  138. package/dist/Pages/GlobalConfigurations/Authorization/types.d.ts +23 -0
  139. package/dist/Pages/GlobalConfigurations/BuildInfra/BuildInfraConfigForm.d.ts +4 -4
  140. package/dist/Pages/GlobalConfigurations/BuildInfra/BuildInfraDescriptionField.d.ts +4 -4
  141. package/dist/Pages/GlobalConfigurations/BuildInfra/BuildInfraFormAction.d.ts +7 -7
  142. package/dist/Pages/GlobalConfigurations/BuildInfra/BuildInfraFormItem.d.ts +4 -4
  143. package/dist/Pages/GlobalConfigurations/BuildInfra/BuildInfraProfileNameField.d.ts +4 -4
  144. package/dist/Pages/GlobalConfigurations/BuildInfra/Descriptor.d.ts +4 -3
  145. package/dist/Pages/GlobalConfigurations/BuildInfra/Footer.d.ts +4 -4
  146. package/dist/Pages/GlobalConfigurations/BuildInfra/constants.d.ts +50 -50
  147. package/dist/Pages/GlobalConfigurations/BuildInfra/index.d.ts +7 -7
  148. package/dist/Pages/GlobalConfigurations/BuildInfra/services.d.ts +6 -6
  149. package/dist/Pages/GlobalConfigurations/BuildInfra/types.d.ts +286 -286
  150. package/dist/Pages/GlobalConfigurations/BuildInfra/utils.d.ts +12 -12
  151. package/dist/Pages/GlobalConfigurations/index.d.ts +2 -2
  152. package/dist/Pages/index.d.ts +1 -1
  153. package/dist/Shared/Components/APIResponseHandler/APIResponseHandler.d.ts +4 -3
  154. package/dist/Shared/Components/APIResponseHandler/constants.d.ts +4 -4
  155. package/dist/Shared/Components/APIResponseHandler/index.d.ts +2 -2
  156. package/dist/Shared/Components/APIResponseHandler/types.d.ts +37 -37
  157. package/dist/Shared/Components/BulkSelection/BulkSelection.d.ts +4 -3
  158. package/dist/Shared/Components/BulkSelection/BulkSelectionDropdownItems.d.ts +4 -3
  159. package/dist/Shared/Components/BulkSelection/BulkSelectionProvider.d.ts +4 -3
  160. package/dist/Shared/Components/BulkSelection/constants.d.ts +10 -10
  161. package/dist/Shared/Components/BulkSelection/index.d.ts +4 -4
  162. package/dist/Shared/Components/BulkSelection/types.d.ts +56 -54
  163. package/dist/Shared/Components/FilterChips/FilterChips.component.d.ts +7 -0
  164. package/dist/Shared/Components/FilterChips/index.d.ts +2 -0
  165. package/dist/Shared/Components/FilterChips/types.d.ts +37 -0
  166. package/dist/Shared/Components/ReactSelect/index.d.ts +1 -1
  167. package/dist/Shared/Components/ReactSelect/utils.d.ts +12 -11
  168. package/dist/Shared/Components/index.d.ts +4 -3
  169. package/dist/Shared/Helpers.d.ts +16 -16
  170. package/dist/Shared/index.d.ts +3 -3
  171. package/dist/Shared/validations.d.ts +8 -8
  172. package/dist/index.d.ts +3 -9
  173. package/dist/index.js +30473 -216
  174. package/package.json +23 -34
  175. package/rollup.config.js +31 -0
  176. package/src/Assets/Icon/ic-add.svg +3 -0
  177. package/src/Assets/Icon/ic-appstatus-cancelled.svg +6 -0
  178. package/src/Assets/Icon/ic-arrow-counter-clockwise.svg +5 -0
  179. package/src/Assets/Icon/ic-arrow-up-down.svg +3 -0
  180. package/src/Assets/Icon/ic-check-all.svg +5 -0
  181. package/src/Assets/Icon/ic-check-square.svg +4 -0
  182. package/src/Assets/Icon/ic-check.svg +5 -0
  183. package/src/Assets/Icon/ic-chevron-down.svg +5 -0
  184. package/src/Assets/Icon/ic-close.svg +9 -0
  185. package/src/Assets/Icon/ic-copy.svg +3 -0
  186. package/src/Assets/Icon/ic-cpu.svg +4 -0
  187. package/src/Assets/Icon/ic-cross.svg +3 -0
  188. package/src/Assets/Icon/ic-drag.svg +8 -0
  189. package/src/Assets/Icon/ic-enter.svg +3 -0
  190. package/src/Assets/Icon/ic-error-cross.svg +8 -0
  191. package/src/Assets/Icon/ic-error-exclamation.svg +6 -0
  192. package/src/Assets/Icon/ic-error-medium.svg +6 -0
  193. package/src/Assets/Icon/ic-help-outline.svg +3 -0
  194. package/src/Assets/Icon/ic-help.svg +3 -0
  195. package/src/Assets/Icon/ic-info-filled.svg +7 -0
  196. package/src/Assets/Icon/ic-info-outlined.svg +13 -0
  197. package/src/Assets/Icon/ic-memory.svg +3 -0
  198. package/src/Assets/Icon/ic-minus.svg +3 -0
  199. package/src/Assets/Icon/ic-pencil.svg +3 -0
  200. package/src/Assets/Icon/ic-progressing.svg +6 -0
  201. package/src/Assets/Icon/ic-rotate-devtron.svg +103 -0
  202. package/src/Assets/Icon/ic-search.svg +6 -0
  203. package/src/Assets/Icon/ic-sort-arrow-down.svg +3 -0
  204. package/src/Assets/Icon/ic-timer.svg +3 -0
  205. package/src/Assets/Icon/ic-warning.svg +7 -0
  206. package/src/Assets/Icon/inject-tag.svg +5 -0
  207. package/src/Assets/Img/app-not-deployed.png +0 -0
  208. package/src/Assets/Img/delete-medium.svg +15 -0
  209. package/src/Assets/Img/ic-empty-error@2x.png +0 -0
  210. package/src/Assets/Img/ic-loading-failure.png +0 -0
  211. package/src/Assets/Img/ic-not-authorized.svg +62 -0
  212. package/src/Common/AddCDButton/AddCDButton.tsx +68 -0
  213. package/src/Common/AddCDButton/index.ts +2 -0
  214. package/src/Common/AddCDButton/types.ts +38 -0
  215. package/src/Common/AddCDButton/utils.tsx +35 -0
  216. package/src/Common/Api.ts +251 -0
  217. package/src/Common/AppStatus/AppStatus.tsx +64 -0
  218. package/src/Common/AppStatus/constants.ts +53 -0
  219. package/src/Common/AppStatus/index.ts +1 -0
  220. package/src/Common/AppStatus/types.ts +12 -0
  221. package/src/Common/AppStatus/utils.ts +14 -0
  222. package/src/Common/BreadCrumb/BreadCrumb.tsx +105 -0
  223. package/src/Common/BreadCrumb/BreadcrumbStore.tsx +25 -0
  224. package/src/Common/BreadCrumb/Types.ts +29 -0
  225. package/src/Common/CIPipeline.Types.ts +277 -0
  226. package/src/Common/ChartVersionAndTypeSelector.tsx +78 -0
  227. package/src/Common/Checkbox.tsx +37 -0
  228. package/src/Common/ClipboardButton/ClipboardButton.tsx +61 -0
  229. package/src/Common/ClipboardButton/__tests__/ClipboardButton.test.tsx +43 -0
  230. package/src/Common/ClipboardButton/types.ts +7 -0
  231. package/src/Common/Common.service.ts +315 -0
  232. package/src/Common/Constants.ts +271 -0
  233. package/src/Common/CustomInput/CustomInput.tsx +135 -0
  234. package/src/Common/CustomInput/Types.ts +32 -0
  235. package/src/Common/CustomInput/index.ts +2 -0
  236. package/src/Common/CustomTagSelector/PropagateTagInfo.tsx +46 -0
  237. package/src/Common/CustomTagSelector/ResizableTagTextArea.tsx +84 -0
  238. package/src/Common/CustomTagSelector/TagDetails.tsx +76 -0
  239. package/src/Common/CustomTagSelector/TagLabelSelect.tsx +61 -0
  240. package/src/Common/CustomTagSelector/TagLabelValueSelector.tsx +198 -0
  241. package/src/Common/CustomTagSelector/TagSelector.utils.ts +71 -0
  242. package/src/Common/CustomTagSelector/Types.ts +72 -0
  243. package/src/Common/CustomTagSelector/ValidationRules.ts +58 -0
  244. package/src/Common/CustomTagSelector/index.ts +6 -0
  245. package/src/Common/DebouncedSearch/DebouncedSearch.tsx +78 -0
  246. package/src/Common/DebouncedSearch/Types.ts +13 -0
  247. package/src/Common/DebouncedSearch/Utils.ts +19 -0
  248. package/src/Common/DebouncedSearch/__tests__/DebouncedSearch.test.tsx +61 -0
  249. package/src/Common/DeleteComponentModal/DeleteComponent.tsx +95 -0
  250. package/src/Common/DeleteComponentModal/types.ts +15 -0
  251. package/src/Common/DevtronProgressing/DevtronProgressing.tsx +11 -0
  252. package/src/Common/DevtronProgressing/index.ts +1 -0
  253. package/src/Common/DevtronProgressing/types.ts +4 -0
  254. package/src/Common/Dialogs/ConfirmationDialog.tsx +34 -0
  255. package/src/Common/Dialogs/DeleteDialog.tsx +69 -0
  256. package/src/Common/Dialogs/DialogForm.tsx +86 -0
  257. package/src/Common/Dialogs/ForceDeleteDialog.tsx +19 -0
  258. package/src/Common/Dialogs/Types.ts +47 -0
  259. package/src/Common/Dialogs/index.ts +4 -0
  260. package/src/Common/DraggableWrapper/DraggableButton.tsx +14 -0
  261. package/src/Common/DraggableWrapper/DraggableWrapper.tsx +121 -0
  262. package/src/Common/DraggableWrapper/index.ts +3 -0
  263. package/src/Common/DraggableWrapper/types.ts +34 -0
  264. package/src/Common/Drawer/Drawer.scss +40 -0
  265. package/src/Common/Drawer/Drawer.tsx +49 -0
  266. package/src/Common/EmptyState/EmptyState.tsx +42 -0
  267. package/src/Common/EmptyState/GenericEmptyState.tsx +81 -0
  268. package/src/Common/EmptyState/emptyState.scss +74 -0
  269. package/src/Common/Error.tsx +61 -0
  270. package/src/Common/ErrorScreenNotFound.tsx +31 -0
  271. package/src/Common/Grid/Grid.tsx +44 -0
  272. package/src/Common/Grid/types.ts +11 -0
  273. package/src/Common/Helper.tsx +596 -0
  274. package/src/Common/Hooks/UseClickOutside/UseClickOutside.tsx +15 -0
  275. package/src/Common/Hooks/UseSuperAdmin/UseSuperAdmin.tsx +24 -0
  276. package/src/Common/Hooks/UseSuperAdmin/types.ts +3 -0
  277. package/src/Common/Hooks/UseWindowSize/UseWindowSize.tsx +31 -0
  278. package/src/Common/Hooks/index.ts +4 -0
  279. package/src/Common/Hooks/useUrlFilters/constants.ts +9 -0
  280. package/src/Common/Hooks/useUrlFilters/index.ts +2 -0
  281. package/src/Common/Hooks/useUrlFilters/types.ts +61 -0
  282. package/src/Common/Hooks/useUrlFilters/useUrlFilters.ts +143 -0
  283. package/src/Common/ImageTags.Types.ts +44 -0
  284. package/src/Common/ImageTags.tsx +586 -0
  285. package/src/Common/InfoColorBar/InfoColourbar.tsx +80 -0
  286. package/src/Common/InfoColorBar/infoColourBar.scss +28 -0
  287. package/src/Common/Modals/Modal.tsx +68 -0
  288. package/src/Common/Modals/OpaqueModal.tsx +36 -0
  289. package/src/Common/Modals/VisibleModal.tsx +55 -0
  290. package/src/Common/Modals/VisibleModal2.tsx +35 -0
  291. package/src/Common/MultiSelectCustomization.tsx +148 -0
  292. package/src/Common/Pagination/PageSizeSelector.tsx +78 -0
  293. package/src/Common/Pagination/Pagination.tsx +127 -0
  294. package/src/Common/Pagination/constants.ts +6 -0
  295. package/src/Common/Pagination/index.tsx +3 -0
  296. package/src/Common/Pagination/pagination.scss +123 -0
  297. package/src/Common/Pagination/types.ts +55 -0
  298. package/src/Common/Pagination/utils.tsx +24 -0
  299. package/src/Common/Policy.Types.ts +63 -0
  300. package/src/Common/PopupMenu.tsx +199 -0
  301. package/src/Common/Progressing.tsx +53 -0
  302. package/src/Common/RJSF/Form.tsx +29 -0
  303. package/src/Common/RJSF/common/FieldRow.tsx +35 -0
  304. package/src/Common/RJSF/common/types.ts +9 -0
  305. package/src/Common/RJSF/config.ts +37 -0
  306. package/src/Common/RJSF/constants.ts +10 -0
  307. package/src/Common/RJSF/index.ts +3 -0
  308. package/src/Common/RJSF/rjsfForm.scss +18 -0
  309. package/src/Common/RJSF/templates/ArrayFieldItemTemplate.tsx +31 -0
  310. package/src/Common/RJSF/templates/ArrayFieldTemplate.tsx +78 -0
  311. package/src/Common/RJSF/templates/BaseInput.tsx +16 -0
  312. package/src/Common/RJSF/templates/ButtonTemplates/AddButton.tsx +18 -0
  313. package/src/Common/RJSF/templates/ButtonTemplates/RemoveButton.tsx +10 -0
  314. package/src/Common/RJSF/templates/ButtonTemplates/SubmitButton.tsx +18 -0
  315. package/src/Common/RJSF/templates/ButtonTemplates/index.ts +3 -0
  316. package/src/Common/RJSF/templates/Description.tsx +12 -0
  317. package/src/Common/RJSF/templates/Field.tsx +30 -0
  318. package/src/Common/RJSF/templates/FieldErrorTemplate.tsx +25 -0
  319. package/src/Common/RJSF/templates/ObjectFieldTemplate.tsx +105 -0
  320. package/src/Common/RJSF/templates/TitleField.tsx +9 -0
  321. package/src/Common/RJSF/templates/WrapIfAdditionalTemplate.tsx +51 -0
  322. package/src/Common/RJSF/templates/index.ts +10 -0
  323. package/src/Common/RJSF/types.ts +4 -0
  324. package/src/Common/RJSF/utils.ts +125 -0
  325. package/src/Common/RJSF/widgets/Checkbox.tsx +44 -0
  326. package/src/Common/RJSF/widgets/Select.tsx +77 -0
  327. package/src/Common/RJSF/widgets/index.ts +2 -0
  328. package/src/Common/RadioGroup/RadioGroup.tsx +105 -0
  329. package/src/Common/RadioGroup/radioGroup.scss +46 -0
  330. package/src/Common/RadioGroup.tsx +53 -0
  331. package/src/Common/Reload.tsx +23 -0
  332. package/src/Common/ResizableTextarea.tsx +73 -0
  333. package/src/Common/SearchBar/SearchBar.component.tsx +131 -0
  334. package/src/Common/SearchBar/index.ts +2 -0
  335. package/src/Common/SearchBar/searchBar.scss +31 -0
  336. package/src/Common/SearchBar/types.ts +34 -0
  337. package/src/Common/Security/ScanVulnerabilitiesTable.tsx +55 -0
  338. package/src/Common/Security/scanVulnerabilities.css +69 -0
  339. package/src/Common/ServerError.ts +31 -0
  340. package/src/Common/SortableTableHeaderCell/SortableTableHeaderCell.tsx +44 -0
  341. package/src/Common/SortableTableHeaderCell/index.ts +2 -0
  342. package/src/Common/SortableTableHeaderCell/types.ts +26 -0
  343. package/src/Common/TippyCustomized.tsx +172 -0
  344. package/src/Common/ToastBody.tsx +62 -0
  345. package/src/Common/Toggle/Toggle.scss +78 -0
  346. package/src/Common/Toggle/Toggle.tsx +50 -0
  347. package/src/Common/Types.ts +778 -0
  348. package/src/Common/index.ts +51 -0
  349. package/src/Pages/GlobalConfigurations/Authorization/constants.ts +21 -0
  350. package/src/Pages/GlobalConfigurations/Authorization/index.ts +2 -0
  351. package/src/Pages/GlobalConfigurations/Authorization/types.ts +25 -0
  352. package/src/Pages/GlobalConfigurations/BuildInfra/BuildInfraConfigForm.tsx +127 -0
  353. package/src/Pages/GlobalConfigurations/BuildInfra/BuildInfraDescriptionField.tsx +44 -0
  354. package/src/Pages/GlobalConfigurations/BuildInfra/BuildInfraFormAction.tsx +106 -0
  355. package/src/Pages/GlobalConfigurations/BuildInfra/BuildInfraFormItem.tsx +55 -0
  356. package/src/Pages/GlobalConfigurations/BuildInfra/BuildInfraProfileNameField.tsx +32 -0
  357. package/src/Pages/GlobalConfigurations/BuildInfra/Descriptor.tsx +45 -0
  358. package/src/Pages/GlobalConfigurations/BuildInfra/Footer.tsx +56 -0
  359. package/src/Pages/GlobalConfigurations/BuildInfra/Readme.md +4 -0
  360. package/src/Pages/GlobalConfigurations/BuildInfra/constants.tsx +138 -0
  361. package/src/Pages/GlobalConfigurations/BuildInfra/index.ts +7 -0
  362. package/src/Pages/GlobalConfigurations/BuildInfra/services.tsx +167 -0
  363. package/src/Pages/GlobalConfigurations/BuildInfra/types.tsx +339 -0
  364. package/src/Pages/GlobalConfigurations/BuildInfra/utils.tsx +506 -0
  365. package/src/Pages/GlobalConfigurations/index.ts +2 -0
  366. package/src/Pages/index.ts +1 -0
  367. package/src/Shared/Components/APIResponseHandler/APIResponseHandler.tsx +41 -0
  368. package/src/Shared/Components/APIResponseHandler/constants.tsx +5 -0
  369. package/src/Shared/Components/APIResponseHandler/index.ts +2 -0
  370. package/src/Shared/Components/APIResponseHandler/types.tsx +39 -0
  371. package/src/Shared/Components/BulkSelection/BulkSelection.tsx +77 -0
  372. package/src/Shared/Components/BulkSelection/BulkSelectionDropdownItems.tsx +33 -0
  373. package/src/Shared/Components/BulkSelection/BulkSelectionProvider.tsx +182 -0
  374. package/src/Shared/Components/BulkSelection/constants.tsx +14 -0
  375. package/src/Shared/Components/BulkSelection/index.ts +4 -0
  376. package/src/Shared/Components/BulkSelection/types.tsx +67 -0
  377. package/src/Shared/Components/FilterChips/FilterChips.component.tsx +100 -0
  378. package/src/Shared/Components/FilterChips/index.ts +2 -0
  379. package/src/Shared/Components/FilterChips/types.ts +39 -0
  380. package/src/Shared/Components/ReactSelect/index.ts +1 -0
  381. package/src/Shared/Components/ReactSelect/utils.tsx +97 -0
  382. package/src/Shared/Components/index.ts +4 -0
  383. package/src/Shared/Helpers.tsx +29 -0
  384. package/src/Shared/index.ts +3 -0
  385. package/src/Shared/validations.tsx +130 -0
  386. package/src/custom.d.ts +13 -0
  387. package/src/index.ts +3 -0
  388. package/tsconfig.json +40 -0
  389. package/dist/Common/CodeEditor/CodeEditor.d.ts +0 -47
  390. package/dist/Common/Select/Select.d.ts +0 -4
  391. package/dist/Common/Select/types.d.ts +0 -29
  392. package/dist/abap-9f67f57a.js +0 -1314
  393. package/dist/apex-ff62e532.js +0 -315
  394. package/dist/assets/editor.worker-d26000ef.js +0 -9
  395. package/dist/assets/index.css +0 -1
  396. package/dist/assets/json.worker-f23a4654.js +0 -40
  397. package/dist/assets/yaml.worker-35ea3f9a.js +0 -467
  398. package/dist/azcli-31e64a7f.js +0 -74
  399. package/dist/bat-0ffe897e.js +0 -95
  400. package/dist/bicep-3414a2b1.js +0 -108
  401. package/dist/cameligo-df1f3f25.js +0 -168
  402. package/dist/clojure-65b0f010.js +0 -754
  403. package/dist/coffee-437f0fba.js +0 -228
  404. package/dist/cpp-66843dd5.js +0 -390
  405. package/dist/csharp-621d9a49.js +0 -320
  406. package/dist/csp-de0d5244.js +0 -57
  407. package/dist/css-7cd5ed4c.js +0 -186
  408. package/dist/cssMode-30bbea2f.js +0 -1446
  409. package/dist/cypher-70ad96fe.js +0 -262
  410. package/dist/dart-33ae3739.js +0 -270
  411. package/dist/dockerfile-f2274a50.js +0 -132
  412. package/dist/ecl-3b8294a3.js +0 -454
  413. package/dist/elixir-b9dcc73a.js +0 -489
  414. package/dist/flow9-bdde8316.js +0 -141
  415. package/dist/freemarker2-c3d378f7.js +0 -643
  416. package/dist/fsharp-eac2e449.js +0 -210
  417. package/dist/go-d12ed8d4.js +0 -208
  418. package/dist/graphql-c7356b69.js +0 -141
  419. package/dist/handlebars-723aad91.js +0 -391
  420. package/dist/hcl-e883a0d4.js +0 -177
  421. package/dist/html-6271b7ac.js +0 -281
  422. package/dist/htmlMode-77853f52.js +0 -1456
  423. package/dist/index-90cf2f91.js +0 -127403
  424. package/dist/ini-425ab711.js +0 -68
  425. package/dist/java-2bc0fd68.js +0 -221
  426. package/dist/javascript-daedc120.js +0 -75
  427. package/dist/jsonMode-02ef0b87.js +0 -1867
  428. package/dist/julia-1c932615.js +0 -496
  429. package/dist/kotlin-1ab839c8.js +0 -245
  430. package/dist/less-6fe856f5.js +0 -168
  431. package/dist/lexon-4955ac52.js +0 -151
  432. package/dist/liquid-2aa5e6f3.js +0 -238
  433. package/dist/lua-3cca0047.js +0 -157
  434. package/dist/m3-132e9cb6.js +0 -210
  435. package/dist/markdown-ea59a0c1.js +0 -202
  436. package/dist/mips-19811f4b.js +0 -194
  437. package/dist/msdax-69954a10.js +0 -377
  438. package/dist/mysql-82088e5d.js +0 -876
  439. package/dist/objective-c-1976eccc.js +0 -188
  440. package/dist/pascal-8ef177cb.js +0 -245
  441. package/dist/pascaligo-bc517b9e.js +0 -158
  442. package/dist/perl-8b93582c.js +0 -599
  443. package/dist/pgsql-00c11a6d.js +0 -847
  444. package/dist/php-4c8c276f.js +0 -471
  445. package/dist/pla-e9b4ffb1.js +0 -131
  446. package/dist/postiats-2071af8c.js +0 -544
  447. package/dist/powerquery-8e388ceb.js +0 -890
  448. package/dist/powershell-e35db398.js +0 -233
  449. package/dist/protobuf-a24b9176.js +0 -422
  450. package/dist/pug-2c94d9b8.js +0 -393
  451. package/dist/python-09265357.js +0 -259
  452. package/dist/qsharp-d730d7fe.js +0 -282
  453. package/dist/r-be193556.js +0 -245
  454. package/dist/razor-e37d6e12.js +0 -512
  455. package/dist/redis-9690c6ac.js +0 -298
  456. package/dist/redshift-6bdcdeaa.js +0 -806
  457. package/dist/restructuredtext-a08c1d20.js +0 -162
  458. package/dist/ruby-2247692b.js +0 -444
  459. package/dist/rust-1dffb4d5.js +0 -337
  460. package/dist/sb-136598e9.js +0 -110
  461. package/dist/scala-b1100fed.js +0 -353
  462. package/dist/scheme-038c8094.js +0 -114
  463. package/dist/scss-700d1b52.js +0 -244
  464. package/dist/shell-86c16e0f.js +0 -224
  465. package/dist/solidity-c05fdf3c.js +0 -1351
  466. package/dist/sophia-cd645d71.js +0 -190
  467. package/dist/sparql-01d9ec9c.js +0 -193
  468. package/dist/sql-4c33df41.js +0 -818
  469. package/dist/st-52cf1408.js +0 -414
  470. package/dist/swift-13c792ba.js +0 -315
  471. package/dist/systemverilog-0bd8b730.js +0 -556
  472. package/dist/tcl-463d7c75.js +0 -232
  473. package/dist/tsMode-91c2db33.js +0 -811
  474. package/dist/twig-0d98f5ec.js +0 -323
  475. package/dist/typescript-f08b1f7d.js +0 -328
  476. package/dist/vb-3a2b0a51.js +0 -364
  477. package/dist/wgsl-b2ddb3e4.js +0 -420
  478. package/dist/xml-cb271b3b.js +0 -95
  479. package/dist/yaml-f6bdbbce.js +0 -184
@@ -0,0 +1,31 @@
1
+ import React from 'react'
2
+ import notFound from '../Assets/Img/ic-empty-error@2x.png'
3
+ import { useHistory } from 'react-router-dom'
4
+ import { ERROR_EMPTY_SCREEN } from './Constants'
5
+ import GenericEmptyState from './EmptyState/GenericEmptyState'
6
+
7
+ function ErrorScreenNotFound() {
8
+ const {push} = useHistory()
9
+ const redirectToHome = () => {
10
+ push('/app/list')
11
+ }
12
+ const renderGenerateButton = () => {
13
+ return (
14
+ <button className="flex cta h-32" onClick={redirectToHome} data-testid="empty-screen-take-me-home">
15
+ {ERROR_EMPTY_SCREEN.TAKE_BACK_HOME}
16
+ </button>
17
+ )
18
+ }
19
+
20
+ return (
21
+ <GenericEmptyState
22
+ image={notFound}
23
+ title={ERROR_EMPTY_SCREEN.PAGE_NOT_FOUND}
24
+ subTitle={ERROR_EMPTY_SCREEN.PAGE_NOT_EXIST}
25
+ isButtonAvailable={true}
26
+ renderButton={renderGenerateButton}
27
+ />
28
+ )
29
+ }
30
+
31
+ export default ErrorScreenNotFound
@@ -0,0 +1,44 @@
1
+ import React from 'react'
2
+ import { GridProps } from './types'
3
+
4
+ // This is meant to be a reusable component that will provide a grid like dynamic layout where xs is the number of columns out of 12 that the item will take up
5
+ export default function Grid({
6
+ container,
7
+ spacing = 0,
8
+ item,
9
+ xs,
10
+ containerClass = '',
11
+ itemClass = '',
12
+ children,
13
+ ...containerDivProps
14
+ }: GridProps) {
15
+ const containerStyles = container ? { gap: spacing + 'px' } : {}
16
+
17
+ if (item) {
18
+ const getColumnWidth = () => {
19
+ const percentageWidth = (xs / 12) * 100
20
+ // DONT CHANGE IT FROM CALC SINCE CALC CONVERTS TO PX which is needed to handle text overflow
21
+ return `calc(${percentageWidth}%)`
22
+ }
23
+
24
+ const itemStyles = {
25
+ flex: `1 1 ${getColumnWidth()}`,
26
+ }
27
+
28
+ return (
29
+ <div className={`p-0 ${itemClass}`} style={itemStyles} {...containerDivProps}>
30
+ {children}
31
+ </div>
32
+ )
33
+ }
34
+
35
+ return (
36
+ <div
37
+ className={`flex-wrap flexbox ${container ? containerClass : ''}`}
38
+ style={containerStyles}
39
+ {...containerDivProps}
40
+ >
41
+ {children}
42
+ </div>
43
+ )
44
+ }
@@ -0,0 +1,11 @@
1
+ import { HTMLAttributes } from 'react'
2
+
3
+ export interface GridProps extends HTMLAttributes<HTMLDivElement> {
4
+ container?: boolean
5
+ spacing?: number
6
+ item?: boolean
7
+ xs?: number
8
+ containerClass?: string
9
+ itemClass?: string
10
+ children?: React.ReactNode
11
+ }
@@ -0,0 +1,596 @@
1
+ import * as Sentry from '@sentry/browser'
2
+ import moment from 'moment'
3
+ import React, { useCallback, useEffect, useMemo, useRef, useState } from 'react'
4
+ import { useLocation } from 'react-router-dom'
5
+ import { toast } from 'react-toastify'
6
+ import { ERROR_EMPTY_SCREEN, TOKEN_COOKIE_NAME } from './Constants'
7
+ import { ServerErrors } from './ServerError'
8
+ import { toastAccessDenied } from './ToastBody'
9
+ import { AsyncOptions, AsyncState, UseSearchString } from './Types'
10
+ import { JSONPath } from 'jsonpath-plus'
11
+ import * as jsonpatch from 'fast-json-patch'
12
+
13
+ toast.configure({
14
+ autoClose: 3000,
15
+ hideProgressBar: true,
16
+ pauseOnHover: true,
17
+ pauseOnFocusLoss: true,
18
+ closeOnClick: false,
19
+ newestOnTop: true,
20
+ toastClassName: 'devtron-toast',
21
+ bodyClassName: 'devtron-toast__body',
22
+ })
23
+
24
+ export function showError(serverError, showToastOnUnknownError = true, hideAccessError = false) {
25
+ if (serverError instanceof ServerErrors && Array.isArray(serverError.errors)) {
26
+ serverError.errors.map(({ userMessage, internalMessage }) => {
27
+ if (
28
+ serverError.code === 403 &&
29
+ (userMessage === ERROR_EMPTY_SCREEN.UNAUTHORIZED || userMessage === ERROR_EMPTY_SCREEN.FORBIDDEN)
30
+ ) {
31
+ if (!hideAccessError) {
32
+ toastAccessDenied()
33
+ }
34
+ } else {
35
+ toast.error(userMessage || internalMessage)
36
+ }
37
+ })
38
+ } else {
39
+ if (serverError.code !== 403 && serverError.code !== 408) {
40
+ Sentry.captureException(serverError)
41
+ }
42
+
43
+ if (showToastOnUnknownError) {
44
+ if (serverError.message) {
45
+ toast.error(serverError.message)
46
+ } else {
47
+ toast.error('Some Error Occurred')
48
+ }
49
+ }
50
+ }
51
+ }
52
+
53
+ interface ConditionalWrapper<T> {
54
+ condition: boolean
55
+ wrap: (children: T) => T
56
+ children: T
57
+ }
58
+ export const ConditionalWrap: React.FC<ConditionalWrapper<any>> = ({ condition, wrap, children }) =>
59
+ condition ? wrap(children) : <>{children}</>
60
+
61
+ export function sortCallback(key: string, a: any, b: any, isCaseSensitive?: boolean) {
62
+ let x = a[key]
63
+ let y = b[key]
64
+ if (isCaseSensitive) {
65
+ x = x.toLowerCase()
66
+ y = y.toLowerCase()
67
+ }
68
+ if (x < y) {
69
+ return -1
70
+ }
71
+ if (x > y) {
72
+ return 1
73
+ }
74
+ return 0
75
+ }
76
+
77
+ export const stopPropagation = (event): void => {
78
+ event.stopPropagation()
79
+ }
80
+
81
+ export function useThrottledEffect(callback, delay, deps = []) {
82
+ //function will be executed only once in a given time interval.
83
+ const lastRan = useRef(Date.now())
84
+
85
+ useEffect(() => {
86
+ const handler = setTimeout(function () {
87
+ if (Date.now() - lastRan.current >= delay) {
88
+ callback()
89
+ lastRan.current = Date.now()
90
+ }
91
+ }, delay - (Date.now() - lastRan.current))
92
+
93
+ return () => {
94
+ clearTimeout(handler)
95
+ }
96
+ }, [delay, ...deps])
97
+ }
98
+
99
+ const colors = [
100
+ '#FFB900',
101
+ '#D83B01',
102
+ '#B50E0E',
103
+ '#E81123',
104
+ '#B4009E',
105
+ '#5C2D91',
106
+ '#0078D7',
107
+ '#00B4FF',
108
+ '#008272',
109
+ '#107C10',
110
+ ]
111
+
112
+ export function getRandomColor(email: string): string {
113
+ let sum = 0
114
+ for (let i = 0; i < email.length; i++) {
115
+ sum += email.charCodeAt(i)
116
+ }
117
+ return colors[sum % colors.length]
118
+ }
119
+
120
+ export const getAlphabetIcon = (str: string, rootClassName: string = "") => {
121
+ if (!str) return null
122
+ return (
123
+ <span
124
+ className={`${rootClassName} alphabet-icon__initial fs-13 icon-dim-20 flex cn-0 mr-8`}
125
+ style={{ backgroundColor: getRandomColor(str) }}
126
+ >
127
+ {str[0]}
128
+ </span>
129
+ )
130
+ }
131
+
132
+ export const getEmptyArrayOfLength = (length: number) => {
133
+ return Array.from({ length })
134
+ }
135
+
136
+ export function noop(...args): any {}
137
+
138
+ export function not(e) {
139
+ return !e
140
+ }
141
+
142
+ export function useEffectAfterMount(cb, dependencies) {
143
+ const justMounted = React.useRef(true)
144
+ React.useEffect(() => {
145
+ if (!justMounted.current) {
146
+ return cb()
147
+ }
148
+ justMounted.current = false
149
+ }, dependencies)
150
+ }
151
+
152
+ export function getCookie(sKey) {
153
+ if (!sKey) {
154
+ return null
155
+ }
156
+ return (
157
+ document.cookie.replace(
158
+ new RegExp('(?:(?:^|.*;)\\s*' + sKey.replace(/[\-\.\+\*]/g, '\\$&') + '\\s*\\=\\s*([^;]*).*$)|^.*$'),
159
+ '$1',
160
+ ) || null
161
+ )
162
+ }
163
+
164
+ export function getLoginInfo() {
165
+ const argocdToken = getCookie(TOKEN_COOKIE_NAME)
166
+ if (argocdToken) {
167
+ const jwts = argocdToken.split('.')
168
+ try {
169
+ return JSON.parse(atob(jwts[1]))
170
+ } catch (err) {
171
+ console.error('error in setting user ', err)
172
+ return null
173
+ }
174
+ }
175
+ }
176
+
177
+ export function useForm(stateSchema, validationSchema = {}, callback) {
178
+ const [state, setState] = useState(stateSchema)
179
+ const [disable, setDisable] = useState(true)
180
+ const [isDirty, setIsDirty] = useState(false)
181
+
182
+ // Disable button in initial render.
183
+ useEffect(() => {
184
+ setDisable(true)
185
+ }, [])
186
+
187
+ // For every changed in our state this will be fired
188
+ // To be able to disable the button
189
+ useEffect(() => {
190
+ if (isDirty) {
191
+ setDisable(validateState(state))
192
+ }
193
+ }, [state, isDirty])
194
+
195
+ // Used to disable submit button if there's an error in state
196
+ // or the required field in state has no value.
197
+ // Wrapped in useCallback to cached the function to avoid intensive memory leaked
198
+ // in every re-render in component
199
+ const validateState = useCallback(
200
+ (state) => {
201
+ //check errors in all fields
202
+ const hasErrorInState = Object.keys(validationSchema).some((key) => {
203
+ const isInputFieldRequired = validationSchema[key].required
204
+ const stateValue = state[key].value // state value
205
+ const stateError = state[key].error // state error
206
+ return (isInputFieldRequired && !stateValue) || stateError
207
+ })
208
+ return hasErrorInState
209
+ },
210
+ [state, validationSchema],
211
+ )
212
+
213
+ function validateField(name, value): string | string[] {
214
+ if (validationSchema[name].required) {
215
+ if (!value) {
216
+ return 'This is a required field.'
217
+ }
218
+ }
219
+
220
+ function _validateSingleValidator(validator, value) {
221
+ if (value && !validator.regex.test(value)) {
222
+ return false
223
+ }
224
+ return true
225
+ }
226
+
227
+ // single validator
228
+ let _validator = validationSchema[name].validator
229
+ if (_validator && typeof _validator === 'object') {
230
+ if (!_validateSingleValidator(_validator, value)) {
231
+ return _validator.error
232
+ }
233
+ }
234
+
235
+ // multiple validators
236
+ let _validators = validationSchema[name].validators
237
+ if (_validators && typeof _validators === 'object' && Array.isArray(_validators)) {
238
+ let errors = []
239
+ _validators.forEach((_validator) => {
240
+ if (!_validateSingleValidator(_validator, value)) {
241
+ errors.push(_validator.error)
242
+ }
243
+ })
244
+ if (errors.length > 0) {
245
+ return errors
246
+ }
247
+ }
248
+
249
+ return ''
250
+ }
251
+
252
+ const handleOnChange = useCallback(
253
+ (event) => {
254
+ setIsDirty(true)
255
+
256
+ const { name, value } = event.target
257
+ let error = validateField(name, value)
258
+ setState((prevState) => ({
259
+ ...prevState,
260
+ [name]: { value, error },
261
+ }))
262
+ },
263
+ [validationSchema],
264
+ )
265
+
266
+ const handleOnSubmit = (event) => {
267
+ event.preventDefault()
268
+ const newState = Object.keys(validationSchema).reduce((agg, curr) => {
269
+ agg[curr] = { ...state[curr], error: validateField(curr, state[curr].value) }
270
+ return agg
271
+ }, state)
272
+ if (!validateState(newState)) {
273
+ callback(state)
274
+ } else {
275
+ setState({ ...newState })
276
+ }
277
+ }
278
+ return { state, disable, handleOnChange, handleOnSubmit }
279
+ }
280
+
281
+ export function handleUTCTime(ts: string, isRelativeTime = false) {
282
+ let timestamp = ''
283
+ try {
284
+ if (ts && ts.length) {
285
+ let date = moment(ts)
286
+ if (isRelativeTime) timestamp = date.fromNow()
287
+ else timestamp = date.format('ddd DD MMM YYYY HH:mm:ss')
288
+ }
289
+ } catch (error) {
290
+ console.error('Error Parsing Date:', ts)
291
+ }
292
+ return timestamp
293
+ }
294
+
295
+ export function useSearchString(): UseSearchString {
296
+ const location = useLocation()
297
+ const queryParams: URLSearchParams = useMemo(() => {
298
+ const queryParams = new URLSearchParams(location.search)
299
+ return queryParams
300
+ }, [location])
301
+
302
+ // const searchParams={}
303
+ // for (let [key, value] of queryParams.entries()){
304
+ // searchParams[key]=value
305
+ // }
306
+ const searchParams = Array.from(queryParams.entries()).reduce((agg, curr, idx) => {
307
+ agg[curr[0]] = curr[1]
308
+ return agg
309
+ }, {})
310
+
311
+ return { queryParams, searchParams }
312
+ }
313
+
314
+ export const closeOnEscKeyPressed = (e: any, actionClose: () => void) => {
315
+ if (e.keyCode === 27 || e.key === 'Escape') {
316
+ actionClose()
317
+ }
318
+ }
319
+
320
+ const unsecureCopyToClipboard = (str, callback = noop) => {
321
+ const listener = function (ev) {
322
+ ev.preventDefault()
323
+ ev.clipboardData.setData('text/plain', str)
324
+ }
325
+ document.addEventListener('copy', listener)
326
+ document.execCommand('copy')
327
+ document.removeEventListener('copy', listener)
328
+ callback()
329
+ }
330
+
331
+ /**
332
+ * It will copy the passed content to clipboard and invoke the callback function, in case of error it will show the toast message.
333
+ * On HTTP system clipboard is not supported, so it will use the unsecureCopyToClipboard function
334
+ * @param str
335
+ * @param callback
336
+ */
337
+ export function copyToClipboard(str, callback = noop) {
338
+ if (!str) {
339
+ return
340
+ }
341
+
342
+ if (window.isSecureContext && navigator.clipboard) {
343
+ navigator.clipboard
344
+ .writeText(str)
345
+ .then(() => {
346
+ callback()
347
+ })
348
+ .catch(() => {
349
+ toast.error('Failed to copy to clipboard')
350
+ })
351
+ } else {
352
+ unsecureCopyToClipboard(str, callback)
353
+ }
354
+ }
355
+
356
+ export function useAsync<T>(
357
+ func: (...rest) => Promise<T>,
358
+ dependencyArray: any[] = [],
359
+ shouldRun = true,
360
+ options: AsyncOptions = { resetOnChange: true },
361
+ ): [boolean, T, any | null, () => void, React.Dispatch<any>, any[]] {
362
+ const [state, setState] = useState<AsyncState<T>>({
363
+ loading: true,
364
+ result: null,
365
+ error: null,
366
+ dependencies: dependencyArray,
367
+ })
368
+ const mounted = useRef(true)
369
+ const dependencies: any[] = useMemo(() => {
370
+ return [...dependencyArray, shouldRun]
371
+ }, [...dependencyArray, shouldRun])
372
+
373
+ const reload = () => {
374
+ async function call() {
375
+ try {
376
+ setState((state) => ({
377
+ ...state,
378
+ loading: true,
379
+ }))
380
+ const result = await func()
381
+ if (mounted.current)
382
+ setState((state) => ({
383
+ ...state,
384
+ result,
385
+ error: null,
386
+ loading: false,
387
+ }))
388
+ } catch (error: any) {
389
+ if (mounted.current)
390
+ setState((state) => ({
391
+ ...state,
392
+ error,
393
+ loading: false,
394
+ }))
395
+ }
396
+ }
397
+ call()
398
+ }
399
+
400
+ useEffect(() => {
401
+ if (!shouldRun) {
402
+ setState((state) => ({ ...state, loading: false }))
403
+ return
404
+ }
405
+ setState((state) => ({ ...state, dependencies: dependencyArray }))
406
+ reload()
407
+ return () =>
408
+ setState((state) => ({
409
+ ...state,
410
+ loading: false,
411
+ error: null,
412
+ ...(options.resetOnChange ? { result: null } : {}),
413
+ }))
414
+ }, dependencies)
415
+
416
+ useEffect(() => {
417
+ mounted.current = true
418
+ return () => {
419
+ mounted.current = false
420
+ }
421
+ }, [])
422
+
423
+ const setResult = (param) => {
424
+ if (typeof param === 'function') {
425
+ setState((state) => ({ ...state, result: param(state.result) }))
426
+ } else {
427
+ setState((state) => ({ ...state, result: param }))
428
+ }
429
+ }
430
+
431
+ return [state.loading, state.result, state.error, reload, setResult, state.dependencies]
432
+ }
433
+
434
+ export const processDeployedTime = (lastDeployed, isArgoInstalled) => {
435
+ if (lastDeployed) {
436
+ return handleUTCTime(lastDeployed, true)
437
+ } else {
438
+ return isArgoInstalled ? '' : 'Not deployed'
439
+ }
440
+ }
441
+
442
+ /**
443
+ * Appends search parameters to the url as a query string
444
+ *
445
+ * @param url URL to which the search params needs to be added
446
+ * @param params Object for the search parameters
447
+ */
448
+ export const getUrlWithSearchParams = (url: string, params: Record<string | number, any>) => {
449
+ const searchParams = new URLSearchParams()
450
+ Object.keys(params).forEach((key) => {
451
+ if (params[key]) {
452
+ if (Array.isArray(params[key])) {
453
+ params[key].forEach((val) => {
454
+ searchParams.append(key, val)
455
+ })
456
+ } else {
457
+ searchParams.set(key, params[key])
458
+ }
459
+ }
460
+ })
461
+ const queryString = searchParams.toString()
462
+ return url + (queryString ? `?${queryString}` : '')
463
+ }
464
+
465
+ /**
466
+ * Custom exception logger function for logging errors to sentry
467
+ */
468
+ export const logExceptionToSentry = Sentry.captureException.bind(window)
469
+
470
+ export const customStyles = {
471
+ control: (base, state) => ({
472
+ ...base,
473
+ minHeight: '32px',
474
+ boxShadow: 'none',
475
+ border: 'none',
476
+ cursor: 'pointer',
477
+ background: 'transparent',
478
+ }),
479
+ indicatorSeparator: (base, state) => ({
480
+ ...base,
481
+ width: 0,
482
+ }),
483
+ valueContainer: (base, state) => ({
484
+ ...base,
485
+ padding: '0',
486
+ fontSize: '13px',
487
+ fontWeight: '600',
488
+ }),
489
+ dropdownIndicator: (base, state) => ({
490
+ ...base,
491
+ color: 'var(--N400)',
492
+ padding: '0 8px',
493
+ transition: 'all .2s ease',
494
+ transform: state.selectProps.menuIsOpen ? 'rotate(180deg)' : 'rotate(0deg)',
495
+ }),
496
+ }
497
+
498
+ export const getFilteredChartVersions = (charts, selectedChartType) => {
499
+ // Filter chart versions based on selected chart type
500
+ return charts
501
+ .filter((item) => item?.chartType === selectedChartType.value)
502
+ .map((item) => ({
503
+ value: item?.chartVersion,
504
+ label: item?.chartVersion,
505
+ chartRefId: item.chartRefId,
506
+ }))
507
+ }
508
+
509
+ function removeEmptyObjectKeysAndNullValues(obj, originaljsonCopy) {
510
+ // It recursively removes empty object keys and empty array keys
511
+ for (let key in obj) {
512
+ if (Array.isArray(obj[key])) {
513
+ // Check if the array is empty
514
+ if (obj[key].length !== 0) {
515
+ obj[key].forEach((element, index) => {
516
+ if (element === null || (typeof element === 'object' && Object.keys(element).length === 0))
517
+ obj[key].splice(index, 1)
518
+ else removeEmptyObjectKeysAndNullValues(element, originaljsonCopy[key][index])
519
+ })
520
+ }
521
+ if (obj[key].length === 0 && originaljsonCopy[key].length !== 0) {
522
+ delete obj[key]
523
+ }
524
+ } else if (obj[key] && typeof obj[key] === 'object') {
525
+ if (
526
+ removeEmptyObjectKeysAndNullValues(obj[key], originaljsonCopy[key]) &&
527
+ Object.keys(originaljsonCopy[key]).length !== 0
528
+ ) {
529
+ delete obj[key]
530
+ }
531
+ } else if (obj[key] === undefined) {
532
+ delete obj[key]
533
+ }
534
+ }
535
+ return Object.keys(obj).length === 0
536
+ }
537
+
538
+ export function getUnlockedJSON(json, jsonPathArray, removeParentKeysAndEmptyArrays = false) {
539
+ if (!jsonPathArray.length) return { newDocument: json, removedPatches: [] }
540
+
541
+ const jsonCopy = JSON.parse(JSON.stringify(json))
542
+ const originaljsonCopy = JSON.parse(JSON.stringify(json))
543
+ let removedPatches = []
544
+ let patches = jsonPathArray.flatMap((jsonPath) => {
545
+ const pathsToRemove = JSONPath({ path: jsonPath, json: jsonCopy, resultType: 'all' })
546
+ //reversing patches to handle correct array index deletion
547
+ pathsToRemove.reverse()
548
+ return pathsToRemove.map((result) => {
549
+ //storing removed patches to have functionality of undo
550
+ removedPatches.push({ op: 'add', path: result.pointer, value: result.value })
551
+ return { op: 'remove', path: result.pointer }
552
+ })
553
+ })
554
+ let newDocument = jsonpatch.applyPatch(jsonCopy, patches).newDocument
555
+ if (removeParentKeysAndEmptyArrays) removeEmptyObjectKeysAndNullValues(newDocument, originaljsonCopy)
556
+ return { newDocument, removedPatches: removedPatches.reverse() }
557
+ }
558
+
559
+ export function getLockedJSON(json, jsonPathArray: string[]) {
560
+ const jsonCopy = JSON.parse(JSON.stringify(json))
561
+ let resultJson = {}
562
+ jsonPathArray.forEach((jsonPath) => {
563
+ const elements = JSONPath({ path: jsonPath, json: jsonCopy, resultType: 'all' })
564
+ elements.forEach((element) => {
565
+ const pathArray: string[] = JSONPath.toPathArray(element.path)
566
+ const lastPath = pathArray.pop()
567
+ let current = resultJson
568
+ for (let i = 0; i < pathArray.length; i++) {
569
+ let key = isNaN(Number(pathArray[i])) ? pathArray[i] : parseInt(pathArray[i])
570
+ if (!current[key]) {
571
+ current[key] = isNaN(Number(pathArray[i + 1]??lastPath)) ? {} : []
572
+ }
573
+ current = current[key]
574
+ }
575
+ let key = isNaN(Number(lastPath)) ? lastPath : parseInt(lastPath)
576
+ current[key] = element.value
577
+ })
578
+ })
579
+ return resultJson['$']
580
+ }
581
+
582
+ /**
583
+ * Returns a debounced variant of the function
584
+ */
585
+ export const debounce = (func, timeout = 500) => {
586
+ let timer
587
+
588
+ return function (this, ...args) {
589
+ const context = this
590
+ if (timer) clearTimeout(timer)
591
+ timer = setTimeout(() => {
592
+ timer = null
593
+ func.apply(context, args)
594
+ }, timeout)
595
+ }
596
+ }
@@ -0,0 +1,15 @@
1
+ import React, { useEffect } from 'react'
2
+
3
+ export const useClickOutside = (ref: any, callback: () => void) => {
4
+ useEffect(() => {
5
+ const handleClickOutside = (e: any) => {
6
+ if (ref?.current && !ref.current.contains(e.target)) {
7
+ callback()
8
+ }
9
+ }
10
+ document.addEventListener('click', handleClickOutside)
11
+ return () => {
12
+ document.removeEventListener('click', handleClickOutside)
13
+ }
14
+ }, [ref, callback])
15
+ }