@devtron-labs/devtron-fe-common-lib 0.0.62-beta-6 → 0.0.62-beta-8

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 (410) hide show
  1. package/.eslintignore +94 -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 +89 -95
  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 +23 -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 +6 -6
  76. package/dist/Common/Hooks/useUrlFilters/useUrlFilters.d.ts +32 -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 +5 -16
  120. package/dist/Common/RadioGroup.d.ts +10 -8
  121. package/dist/Common/RadioGroupItem.d.ts +4 -0
  122. package/dist/Common/Reload.d.ts +3 -3
  123. package/dist/Common/ResizableTextarea.d.ts +3 -3
  124. package/dist/Common/SearchBar/SearchBar.component.d.ts +39 -37
  125. package/dist/Common/SearchBar/index.d.ts +2 -2
  126. package/dist/Common/SearchBar/types.d.ts +35 -35
  127. package/dist/Common/Security/ScanVulnerabilitiesTable.d.ts +4 -3
  128. package/dist/Common/ServerError.d.ts +15 -15
  129. package/dist/Common/SortableTableHeaderCell/SortableTableHeaderCell.d.ts +18 -17
  130. package/dist/Common/SortableTableHeaderCell/index.d.ts +2 -2
  131. package/dist/Common/SortableTableHeaderCell/types.d.ts +25 -25
  132. package/dist/Common/TippyCustomized.d.ts +4 -2
  133. package/dist/Common/ToastBody.d.ts +23 -23
  134. package/dist/Common/Toggle/Toggle.d.ts +14 -12
  135. package/dist/Common/Types.d.ts +728 -703
  136. package/dist/Common/index.d.ts +52 -51
  137. package/dist/Pages/GlobalConfigurations/Authorization/constants.d.ts +15 -15
  138. package/dist/Pages/GlobalConfigurations/Authorization/index.d.ts +1 -1
  139. package/dist/Pages/GlobalConfigurations/index.d.ts +1 -1
  140. package/dist/Pages/index.d.ts +1 -1
  141. package/dist/index.d.ts +2 -8
  142. package/dist/index.js +29119 -170
  143. package/package.json +23 -34
  144. package/rollup.config.js +31 -0
  145. package/src/Assets/Icon/ic-add.svg +3 -0
  146. package/src/Assets/Icon/ic-appstatus-cancelled.svg +6 -0
  147. package/src/Assets/Icon/ic-arrow-counter-clockwise.svg +5 -0
  148. package/src/Assets/Icon/ic-arrow-up-down.svg +3 -0
  149. package/src/Assets/Icon/ic-check.svg +5 -0
  150. package/src/Assets/Icon/ic-chevron-down.svg +5 -0
  151. package/src/Assets/Icon/ic-copy.svg +3 -0
  152. package/src/Assets/Icon/ic-cross.svg +3 -0
  153. package/src/Assets/Icon/ic-drag.svg +8 -0
  154. package/src/Assets/Icon/ic-enter.svg +3 -0
  155. package/src/Assets/Icon/ic-error-cross.svg +8 -0
  156. package/src/Assets/Icon/ic-error-exclamation.svg +6 -0
  157. package/src/Assets/Icon/ic-error-medium.svg +6 -0
  158. package/src/Assets/Icon/ic-help-outline.svg +3 -0
  159. package/src/Assets/Icon/ic-help.svg +3 -0
  160. package/src/Assets/Icon/ic-info-filled.svg +7 -0
  161. package/src/Assets/Icon/ic-info-outlined.svg +13 -0
  162. package/src/Assets/Icon/ic-minus.svg +3 -0
  163. package/src/Assets/Icon/ic-pencil.svg +3 -0
  164. package/src/Assets/Icon/ic-progressing.svg +6 -0
  165. package/src/Assets/Icon/ic-rotate-devtron.svg +103 -0
  166. package/src/Assets/Icon/ic-search.svg +6 -0
  167. package/src/Assets/Icon/ic-sort-arrow-down.svg +3 -0
  168. package/src/Assets/Icon/ic-warning.svg +7 -0
  169. package/src/Assets/Icon/inject-tag.svg +5 -0
  170. package/src/Assets/Img/app-not-deployed.png +0 -0
  171. package/src/Assets/Img/delete-medium.svg +15 -0
  172. package/src/Assets/Img/ic-empty-error@2x.png +0 -0
  173. package/src/Assets/Img/ic-loading-failure.png +0 -0
  174. package/src/Assets/Img/ic-not-authorized.svg +62 -0
  175. package/src/Common/AddCDButton/AddCDButton.tsx +68 -0
  176. package/src/Common/AddCDButton/index.ts +2 -0
  177. package/src/Common/AddCDButton/types.ts +38 -0
  178. package/src/Common/AddCDButton/utils.tsx +35 -0
  179. package/src/Common/Api.ts +251 -0
  180. package/src/Common/AppStatus/AppStatus.tsx +64 -0
  181. package/src/Common/AppStatus/constants.ts +53 -0
  182. package/src/Common/AppStatus/index.ts +1 -0
  183. package/src/Common/AppStatus/types.ts +12 -0
  184. package/src/Common/AppStatus/utils.ts +14 -0
  185. package/src/Common/BreadCrumb/BreadCrumb.tsx +105 -0
  186. package/src/Common/BreadCrumb/BreadcrumbStore.tsx +25 -0
  187. package/src/Common/BreadCrumb/Types.ts +30 -0
  188. package/src/Common/CIPipeline.Types.ts +277 -0
  189. package/src/Common/ChartVersionAndTypeSelector.tsx +78 -0
  190. package/src/Common/Checkbox.tsx +36 -0
  191. package/src/Common/ClipboardButton/ClipboardButton.tsx +61 -0
  192. package/src/Common/ClipboardButton/__tests__/ClipboardButton.test.tsx +43 -0
  193. package/src/Common/ClipboardButton/types.ts +7 -0
  194. package/src/Common/Common.service.ts +315 -0
  195. package/src/Common/Constants.ts +270 -0
  196. package/src/Common/CustomInput/CustomInput.tsx +134 -0
  197. package/src/Common/CustomInput/Types.ts +32 -0
  198. package/src/Common/CustomInput/index.ts +2 -0
  199. package/src/Common/CustomTagSelector/PropagateTagInfo.tsx +46 -0
  200. package/src/Common/CustomTagSelector/ResizableTagTextArea.tsx +84 -0
  201. package/src/Common/CustomTagSelector/TagDetails.tsx +76 -0
  202. package/src/Common/CustomTagSelector/TagLabelSelect.tsx +61 -0
  203. package/src/Common/CustomTagSelector/TagLabelValueSelector.tsx +198 -0
  204. package/src/Common/CustomTagSelector/TagSelector.utils.ts +71 -0
  205. package/src/Common/CustomTagSelector/Types.ts +72 -0
  206. package/src/Common/CustomTagSelector/ValidationRules.ts +58 -0
  207. package/src/Common/CustomTagSelector/index.ts +6 -0
  208. package/src/Common/DebouncedSearch/DebouncedSearch.tsx +78 -0
  209. package/src/Common/DebouncedSearch/Types.ts +13 -0
  210. package/src/Common/DebouncedSearch/Utils.ts +19 -0
  211. package/src/Common/DebouncedSearch/__tests__/DebouncedSearch.test.tsx +61 -0
  212. package/src/Common/DeleteComponentModal/DeleteComponent.tsx +95 -0
  213. package/src/Common/DeleteComponentModal/types.ts +15 -0
  214. package/src/Common/DevtronProgressing/DevtronProgressing.tsx +11 -0
  215. package/src/Common/DevtronProgressing/index.ts +1 -0
  216. package/src/Common/DevtronProgressing/types.ts +4 -0
  217. package/src/Common/Dialogs/ConfirmationDialog.tsx +34 -0
  218. package/src/Common/Dialogs/DeleteDialog.tsx +69 -0
  219. package/src/Common/Dialogs/DialogForm.tsx +86 -0
  220. package/src/Common/Dialogs/ForceDeleteDialog.tsx +19 -0
  221. package/src/Common/Dialogs/Types.ts +47 -0
  222. package/src/Common/Dialogs/index.ts +4 -0
  223. package/src/Common/DraggableWrapper/DraggableButton.tsx +14 -0
  224. package/src/Common/DraggableWrapper/DraggableWrapper.tsx +116 -0
  225. package/src/Common/DraggableWrapper/index.ts +3 -0
  226. package/src/Common/DraggableWrapper/types.ts +27 -0
  227. package/src/Common/Drawer/Drawer.scss +40 -0
  228. package/src/Common/Drawer/Drawer.tsx +49 -0
  229. package/src/Common/EmptyState/EmptyState.tsx +42 -0
  230. package/src/Common/EmptyState/GenericEmptyState.tsx +81 -0
  231. package/src/Common/EmptyState/emptyState.scss +74 -0
  232. package/src/Common/Error.tsx +61 -0
  233. package/src/Common/ErrorScreenNotFound.tsx +31 -0
  234. package/src/Common/Grid/Grid.tsx +44 -0
  235. package/src/Common/Grid/types.ts +11 -0
  236. package/src/Common/Helper.tsx +590 -0
  237. package/src/Common/Hooks/UseClickOutside/UseClickOutside.tsx +15 -0
  238. package/src/Common/Hooks/UseSuperAdmin/UseSuperAdmin.tsx +24 -0
  239. package/src/Common/Hooks/UseSuperAdmin/types.ts +3 -0
  240. package/src/Common/Hooks/UseWindowSize/UseWindowSize.tsx +31 -0
  241. package/src/Common/Hooks/index.ts +4 -0
  242. package/src/Common/Hooks/useUrlFilters/constants.ts +9 -0
  243. package/src/Common/Hooks/useUrlFilters/index.ts +2 -0
  244. package/src/Common/Hooks/useUrlFilters/types.ts +6 -0
  245. package/src/Common/Hooks/useUrlFilters/useUrlFilters.ts +121 -0
  246. package/src/Common/ImageTags.Types.ts +44 -0
  247. package/src/Common/ImageTags.tsx +586 -0
  248. package/src/Common/InfoColorBar/InfoColourbar.tsx +80 -0
  249. package/src/Common/InfoColorBar/infoColourBar.scss +28 -0
  250. package/src/Common/Modals/Modal.tsx +68 -0
  251. package/src/Common/Modals/OpaqueModal.tsx +36 -0
  252. package/src/Common/Modals/VisibleModal.tsx +55 -0
  253. package/src/Common/Modals/VisibleModal2.tsx +35 -0
  254. package/src/Common/MultiSelectCustomization.tsx +148 -0
  255. package/src/Common/Pagination/PageSizeSelector.tsx +78 -0
  256. package/src/Common/Pagination/Pagination.tsx +127 -0
  257. package/src/Common/Pagination/constants.ts +6 -0
  258. package/src/Common/Pagination/index.tsx +3 -0
  259. package/src/Common/Pagination/pagination.scss +123 -0
  260. package/src/Common/Pagination/types.ts +55 -0
  261. package/src/Common/Pagination/utils.tsx +24 -0
  262. package/src/Common/Policy.Types.ts +63 -0
  263. package/src/Common/PopupMenu.tsx +199 -0
  264. package/src/Common/Progressing.tsx +53 -0
  265. package/src/Common/RJSF/Form.tsx +29 -0
  266. package/src/Common/RJSF/common/FieldRow.tsx +35 -0
  267. package/src/Common/RJSF/common/types.ts +9 -0
  268. package/src/Common/RJSF/config.ts +37 -0
  269. package/src/Common/RJSF/constants.ts +10 -0
  270. package/src/Common/RJSF/index.ts +3 -0
  271. package/src/Common/RJSF/rjsfForm.scss +18 -0
  272. package/src/Common/RJSF/templates/ArrayFieldItemTemplate.tsx +31 -0
  273. package/src/Common/RJSF/templates/ArrayFieldTemplate.tsx +78 -0
  274. package/src/Common/RJSF/templates/BaseInput.tsx +16 -0
  275. package/src/Common/RJSF/templates/ButtonTemplates/AddButton.tsx +18 -0
  276. package/src/Common/RJSF/templates/ButtonTemplates/RemoveButton.tsx +10 -0
  277. package/src/Common/RJSF/templates/ButtonTemplates/SubmitButton.tsx +18 -0
  278. package/src/Common/RJSF/templates/ButtonTemplates/index.ts +3 -0
  279. package/src/Common/RJSF/templates/Description.tsx +12 -0
  280. package/src/Common/RJSF/templates/Field.tsx +30 -0
  281. package/src/Common/RJSF/templates/FieldErrorTemplate.tsx +25 -0
  282. package/src/Common/RJSF/templates/ObjectFieldTemplate.tsx +105 -0
  283. package/src/Common/RJSF/templates/TitleField.tsx +9 -0
  284. package/src/Common/RJSF/templates/WrapIfAdditionalTemplate.tsx +51 -0
  285. package/src/Common/RJSF/templates/index.ts +10 -0
  286. package/src/Common/RJSF/types.ts +4 -0
  287. package/src/Common/RJSF/utils.ts +123 -0
  288. package/src/Common/RJSF/widgets/Checkbox.tsx +44 -0
  289. package/src/Common/RJSF/widgets/Select.tsx +77 -0
  290. package/src/Common/RJSF/widgets/index.ts +2 -0
  291. package/src/Common/RadioGroup/RadioGroup.tsx +87 -0
  292. package/src/Common/RadioGroup/radioGroup.scss +46 -0
  293. package/src/Common/RadioGroup.tsx +21 -0
  294. package/src/Common/RadioGroupItem.tsx +28 -0
  295. package/src/Common/Reload.tsx +23 -0
  296. package/src/Common/ResizableTextarea.tsx +73 -0
  297. package/src/Common/SearchBar/SearchBar.component.tsx +131 -0
  298. package/src/Common/SearchBar/index.ts +2 -0
  299. package/src/Common/SearchBar/searchBar.scss +31 -0
  300. package/src/Common/SearchBar/types.ts +34 -0
  301. package/src/Common/Security/ScanVulnerabilitiesTable.tsx +55 -0
  302. package/src/Common/Security/scanVulnerabilities.css +69 -0
  303. package/src/Common/ServerError.ts +31 -0
  304. package/src/Common/SortableTableHeaderCell/SortableTableHeaderCell.tsx +44 -0
  305. package/src/Common/SortableTableHeaderCell/index.ts +2 -0
  306. package/src/Common/SortableTableHeaderCell/types.ts +26 -0
  307. package/src/Common/TippyCustomized.tsx +172 -0
  308. package/src/Common/ToastBody.tsx +62 -0
  309. package/src/Common/Toggle/Toggle.scss +78 -0
  310. package/src/Common/Toggle/Toggle.tsx +50 -0
  311. package/src/Common/Types.ts +804 -0
  312. package/src/Common/index.ts +52 -0
  313. package/src/Pages/GlobalConfigurations/Authorization/constants.ts +16 -0
  314. package/src/Pages/GlobalConfigurations/Authorization/index.ts +1 -0
  315. package/src/Pages/GlobalConfigurations/index.ts +1 -0
  316. package/src/Pages/index.ts +1 -0
  317. package/src/custom.d.ts +13 -0
  318. package/src/index.ts +2 -0
  319. package/tsconfig.json +40 -0
  320. package/dist/Common/CodeEditor/CodeEditor.d.ts +0 -47
  321. package/dist/Common/Select/Select.d.ts +0 -4
  322. package/dist/Common/Select/types.d.ts +0 -29
  323. package/dist/abap-9f67f57a.js +0 -1314
  324. package/dist/apex-ff62e532.js +0 -315
  325. package/dist/assets/editor.worker-d26000ef.js +0 -9
  326. package/dist/assets/index.css +0 -1
  327. package/dist/assets/json.worker-f23a4654.js +0 -40
  328. package/dist/assets/yaml.worker-35ea3f9a.js +0 -467
  329. package/dist/azcli-31e64a7f.js +0 -74
  330. package/dist/bat-0ffe897e.js +0 -95
  331. package/dist/bicep-3414a2b1.js +0 -108
  332. package/dist/cameligo-df1f3f25.js +0 -168
  333. package/dist/clojure-65b0f010.js +0 -754
  334. package/dist/coffee-437f0fba.js +0 -228
  335. package/dist/cpp-66843dd5.js +0 -390
  336. package/dist/csharp-621d9a49.js +0 -320
  337. package/dist/csp-de0d5244.js +0 -57
  338. package/dist/css-7cd5ed4c.js +0 -186
  339. package/dist/cssMode-e979455c.js +0 -1446
  340. package/dist/cypher-70ad96fe.js +0 -262
  341. package/dist/dart-33ae3739.js +0 -270
  342. package/dist/dockerfile-f2274a50.js +0 -132
  343. package/dist/ecl-3b8294a3.js +0 -454
  344. package/dist/elixir-b9dcc73a.js +0 -489
  345. package/dist/flow9-bdde8316.js +0 -141
  346. package/dist/freemarker2-37d4516e.js +0 -643
  347. package/dist/fsharp-eac2e449.js +0 -210
  348. package/dist/go-d12ed8d4.js +0 -208
  349. package/dist/graphql-c7356b69.js +0 -141
  350. package/dist/handlebars-c9144fac.js +0 -391
  351. package/dist/hcl-e883a0d4.js +0 -177
  352. package/dist/html-c998a93e.js +0 -281
  353. package/dist/htmlMode-1556ac31.js +0 -1456
  354. package/dist/index-13520b68.js +0 -126191
  355. package/dist/ini-425ab711.js +0 -68
  356. package/dist/java-2bc0fd68.js +0 -221
  357. package/dist/javascript-0a67afed.js +0 -75
  358. package/dist/jsonMode-b7e37155.js +0 -1867
  359. package/dist/julia-1c932615.js +0 -496
  360. package/dist/kotlin-1ab839c8.js +0 -245
  361. package/dist/less-6fe856f5.js +0 -168
  362. package/dist/lexon-4955ac52.js +0 -151
  363. package/dist/liquid-a8549491.js +0 -238
  364. package/dist/lua-3cca0047.js +0 -157
  365. package/dist/m3-132e9cb6.js +0 -210
  366. package/dist/markdown-ea59a0c1.js +0 -202
  367. package/dist/mips-19811f4b.js +0 -194
  368. package/dist/msdax-69954a10.js +0 -377
  369. package/dist/mysql-82088e5d.js +0 -876
  370. package/dist/objective-c-1976eccc.js +0 -188
  371. package/dist/pascal-8ef177cb.js +0 -245
  372. package/dist/pascaligo-bc517b9e.js +0 -158
  373. package/dist/perl-8b93582c.js +0 -599
  374. package/dist/pgsql-00c11a6d.js +0 -847
  375. package/dist/php-4c8c276f.js +0 -471
  376. package/dist/pla-e9b4ffb1.js +0 -131
  377. package/dist/postiats-2071af8c.js +0 -544
  378. package/dist/powerquery-8e388ceb.js +0 -890
  379. package/dist/powershell-e35db398.js +0 -233
  380. package/dist/protobuf-a24b9176.js +0 -422
  381. package/dist/pug-2c94d9b8.js +0 -393
  382. package/dist/python-115292d4.js +0 -259
  383. package/dist/qsharp-d730d7fe.js +0 -282
  384. package/dist/r-be193556.js +0 -245
  385. package/dist/razor-3f9e914c.js +0 -512
  386. package/dist/redis-9690c6ac.js +0 -298
  387. package/dist/redshift-6bdcdeaa.js +0 -806
  388. package/dist/restructuredtext-a08c1d20.js +0 -162
  389. package/dist/ruby-2247692b.js +0 -444
  390. package/dist/rust-1dffb4d5.js +0 -337
  391. package/dist/sb-136598e9.js +0 -110
  392. package/dist/scala-b1100fed.js +0 -353
  393. package/dist/scheme-038c8094.js +0 -114
  394. package/dist/scss-700d1b52.js +0 -244
  395. package/dist/shell-86c16e0f.js +0 -224
  396. package/dist/solidity-c05fdf3c.js +0 -1351
  397. package/dist/sophia-cd645d71.js +0 -190
  398. package/dist/sparql-01d9ec9c.js +0 -193
  399. package/dist/sql-4c33df41.js +0 -818
  400. package/dist/st-52cf1408.js +0 -414
  401. package/dist/swift-13c792ba.js +0 -315
  402. package/dist/systemverilog-0bd8b730.js +0 -556
  403. package/dist/tcl-463d7c75.js +0 -232
  404. package/dist/tsMode-54392af6.js +0 -811
  405. package/dist/twig-0d98f5ec.js +0 -323
  406. package/dist/typescript-c4502abb.js +0 -328
  407. package/dist/vb-3a2b0a51.js +0 -364
  408. package/dist/wgsl-b2ddb3e4.js +0 -420
  409. package/dist/xml-6de02e6d.js +0 -95
  410. package/dist/yaml-922ca025.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,590 @@
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
+ searchParams.append(key, params[key])
453
+ }
454
+ })
455
+ const queryString = searchParams.toString()
456
+ return url + (queryString ? `?${queryString}` : '')
457
+ }
458
+
459
+ /**
460
+ * Custom exception logger function for logging errors to sentry
461
+ */
462
+ export const logExceptionToSentry = Sentry.captureException.bind(window)
463
+
464
+ export const customStyles = {
465
+ control: (base, state) => ({
466
+ ...base,
467
+ minHeight: '32px',
468
+ boxShadow: 'none',
469
+ border: 'none',
470
+ cursor: 'pointer',
471
+ background: 'transparent',
472
+ }),
473
+ indicatorSeparator: (base, state) => ({
474
+ ...base,
475
+ width: 0,
476
+ }),
477
+ valueContainer: (base, state) => ({
478
+ ...base,
479
+ padding: '0',
480
+ fontSize: '13px',
481
+ fontWeight: '600',
482
+ }),
483
+ dropdownIndicator: (base, state) => ({
484
+ ...base,
485
+ color: 'var(--N400)',
486
+ padding: '0 8px',
487
+ transition: 'all .2s ease',
488
+ transform: state.selectProps.menuIsOpen ? 'rotate(180deg)' : 'rotate(0deg)',
489
+ }),
490
+ }
491
+
492
+ export const getFilteredChartVersions = (charts, selectedChartType) => {
493
+ // Filter chart versions based on selected chart type
494
+ return charts
495
+ .filter((item) => item?.chartType === selectedChartType.value)
496
+ .map((item) => ({
497
+ value: item?.chartVersion,
498
+ label: item?.chartVersion,
499
+ chartRefId: item.chartRefId,
500
+ }))
501
+ }
502
+
503
+ function removeEmptyObjectKeysAndNullValues(obj, originaljsonCopy) {
504
+ // It recursively removes empty object keys and empty array keys
505
+ for (let key in obj) {
506
+ if (Array.isArray(obj[key])) {
507
+ // Check if the array is empty
508
+ if (obj[key].length !== 0) {
509
+ obj[key].forEach((element, index) => {
510
+ if (element === null || (typeof element === 'object' && Object.keys(element).length === 0))
511
+ obj[key].splice(index, 1)
512
+ else removeEmptyObjectKeysAndNullValues(element, originaljsonCopy[key][index])
513
+ })
514
+ }
515
+ if (obj[key].length === 0 && originaljsonCopy[key].length !== 0) {
516
+ delete obj[key]
517
+ }
518
+ } else if (obj[key] && typeof obj[key] === 'object') {
519
+ if (
520
+ removeEmptyObjectKeysAndNullValues(obj[key], originaljsonCopy[key]) &&
521
+ Object.keys(originaljsonCopy[key]).length !== 0
522
+ ) {
523
+ delete obj[key]
524
+ }
525
+ } else if (obj[key] === undefined) {
526
+ delete obj[key]
527
+ }
528
+ }
529
+ return Object.keys(obj).length === 0
530
+ }
531
+
532
+ export function getUnlockedJSON(json, jsonPathArray, removeParentKeysAndEmptyArrays = false) {
533
+ if (!jsonPathArray.length) return { newDocument: json, removedPatches: [] }
534
+
535
+ const jsonCopy = JSON.parse(JSON.stringify(json))
536
+ const originaljsonCopy = JSON.parse(JSON.stringify(json))
537
+ let removedPatches = []
538
+ let patches = jsonPathArray.flatMap((jsonPath) => {
539
+ const pathsToRemove = JSONPath({ path: jsonPath, json: jsonCopy, resultType: 'all' })
540
+ //reversing patches to handle correct array index deletion
541
+ pathsToRemove.reverse()
542
+ return pathsToRemove.map((result) => {
543
+ //storing removed patches to have functionality of undo
544
+ removedPatches.push({ op: 'add', path: result.pointer, value: result.value })
545
+ return { op: 'remove', path: result.pointer }
546
+ })
547
+ })
548
+ let newDocument = jsonpatch.applyPatch(jsonCopy, patches).newDocument
549
+ if (removeParentKeysAndEmptyArrays) removeEmptyObjectKeysAndNullValues(newDocument, originaljsonCopy)
550
+ return { newDocument, removedPatches: removedPatches.reverse() }
551
+ }
552
+
553
+ export function getLockedJSON(json, jsonPathArray: string[]) {
554
+ const jsonCopy = JSON.parse(JSON.stringify(json))
555
+ let resultJson = {}
556
+ jsonPathArray.forEach((jsonPath) => {
557
+ const elements = JSONPath({ path: jsonPath, json: jsonCopy, resultType: 'all' })
558
+ elements.forEach((element) => {
559
+ const pathArray: string[] = JSONPath.toPathArray(element.path)
560
+ const lastPath = pathArray.pop()
561
+ let current = resultJson
562
+ for (let i = 0; i < pathArray.length; i++) {
563
+ let key = isNaN(Number(pathArray[i])) ? pathArray[i] : parseInt(pathArray[i])
564
+ if (!current[key]) {
565
+ current[key] = isNaN(Number(pathArray[i + 1]??lastPath)) ? {} : []
566
+ }
567
+ current = current[key]
568
+ }
569
+ let key = isNaN(Number(lastPath)) ? lastPath : parseInt(lastPath)
570
+ current[key] = element.value
571
+ })
572
+ })
573
+ return resultJson['$']
574
+ }
575
+
576
+ /**
577
+ * Returns a debounced variant of the function
578
+ */
579
+ export const debounce = (func, timeout = 500) => {
580
+ let timer
581
+
582
+ return function (this, ...args) {
583
+ const context = this
584
+ if (timer) clearTimeout(timer)
585
+ timer = setTimeout(() => {
586
+ timer = null
587
+ func.apply(context, args)
588
+ }, timeout)
589
+ }
590
+ }
@@ -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
+ }