@rancher/shell 3.0.5-rc.3 → 3.0.5-rc.6

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 (424) hide show
  1. package/assets/data/aws-regions.json +1 -0
  2. package/assets/images/icons/document.svg +3 -0
  3. package/assets/images/key.svg +17 -0
  4. package/assets/images/vendor/cognito.svg +1 -0
  5. package/assets/styles/app.scss +1 -0
  6. package/assets/styles/base/_basic.scss +10 -0
  7. package/assets/styles/base/_spacing.scss +29 -0
  8. package/assets/styles/global/_form.scss +1 -1
  9. package/assets/styles/global/_labeled-input.scss +1 -1
  10. package/assets/styles/global/_layout.scss +1 -1
  11. package/assets/styles/themes/_dark.scss +28 -0
  12. package/assets/styles/themes/_light.scss +68 -0
  13. package/assets/styles/vendor/vue-select.scss +1 -1
  14. package/assets/translations/en-us.yaml +721 -83
  15. package/assets/translations/zh-hans.yaml +11 -9
  16. package/cloud-credential/gcp.vue +9 -1
  17. package/components/AppModal.vue +2 -0
  18. package/components/Certificates.vue +5 -0
  19. package/components/CodeMirror.vue +1 -1
  20. package/components/ConfigMapSettings/Settings.vue +377 -0
  21. package/components/ConfigMapSettings/index.vue +354 -0
  22. package/components/CruResource.vue +1 -2
  23. package/components/DetailText.vue +61 -11
  24. package/components/Drawer/Chrome.vue +116 -0
  25. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
  26. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
  27. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
  28. package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
  29. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +82 -0
  30. package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
  31. package/components/Drawer/ResourceDetailDrawer/composables.ts +50 -0
  32. package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
  33. package/components/Drawer/ResourceDetailDrawer/index.vue +110 -0
  34. package/components/FilterPanel.vue +156 -0
  35. package/components/{fleet/ForceDirectedTreeChart/index.vue → ForceDirectedTreeChart.vue} +47 -41
  36. package/components/GrowlManager.vue +16 -15
  37. package/components/IconOrSvg.vue +19 -35
  38. package/components/KeyValueView.vue +1 -1
  39. package/components/LocaleSelector.vue +9 -1
  40. package/components/ProgressBarMulti.vue +1 -0
  41. package/components/PromptModal.vue +6 -1
  42. package/components/PromptRemove.vue +5 -1
  43. package/components/RelatedResources.vue +4 -12
  44. package/components/Resource/Detail/Additional.vue +46 -0
  45. package/components/Resource/Detail/Card/PodsCard/Bubble.vue +13 -0
  46. package/components/Resource/Detail/Card/PodsCard/composable.ts +30 -0
  47. package/components/Resource/Detail/Card/PodsCard/index.vue +118 -0
  48. package/components/Resource/Detail/Card/ResourceUsageCard/composable.ts +51 -0
  49. package/components/Resource/Detail/Card/ResourceUsageCard/index.vue +79 -0
  50. package/components/Resource/Detail/Card/Scaler.vue +89 -0
  51. package/components/Resource/Detail/Card/StateCard/composables.ts +112 -0
  52. package/components/Resource/Detail/Card/StateCard/index.vue +39 -0
  53. package/components/Resource/Detail/Card/VerticalGap.vue +11 -0
  54. package/components/Resource/Detail/Card/__tests__/Card.test.ts +36 -0
  55. package/components/Resource/Detail/Card/__tests__/PodsCard.test.ts +84 -0
  56. package/components/Resource/Detail/Card/__tests__/ResourceUsageCard.test.ts +72 -0
  57. package/components/Resource/Detail/Card/__tests__/Scaler.test.ts +87 -0
  58. package/components/Resource/Detail/Card/__tests__/StateCard.test.ts +53 -0
  59. package/components/Resource/Detail/Card/__tests__/VerticalGap.test.ts +14 -0
  60. package/components/Resource/Detail/Card/__tests__/index.test.ts +36 -0
  61. package/components/Resource/Detail/Card/index.vue +56 -0
  62. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +19 -0
  63. package/components/Resource/Detail/Metadata/Annotations/composable.ts +12 -0
  64. package/components/Resource/Detail/Metadata/Annotations/index.vue +31 -0
  65. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
  66. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/index.test.ts +103 -0
  67. package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +64 -0
  68. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +298 -0
  69. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +133 -0
  70. package/components/Resource/Detail/Metadata/KeyValue.vue +138 -0
  71. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +18 -0
  72. package/components/Resource/Detail/Metadata/Labels/composable.ts +12 -0
  73. package/components/Resource/Detail/Metadata/Labels/index.vue +31 -0
  74. package/components/Resource/Detail/Metadata/Rectangle.vue +32 -0
  75. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +107 -0
  76. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +24 -0
  77. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
  78. package/components/Resource/Detail/Metadata/__tests__/index.test.ts +91 -0
  79. package/components/Resource/Detail/Metadata/composables.ts +78 -0
  80. package/components/Resource/Detail/Metadata/index.vue +73 -0
  81. package/components/Resource/Detail/Page.vue +37 -0
  82. package/components/Resource/Detail/PercentageBar.vue +40 -0
  83. package/components/Resource/Detail/ResourceRow.vue +138 -0
  84. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
  85. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
  86. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
  87. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
  88. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
  89. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
  90. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
  91. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
  92. package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
  93. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
  94. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
  95. package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
  96. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
  97. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
  98. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
  99. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
  100. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
  101. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
  102. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
  103. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
  104. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
  105. package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
  106. package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
  107. package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
  108. package/components/Resource/Detail/SpacedRow.vue +14 -0
  109. package/components/Resource/Detail/StatusBar.vue +59 -0
  110. package/components/Resource/Detail/StatusRow.vue +61 -0
  111. package/components/Resource/Detail/TitleBar/Title.vue +14 -0
  112. package/components/Resource/Detail/TitleBar/Top.vue +14 -0
  113. package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +17 -0
  114. package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +17 -0
  115. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
  116. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +142 -0
  117. package/components/Resource/Detail/TitleBar/composables.ts +44 -0
  118. package/components/Resource/Detail/TitleBar/index.vue +196 -0
  119. package/components/Resource/Detail/Top/index.vue +34 -0
  120. package/components/Resource/Detail/__tests__/Page.test.ts +32 -0
  121. package/components/Resource/Detail/composables.ts +45 -0
  122. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
  123. package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
  124. package/components/ResourceDetail/Masthead/index.vue +65 -0
  125. package/components/ResourceDetail/Masthead/latest.vue +44 -0
  126. package/components/ResourceDetail/__tests__/index.test.ts +135 -0
  127. package/components/ResourceDetail/index.vue +73 -557
  128. package/components/ResourceDetail/legacy.vue +562 -0
  129. package/components/ResourceList/Masthead.vue +6 -0
  130. package/components/ResourceTable.vue +41 -7
  131. package/components/ResourceYaml.vue +14 -1
  132. package/components/SlideInPanelManager.vue +117 -10
  133. package/components/SortableTable/index.vue +13 -2
  134. package/components/SortableTable/selection.js +21 -8
  135. package/components/StateDot/index.vue +28 -0
  136. package/components/StatusBadge.vue +6 -4
  137. package/components/SubtleLink.vue +25 -0
  138. package/components/Tabbed/index.vue +11 -15
  139. package/components/Wizard.vue +16 -3
  140. package/components/YamlEditor.vue +1 -1
  141. package/components/__tests__/ConfigMapSettings.test.ts +376 -0
  142. package/components/__tests__/FilterPanel.test.ts +81 -0
  143. package/components/__tests__/GrowlManager.test.ts +0 -25
  144. package/components/auth/AuthBanner.vue +2 -3
  145. package/components/auth/RoleDetailEdit.vue +45 -3
  146. package/components/auth/login/ldap.vue +1 -1
  147. package/components/auth/login/oidc.vue +6 -1
  148. package/components/fleet/FleetApplications.vue +174 -0
  149. package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
  150. package/components/fleet/FleetClusterTargets/index.vue +455 -0
  151. package/components/fleet/FleetClusters.vue +25 -6
  152. package/components/fleet/FleetGitRepoPaths.vue +476 -0
  153. package/components/fleet/FleetHelmOps.vue +123 -0
  154. package/components/fleet/FleetIntro.vue +58 -28
  155. package/components/fleet/FleetNoWorkspaces.vue +5 -1
  156. package/components/fleet/FleetOCIStorageSecret.vue +171 -0
  157. package/components/fleet/FleetRepos.vue +37 -80
  158. package/components/fleet/FleetResources.vue +53 -26
  159. package/components/fleet/FleetSummary.vue +26 -51
  160. package/components/fleet/FleetValuesFrom.vue +295 -0
  161. package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
  162. package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
  163. package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +213 -0
  164. package/components/fleet/__tests__/FleetSummary.test.ts +39 -39
  165. package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
  166. package/components/fleet/dashboard/Empty.vue +73 -0
  167. package/components/fleet/dashboard/ResourceCard.vue +184 -0
  168. package/components/fleet/dashboard/ResourceCardSummary.vue +195 -0
  169. package/components/fleet/dashboard/ResourceDetails.vue +194 -0
  170. package/components/fleet/dashboard/ResourcePanel.vue +383 -0
  171. package/components/form/ArrayList.vue +19 -2
  172. package/components/form/ChangePassword.vue +3 -1
  173. package/components/form/Footer.vue +10 -4
  174. package/components/form/KeyValue.vue +81 -43
  175. package/components/form/LabeledSelect.vue +56 -16
  176. package/components/form/Labels.vue +90 -17
  177. package/components/form/MatchExpressions.vue +46 -5
  178. package/components/form/NameNsDescription.vue +1 -1
  179. package/components/form/ResourceSelector.vue +1 -0
  180. package/components/form/ResourceTabs/index.vue +5 -0
  181. package/components/form/SecretSelector.vue +9 -2
  182. package/components/form/Select.vue +57 -19
  183. package/components/form/SimpleSecretSelector.vue +17 -4
  184. package/components/form/Taints.vue +21 -2
  185. package/components/form/UnitInput.vue +8 -0
  186. package/components/form/ValueFromResource.vue +31 -19
  187. package/components/form/__tests__/LabeledSelect.test.ts +8 -4
  188. package/components/form/__tests__/Labels.test.ts +360 -0
  189. package/components/form/__tests__/MatchExpressions.test.ts +16 -13
  190. package/components/form/__tests__/Select.test.ts +5 -2
  191. package/components/formatter/FleetApplicationClustersReady.vue +77 -0
  192. package/components/formatter/FleetApplicationSource.vue +71 -0
  193. package/components/formatter/FleetSummaryGraph.vue +7 -0
  194. package/components/formatter/WorkloadHealthScale.vue +1 -1
  195. package/components/google/AccountAccess.vue +211 -0
  196. package/components/google/types/gcp.d.ts +136 -0
  197. package/components/google/types/index.d.ts +101 -0
  198. package/components/google/util/__mocks__/gcp.ts +465 -0
  199. package/components/google/util/formatter.ts +82 -0
  200. package/components/google/util/gcp.ts +134 -0
  201. package/components/google/util/index.d.ts +11 -0
  202. package/components/nav/Favorite.vue +1 -1
  203. package/components/nav/Group.vue +70 -47
  204. package/components/nav/Header.vue +13 -8
  205. package/components/nav/NamespaceFilter.vue +13 -1
  206. package/components/nav/NotificationCenter/Notification.vue +510 -0
  207. package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
  208. package/components/nav/NotificationCenter/index.vue +148 -0
  209. package/components/nav/TopLevelMenu.helper.ts +55 -34
  210. package/components/nav/TopLevelMenu.vue +11 -0
  211. package/components/nav/Type.vue +4 -1
  212. package/composables/drawer.ts +26 -0
  213. package/composables/resources.test.ts +63 -0
  214. package/composables/resources.ts +38 -0
  215. package/composables/useI18n.ts +12 -11
  216. package/composables/useIsNewDetailPageEnabled.ts +17 -0
  217. package/config/labels-annotations.js +20 -11
  218. package/config/product/auth.js +17 -1
  219. package/config/product/{cis.js → compliance.js} +23 -26
  220. package/config/product/explorer.js +5 -1
  221. package/config/product/fleet.js +77 -17
  222. package/config/product/settings.js +22 -11
  223. package/config/query-params.js +6 -1
  224. package/config/roles.ts +2 -1
  225. package/config/router/navigation-guards/authentication.js +51 -2
  226. package/config/router/routes.js +45 -31
  227. package/config/secret.ts +15 -0
  228. package/config/settings.ts +24 -5
  229. package/config/store.js +2 -0
  230. package/config/system-namespaces.js +1 -1
  231. package/config/table-headers.js +53 -23
  232. package/config/types.js +17 -6
  233. package/core/plugin-helpers.ts +3 -2
  234. package/core/plugin.ts +32 -7
  235. package/core/types.ts +18 -1
  236. package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
  237. package/detail/fleet.cattle.io.cluster.vue +28 -15
  238. package/detail/fleet.cattle.io.gitrepo.vue +10 -1
  239. package/detail/fleet.cattle.io.helmop.vue +157 -0
  240. package/detail/management.cattle.io.fleetworkspace.vue +18 -27
  241. package/detail/management.cattle.io.oidcclient.vue +369 -0
  242. package/detail/node.vue +2 -2
  243. package/detail/pod.vue +2 -2
  244. package/detail/service.vue +10 -1
  245. package/detail/workload/index.vue +8 -2
  246. package/dialog/ExtensionCatalogUninstallDialog.vue +7 -4
  247. package/dialog/GenericPrompt.vue +1 -1
  248. package/dialog/HelmOpForceUpdateDialog.vue +132 -0
  249. package/dialog/ImportDialog.vue +8 -8
  250. package/dialog/OidcClientSecretDialog.vue +117 -0
  251. package/dialog/RedeployWorkloadDialog.vue +164 -0
  252. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
  253. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +60 -68
  254. package/edit/auth/oidc.vue +159 -93
  255. package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
  256. package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
  257. package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
  258. package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
  259. package/edit/configmap.vue +4 -1
  260. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  261. package/edit/fleet.cattle.io.gitrepo.vue +70 -255
  262. package/edit/fleet.cattle.io.helmop.vue +772 -0
  263. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  264. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  265. package/edit/logging-flow/index.vue +1 -0
  266. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  267. package/edit/management.cattle.io.fleetworkspace.vue +44 -10
  268. package/edit/management.cattle.io.oidcclient.vue +162 -0
  269. package/edit/management.cattle.io.project.vue +4 -1
  270. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  271. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
  272. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  273. package/edit/monitoring.coreos.com.receiver/auth.vue +30 -30
  274. package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
  275. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  276. package/edit/monitoring.coreos.com.route.vue +1 -0
  277. package/edit/namespace.vue +1 -0
  278. package/edit/networking.istio.io.destinationrule/index.vue +4 -1
  279. package/edit/networking.k8s.io.ingress/index.vue +4 -1
  280. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +7 -2
  281. package/edit/networking.k8s.io.networkpolicy/index.vue +6 -2
  282. package/edit/node.vue +1 -0
  283. package/edit/persistentvolume/index.vue +4 -1
  284. package/edit/provisioning.cattle.io.cluster/rke2.vue +418 -382
  285. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +27 -27
  286. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
  287. package/edit/resources.cattle.io.restore.vue +1 -1
  288. package/edit/secret/index.vue +1 -0
  289. package/edit/service.vue +4 -1
  290. package/edit/serviceaccount.vue +4 -1
  291. package/edit/storage.k8s.io.storageclass/index.vue +4 -1
  292. package/edit/workload/index.vue +5 -0
  293. package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
  294. package/list/fleet.cattle.io.gitrepo.vue +1 -1
  295. package/list/fleet.cattle.io.helmop.vue +108 -0
  296. package/list/management.cattle.io.oidcclient.vue +108 -0
  297. package/list/namespace.vue +5 -2
  298. package/list/node.vue +2 -0
  299. package/machine-config/amazonec2.vue +3 -24
  300. package/machine-config/components/GCEImage.vue +374 -0
  301. package/machine-config/google.vue +617 -0
  302. package/mixins/__tests__/brand.spec.ts +170 -0
  303. package/mixins/auth-config.js +8 -1
  304. package/mixins/brand.js +16 -17
  305. package/mixins/create-edit-view/index.js +5 -0
  306. package/mixins/preset.js +100 -0
  307. package/mixins/resource-fetch-api-pagination.js +18 -0
  308. package/mixins/resource-fetch.js +1 -1
  309. package/mixins/resource-table-watch.js +45 -0
  310. package/mixins/vue-select-overrides.js +1 -0
  311. package/models/__tests__/chart.test.ts +273 -0
  312. package/models/__tests__/fleet.cattle.io.gitrepo.test.ts +1 -1
  313. package/models/chart.js +144 -2
  314. package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
  315. package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
  316. package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
  317. package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
  318. package/models/fleet-application.js +314 -0
  319. package/models/fleet.cattle.io.bundle.js +9 -8
  320. package/models/fleet.cattle.io.cluster.js +11 -0
  321. package/models/fleet.cattle.io.gitrepo.js +41 -365
  322. package/models/fleet.cattle.io.helmop.js +198 -0
  323. package/models/management.cattle.io.authconfig.js +1 -0
  324. package/models/management.cattle.io.fleetworkspace.js +14 -1
  325. package/models/management.cattle.io.oidcclient.js +18 -0
  326. package/models/management.cattle.io.registration.js +3 -0
  327. package/models/provisioning.cattle.io.cluster.js +5 -5
  328. package/models/service.js +4 -0
  329. package/models/workload.js +19 -18
  330. package/package.json +2 -1
  331. package/pages/about.vue +4 -58
  332. package/pages/auth/login.vue +1 -1
  333. package/pages/auth/verify.vue +13 -1
  334. package/pages/c/_cluster/apps/charts/AddRepoLink.vue +36 -0
  335. package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +80 -0
  336. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +54 -0
  337. package/pages/c/_cluster/apps/charts/StatusLabel.vue +33 -0
  338. package/pages/c/_cluster/apps/charts/index.vue +487 -465
  339. package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
  340. package/pages/c/_cluster/explorer/EventsTable.vue +1 -1
  341. package/pages/c/_cluster/explorer/index.vue +3 -3
  342. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
  343. package/pages/c/_cluster/fleet/__tests__/index.test.ts +426 -0
  344. package/pages/c/_cluster/fleet/application/_resource/_id.vue +14 -0
  345. package/pages/c/_cluster/fleet/application/_resource/create.vue +14 -0
  346. package/pages/c/_cluster/fleet/application/create.vue +341 -0
  347. package/pages/c/_cluster/fleet/application/index.vue +139 -0
  348. package/pages/c/_cluster/fleet/graph/config.js +277 -0
  349. package/pages/c/_cluster/fleet/index.vue +809 -329
  350. package/pages/c/_cluster/fleet/settings/index.vue +229 -0
  351. package/pages/c/_cluster/longhorn/index.vue +5 -2
  352. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
  353. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
  354. package/pages/explorer/resource/detail/configmap.vue +42 -0
  355. package/pages/explorer/resource/detail/secret.vue +50 -0
  356. package/pages/home.vue +9 -55
  357. package/pages/support/index.vue +4 -6
  358. package/plugins/dashboard-store/actions.js +50 -14
  359. package/plugins/dashboard-store/getters.js +38 -21
  360. package/plugins/dashboard-store/mutations.js +51 -7
  361. package/plugins/dashboard-store/resource-class.js +30 -4
  362. package/plugins/steve/__tests__/subscribe.spec.ts +66 -1
  363. package/plugins/steve/actions.js +3 -0
  364. package/plugins/steve/steve-pagination-utils.ts +17 -8
  365. package/plugins/steve/subscribe.js +235 -43
  366. package/rancher-components/BadgeState/BadgeState.vue +3 -1
  367. package/rancher-components/Banner/Banner.vue +13 -0
  368. package/rancher-components/Form/Checkbox/Checkbox.vue +11 -6
  369. package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
  370. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
  371. package/rancher-components/RcItemCard/RcItemCard.test.ts +189 -0
  372. package/rancher-components/RcItemCard/RcItemCard.vue +430 -0
  373. package/rancher-components/RcItemCard/RcItemCardAction.vue +24 -0
  374. package/rancher-components/RcItemCard/index.ts +2 -0
  375. package/store/auth.js +3 -0
  376. package/store/catalog.js +85 -25
  377. package/store/growl.js +97 -8
  378. package/store/index.js +39 -14
  379. package/store/notifications.ts +426 -0
  380. package/store/prefs.js +0 -1
  381. package/store/slideInPanel.ts +6 -0
  382. package/store/type-map.js +19 -15
  383. package/store/uiplugins.ts +15 -1
  384. package/types/fleet.d.ts +59 -0
  385. package/types/notifications/index.ts +74 -0
  386. package/types/resources/settings.d.ts +19 -1
  387. package/types/shell/index.d.ts +388 -307
  388. package/types/store/dashboard-store.types.ts +33 -3
  389. package/types/store/pagination.types.ts +6 -1
  390. package/types/store/subscribe.types.ts +50 -0
  391. package/utils/__tests__/fleet.test.ts +148 -0
  392. package/utils/__tests__/object.test.ts +54 -1
  393. package/utils/__tests__/string.test.ts +273 -1
  394. package/utils/__tests__/time.test.ts +31 -0
  395. package/utils/auth.js +41 -5
  396. package/utils/crypto/encryption.ts +103 -0
  397. package/utils/cspAdaptor.ts +51 -0
  398. package/utils/fleet-types.ts +0 -0
  399. package/utils/fleet.ts +190 -2
  400. package/utils/object.js +36 -0
  401. package/utils/pagination-utils.ts +27 -2
  402. package/utils/pagination-wrapper.ts +132 -50
  403. package/utils/release-notes.ts +48 -0
  404. package/utils/selector-typed.ts +7 -2
  405. package/utils/settings.ts +4 -1
  406. package/utils/string.js +24 -0
  407. package/utils/style.ts +39 -0
  408. package/utils/{time.js → time.ts} +25 -6
  409. package/utils/uiplugins.ts +22 -0
  410. package/utils/validators/formRules/__tests__/index.test.ts +36 -3
  411. package/utils/validators/formRules/index.ts +13 -3
  412. package/utils/window.js +11 -7
  413. package/components/__tests__/ApplicationCard.test.ts +0 -27
  414. package/components/cards/ApplicationCard.vue +0 -145
  415. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +0 -17
  416. package/config/product/legacy.js +0 -62
  417. package/config/secret.js +0 -14
  418. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +0 -249
  419. package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
  420. package/pages/c/_cluster/legacy/project/_page.vue +0 -57
  421. package/pages/c/_cluster/legacy/project/index.vue +0 -32
  422. package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
  423. /package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +0 -0
  424. /package/{components/form/SSHKnownHosts → dialog}/__tests__/KnownHostsEditDialog.test.ts +0 -0
package/utils/auth.js CHANGED
@@ -8,6 +8,9 @@ import { allHash } from '@shell/utils/promise';
8
8
  import { getProductFromRoute, getResourceFromRoute } from '@shell/utils/router';
9
9
  import { NAME as EXPLORER } from '@shell/config/product/explorer';
10
10
  import { findBy } from '@shell/utils/array';
11
+ import { onExtensionsReady } from '@shell/utils/uiplugins';
12
+
13
+ export const AUTH_BROADCAST_CHANNEL_NAME = 'rancher-auth-test-callback';
11
14
 
12
15
  export function openAuthPopup(url, provider) {
13
16
  const popup = new Popup(() => {
@@ -16,19 +19,46 @@ export function openAuthPopup(url, provider) {
16
19
  popup.reject = reject;
17
20
  });
18
21
 
22
+ const bc = new BroadcastChannel(AUTH_BROADCAST_CHANNEL_NAME);
23
+
19
24
  window.onAuthTest = (error, code) => {
20
25
  if (error) {
21
26
  popup.reject(error);
22
27
  }
23
28
 
29
+ bc.close();
24
30
  delete window.onAuthTest;
25
31
  popup.resolve(code);
26
32
  };
27
- }, () => {
28
- popup.reject(new Error('Access was not authorized'));
33
+
34
+ // Broadcast message listener for when the window can not invoke a method on the opener
35
+ bc.onmessage = (msgEvent) => {
36
+ try {
37
+ const obj = JSON.parse(msgEvent.data);
38
+ const { error, code } = obj;
39
+
40
+ window.onAuthTest(error, code);
41
+ } catch (e) {
42
+ window.onAuthTest(new Error(`Access was not authorized (invalid callback metadata)`));
43
+
44
+ console.error('Unable to process message from auth broadcast channel', e); // eslint-disable-line no-console
45
+ }
46
+ };
47
+ }, (e) => {
48
+ let detail = '';
49
+
50
+ // If there was an error and it has a message, add that to the message we send back via the promise
51
+ if (e?.type === 'error' && e?.message) {
52
+ detail = ` (${ e.message })`;
53
+ }
54
+
55
+ popup.reject(new Error(`Access was not authorized${ detail }`));
29
56
  });
30
57
 
31
- popup.open(url, 'auth-test', popupWindowOptions());
58
+ // So far, only Amazon Cognito sets the origin policy that prevents us from detecting when the popup is closed
59
+ const doNotPollForClosure = provider === 'cognito';
60
+
61
+ popup.open(url, 'auth-test', popupWindowOptions(), doNotPollForClosure);
32
62
 
33
63
  return popup.promise;
34
64
  }
@@ -304,9 +334,15 @@ export async function tryInitialSetup(store, password = 'admin') {
304
334
  /**
305
335
  * Record in our state management that we're indeed logged in
306
336
  */
307
- export function isLoggedIn(store, me) {
337
+ export async function isLoggedIn(store, userData) {
308
338
  store.commit('auth/hasAuth', true);
309
- store.commit('auth/loggedInAs', me.id);
339
+ store.commit('auth/loggedInAs', userData.id);
340
+
341
+ // Init the notification center now that we know who the user is
342
+ await store.dispatch('notifications/init', userData);
343
+
344
+ // Let the extensions know that the user is logged in
345
+ await onExtensionsReady(store);
310
346
  }
311
347
 
312
348
  /**
@@ -0,0 +1,103 @@
1
+ /**
2
+ * Helpers for string encryption and decryption
3
+ */
4
+
5
+ // We just use a static salt
6
+ const SALT = new TextEncoder().encode('rancher-dashboard');
7
+
8
+ /**
9
+ * Type for the result of encryption
10
+ */
11
+ export type EncryptedString = {
12
+ cipher: string;
13
+ iv: string;
14
+ };
15
+
16
+ /**
17
+ * Generate an encryption key from a password
18
+ *
19
+ * @param password Password to use for the key
20
+ * @returns Encryption key
21
+ */
22
+ export async function deriveKey(password: string): Promise<CryptoKey> {
23
+ const passwordBytes = stringToBytes(password);
24
+
25
+ const initialKey = await crypto.subtle.importKey(
26
+ 'raw',
27
+ passwordBytes,
28
+ { name: 'PBKDF2' },
29
+ false,
30
+ ['deriveKey']
31
+ );
32
+
33
+ return await crypto.subtle.deriveKey(
34
+ {
35
+ name: 'PBKDF2',
36
+ salt: SALT,
37
+ iterations: 100000,
38
+ hash: 'SHA-256'
39
+ },
40
+ initialKey,
41
+ {
42
+ name: 'AES-GCM',
43
+ length: 256
44
+ },
45
+ false,
46
+ [
47
+ 'encrypt',
48
+ 'decrypt'
49
+ ]
50
+ );
51
+ }
52
+
53
+ /**
54
+ * Encrypt data
55
+ *
56
+ * @param content String to be encrypted
57
+ * @param key Encryption key
58
+ * @returns Encrypted data
59
+ */
60
+ export async function encrypt(content: string, key: CryptoKey): Promise<EncryptedString> {
61
+ const iv = crypto.getRandomValues(new Uint8Array(12));
62
+ const contentBytes = stringToBytes(content);
63
+ const cipher = new Uint8Array(
64
+ await crypto.subtle.encrypt({ name: 'AES-GCM', iv }, key, contentBytes)
65
+ );
66
+
67
+ return {
68
+ iv: bytesToBase64(iv),
69
+ cipher: bytesToBase64(cipher),
70
+ };
71
+ }
72
+
73
+ /**
74
+ * Decrypt encrypted data
75
+ * @param encryptedData Encrypted data with `cipher` and `iv` field
76
+ * @param key Key to use for decryption
77
+ * @returns Decrypted value as a string
78
+ */
79
+ export async function decrypt(encryptedData: EncryptedString, key: CryptoKey): Promise<string> {
80
+ const iv = base64ToBytes(encryptedData.iv);
81
+ const cipher = base64ToBytes(encryptedData.cipher);
82
+ const contentBytes = new Uint8Array(
83
+ await crypto.subtle.decrypt({ name: 'AES-GCM', iv }, key, cipher)
84
+ );
85
+
86
+ return bytesToString(contentBytes);
87
+ }
88
+
89
+ function bytesToString(bytes: any): string {
90
+ return new TextDecoder().decode(bytes);
91
+ }
92
+
93
+ function stringToBytes(str: string): Uint8Array {
94
+ return new TextEncoder().encode(str);
95
+ }
96
+
97
+ function bytesToBase64(arr: Uint8Array) {
98
+ return btoa(Array.from(arr, (b: number) => String.fromCharCode(b)).join(''));
99
+ }
100
+
101
+ function base64ToBytes(base64: string): Uint8Array {
102
+ return Uint8Array.from(atob(base64), (c) => c.charCodeAt(0));
103
+ }
@@ -0,0 +1,51 @@
1
+ // For testing these could be changed to something like...
2
+
3
+ import { CATALOG } from '@shell/config/types';
4
+ import { FilterArgs, PaginationFilterField, PaginationParamFilter } from '@shell/types/store/pagination.types';
5
+ import { VuexStore } from '@shell/types/store/vuex';
6
+
7
+ const CSP_ADAPTER_APPS = ['rancher-csp-adapter', 'rancher-csp-billing-adapter'];
8
+ // For testing above line could be replaced with below line...
9
+ // const cspAdaptorApp = ['rancher-webhooka', 'rancher-webhook'];
10
+
11
+ /**
12
+ * Helpers in order to
13
+ */
14
+ class CspAdapterUtils {
15
+ static canPagination($store: VuexStore): boolean {
16
+ return $store.getters[`management/paginationEnabled`]({ id: CATALOG.APP, context: 'branding' });
17
+ }
18
+
19
+ static fetchCspAdaptorApp($store: VuexStore): Promise<any> {
20
+ // For the login page, the schemas won't be loaded - we don't need the apps in this case
21
+ if ($store.getters['management/canList'](CATALOG.APP)) {
22
+ if (CspAdapterUtils.canPagination($store)) {
23
+ // Restrict the amount of apps we need to fetch
24
+ return $store.dispatch('management/findPage', {
25
+ type: CATALOG.APP,
26
+ opt: { // Of type ActionFindPageArgs
27
+ pagination: new FilterArgs({
28
+ filters: PaginationParamFilter.createMultipleFields(CSP_ADAPTER_APPS.map(
29
+ (t) => new PaginationFilterField({
30
+ field: 'metadata.name',
31
+ value: t,
32
+ })
33
+ )),
34
+ })
35
+ }
36
+ });
37
+ }
38
+
39
+ return $store.dispatch('management/findAll', { type: CATALOG.APP });
40
+ }
41
+
42
+ return Promise.resolve([]);
43
+ }
44
+
45
+ static hasCspAdapter({ $store, apps }: { $store: VuexStore, apps: any[]}): Object {
46
+ // In theory this should contain the filtered apps when pagination is on, and all apps when off. Keep filtering though in both cases just in case
47
+ return apps?.find((a) => CSP_ADAPTER_APPS.includes(a.metadata?.name));
48
+ }
49
+ }
50
+
51
+ export default CspAdapterUtils;
File without changes
package/utils/fleet.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { isEmpty, isEqual } from 'lodash';
1
2
  import {
2
3
  BundleDeploymentResource,
3
4
  BundleResourceKey,
@@ -5,9 +6,11 @@ import {
5
6
  BundleDeploymentStatus,
6
7
  Condition,
7
8
  } from '@shell/types/resources/fleet';
8
- import { mapStateToEnum, STATES_ENUM } from '@shell/plugins/dashboard-store/resource-class';
9
- import { FLEET as FLEET_LABELS } from '@shell/config/labels-annotations';
9
+ import { mapStateToEnum, STATES_ENUM, STATES } from '@shell/plugins/dashboard-store/resource-class';
10
+ import { FLEET as FLEET_LABELS, CAPI } from '@shell/config/labels-annotations';
10
11
  import { NAME as EXPLORER_NAME } from '@shell/config/product/explorer';
12
+ import { FleetDashboardState, FleetResourceState, Target, TargetMode } from '@shell/types/fleet';
13
+ import { FLEET, VIRTUAL_HARVESTER_PROVIDER } from '@shell/config/types';
11
14
 
12
15
  interface Resource extends BundleDeploymentResource {
13
16
  state: string,
@@ -29,7 +32,139 @@ function conditionIsTrue(conditions: Condition[] | undefined, type: string): boo
29
32
  return !!conditions.find((c) => c.type === type && c.status.toLowerCase() === 'true');
30
33
  }
31
34
 
35
+ class Application {
36
+ excludeHarvesterRule = {
37
+ clusterSelector: {
38
+ matchExpressions: [{
39
+ key: CAPI.PROVIDER,
40
+ operator: 'NotIn',
41
+ values: [
42
+ VIRTUAL_HARVESTER_PROVIDER
43
+ ],
44
+ }],
45
+ },
46
+ };
47
+
48
+ getTargetMode(targets: Target[], namespace: string): TargetMode {
49
+ if (namespace === 'fleet-local') {
50
+ return 'local';
51
+ }
52
+
53
+ if (!targets.length) {
54
+ return 'none';
55
+ }
56
+
57
+ let mode: TargetMode = 'all';
58
+
59
+ for (const target of targets) {
60
+ const {
61
+ clusterName,
62
+ clusterSelector,
63
+ clusterGroup,
64
+ clusterGroupSelector,
65
+ } = target;
66
+
67
+ if (clusterGroup || clusterGroupSelector) {
68
+ return 'advanced';
69
+ }
70
+
71
+ if (clusterName) {
72
+ mode = 'clusters';
73
+ }
74
+
75
+ if (!isEmpty(clusterSelector)) {
76
+ mode = 'clusters';
77
+ }
78
+ }
79
+
80
+ const normalized = [...targets].map((target) => {
81
+ delete target.name;
82
+
83
+ return target;
84
+ });
85
+
86
+ // Check if targets contains only harvester rule after name normalizing
87
+ if (isEqual(normalized, [this.excludeHarvesterRule])) {
88
+ mode = 'all';
89
+ }
90
+
91
+ return mode;
92
+ }
93
+ }
94
+
32
95
  class Fleet {
96
+ resourceIcons = {
97
+ [FLEET.GIT_REPO]: 'icon icon-github',
98
+ [FLEET.HELM_OP]: 'icon icon-helm',
99
+ };
100
+
101
+ dashboardIcons = {
102
+ [FLEET.GIT_REPO]: 'icon icon-git',
103
+ [FLEET.HELM_OP]: 'icon icon-helm',
104
+ };
105
+
106
+ dashboardStates: FleetDashboardState[] = [
107
+ {
108
+ index: 0,
109
+ id: 'error',
110
+ label: 'Error',
111
+ color: '#F64747',
112
+ icon: 'icon icon-error',
113
+ stateBackground: 'bg-error'
114
+ },
115
+ {
116
+ index: 1,
117
+ id: 'warning',
118
+ label: 'Warning',
119
+ color: '#DAC342',
120
+ icon: 'icon icon-warning',
121
+ stateBackground: 'bg-warning'
122
+ },
123
+ {
124
+ index: 2,
125
+ id: 'success',
126
+ label: 'Active',
127
+ color: '#5D995D',
128
+ icon: 'icon icon-checkmark',
129
+ stateBackground: 'bg-success'
130
+ },
131
+ {
132
+ index: 3,
133
+ id: 'info',
134
+ label: 'Pending',
135
+ color: '#3d98d3',
136
+ icon: 'icon icon-warning',
137
+ stateBackground: 'bg-info'
138
+ },
139
+ ];
140
+
141
+ Application = new Application();
142
+
143
+ GIT_HTTPS_REGEX = /^https?:\/\/github\.com\/(.*?)(\.git)?\/*$/;
144
+ GIT_SSH_REGEX = /^git@github\.com:.*\.git$/;
145
+ HTTP_REGEX = /^(https?:\/\/[^\s]+)$/;
146
+ OCI_REGEX = /^oci:\/\//;
147
+
148
+ quacksLikeAHash(str: string) {
149
+ if (str.match(/^[a-f0-9]{40,}$/i)) {
150
+ return true;
151
+ }
152
+
153
+ return false;
154
+ }
155
+
156
+ parseSSHUrl(url: string) {
157
+ const parts = (url || '').split(':');
158
+
159
+ const sshUserAndHost = parts[0];
160
+ const repoPath = parts[1]?.replace('.git', '');
161
+
162
+ return {
163
+ sshUserAndHost,
164
+ repoPath
165
+ };
166
+ }
167
+
33
168
  resourceId(r: BundleResourceKey): string {
34
169
  return r.namespace ? `${ r.namespace }/${ r.name }` : r.name;
35
170
  }
@@ -126,6 +261,59 @@ class Fleet {
126
261
  return STATES_ENUM.READY;
127
262
  }
128
263
  }
264
+
265
+ getResourcesDefaultState(labelGetter: (key: string, args: any, fallback: any) => Record<string, any>, stateKey: string): Record<string, FleetResourceState> {
266
+ return [
267
+ STATES_ENUM.READY,
268
+ STATES_ENUM.NOT_READY,
269
+ STATES_ENUM.WAIT_APPLIED,
270
+ STATES_ENUM.MODIFIED,
271
+ STATES_ENUM.MISSING,
272
+ STATES_ENUM.ORPHANED,
273
+ STATES_ENUM.UNKNOWN,
274
+ ].reduce((acc: Record<string, any>, state) => {
275
+ acc[state] = {
276
+ count: 0,
277
+ color: STATES[state].color,
278
+ label: labelGetter(`${ stateKey }.${ state }`, null, STATES[state].label ),
279
+ status: state
280
+ };
281
+
282
+ return acc;
283
+ }, {});
284
+ }
285
+
286
+ getBundlesDefaultState(labelGetter: (key: string, args: any, fallback: any) => Record<string, any>, stateKey: string): Record<string, FleetResourceState> {
287
+ return [
288
+ STATES_ENUM.READY,
289
+ STATES_ENUM.INFO,
290
+ STATES_ENUM.WARNING,
291
+ STATES_ENUM.NOT_READY,
292
+ STATES_ENUM.ERROR,
293
+ STATES_ENUM.ERR_APPLIED,
294
+ STATES_ENUM.WAIT_APPLIED,
295
+ STATES_ENUM.UNKNOWN,
296
+ ].reduce((acc: Record<string, any>, state) => {
297
+ acc[state] = {
298
+ count: 0,
299
+ color: STATES[state].color,
300
+ label: labelGetter(`${ stateKey }.${ state }`, null, STATES[state].label ),
301
+ status: state
302
+ };
303
+
304
+ return acc;
305
+ }, {});
306
+ }
307
+
308
+ getDashboardStateId(resource: { stateColor: string }): string {
309
+ return resource?.stateColor?.replace('text-', '') || 'warning';
310
+ }
311
+
312
+ getDashboardState(resource: { stateColor: string }): FleetDashboardState | {} {
313
+ const stateId = this.getDashboardStateId(resource);
314
+
315
+ return this.dashboardStates.find(({ id }) => stateId === id) || {};
316
+ }
129
317
  }
130
318
 
131
319
  const instance = new Fleet();
package/utils/object.js CHANGED
@@ -527,3 +527,39 @@ export function mergeWithReplace(
527
527
  }
528
528
  });
529
529
  }
530
+ /**
531
+ * Converts Object into a string of a format "key1, val1, key2, val2"
532
+ * @param {Object} input - KV object to convert
533
+ * @returns string
534
+ */
535
+ export const convertKVToString = (input) => {
536
+ if (!input || typeof input !== 'object') return '';
537
+
538
+ return Object.entries(input)
539
+ .flatMap(([key, value]) => [key, String(value)])
540
+ .join(',');
541
+ };
542
+
543
+ /**
544
+ * Converts kv string into object
545
+ * @param {string} input - a string of a format "key1, val1, key2, val2"
546
+ * @returns
547
+ */
548
+ export const convertStringToKV = ( input ) => {
549
+ if (!input?.trim()) return {};
550
+
551
+ const parts = input.split(',').map((part) => part.trim());
552
+ const result = {};
553
+
554
+ for (let i = 0; i < parts.length - 1; i += 2) {
555
+ const key = parts[i];
556
+ const value = parts[i + 1];
557
+
558
+ // Accept empty keys but ignore undefined values
559
+ if (typeof key === 'string') {
560
+ result[key] = value ?? '';
561
+ }
562
+ }
563
+
564
+ return result;
565
+ };
@@ -1,4 +1,4 @@
1
- import { PaginationSettings, PaginationSettingsStore } from '@shell/types/resources/settings';
1
+ import { PaginationFeature, PaginationSettings, PaginationSettingsStore } from '@shell/types/resources/settings';
2
2
  import {
3
3
  NAMESPACE_FILTER_ALL_USER as ALL_USER,
4
4
  NAMESPACE_FILTER_ALL as ALL,
@@ -23,7 +23,7 @@ class PaginationUtils {
23
23
  /**
24
24
  * In places where we're using paginated features but not in a page... this is what the max results should be
25
25
  */
26
- readonly defaultPageSize = 10000;
26
+ readonly defaultPageSize = 100000;
27
27
  /**
28
28
  * When a ns filter isn't one or more projects/namespaces... what are the valid values?
29
29
  *
@@ -128,6 +128,31 @@ class PaginationUtils {
128
128
  return false;
129
129
  }
130
130
 
131
+ listAutoRefreshToggleEnabled({ rootGetters }: any): boolean {
132
+ return this.isFeatureEnabled({ rootGetters }, 'listAutoRefreshToggle');
133
+ }
134
+
135
+ isListManualRefreshEnabled({ rootGetters }: any): boolean {
136
+ return this.isFeatureEnabled({ rootGetters }, 'listManualRefresh');
137
+ }
138
+
139
+ private isFeatureEnabled({ rootGetters }: any, featureName: PaginationFeature): boolean {
140
+ // Cache must be enabled to support pagination api
141
+ if (!this.isSteveCacheEnabled({ rootGetters })) {
142
+ return false;
143
+ }
144
+
145
+ const settings = this.getSettings({ rootGetters });
146
+
147
+ return !!settings.features?.[featureName]?.enabled;
148
+ }
149
+
150
+ resourceChangesDebounceMs({ rootGetters }: any): number | undefined {
151
+ const settings = this.getSettings({ rootGetters });
152
+
153
+ return settings.resourceChangesDebounceMs;
154
+ }
155
+
131
156
  validateNsProjectFilters(nsProjectFilters: string[]) {
132
157
  return nsProjectFilters?.every((f) => this.validateNsProjectFilter(f));
133
158
  }