@rancher/shell 3.0.7 → 3.0.8-rc.10

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 (375) hide show
  1. package/assets/brand/suse/banner.svg +1 -0
  2. package/assets/brand/suse/dark/banner.svg +1 -0
  3. package/assets/brand/suse/dark/login-landscape.svg +1 -0
  4. package/assets/brand/suse/dark/rancher-logo.svg +1 -1
  5. package/assets/brand/suse/favicon.png +0 -0
  6. package/assets/brand/suse/login-landscape.svg +1 -0
  7. package/assets/brand/suse/metadata.json +11 -1
  8. package/assets/brand/suse/rancher-logo.svg +1 -1
  9. package/assets/fonts/suse/suse-v2-latin-300.woff +0 -0
  10. package/assets/fonts/suse/suse-v2-latin-300.woff2 +0 -0
  11. package/assets/fonts/suse/suse-v2-latin-600.woff +0 -0
  12. package/assets/fonts/suse/suse-v2-latin-600.woff2 +0 -0
  13. package/assets/fonts/suse/suse-v2-latin-700.woff +0 -0
  14. package/assets/fonts/suse/suse-v2-latin-700.woff2 +0 -0
  15. package/assets/fonts/suse/suse-v2-latin-800.woff +0 -0
  16. package/assets/fonts/suse/suse-v2-latin-800.woff2 +0 -0
  17. package/assets/fonts/suse/suse-v2-latin-regular.woff +0 -0
  18. package/assets/fonts/suse/suse-v2-latin-regular.woff2 +0 -0
  19. package/assets/images/content/README.md +5 -0
  20. package/assets/images/content/cloud-native.svg +84 -0
  21. package/assets/images/content/dark/cloud-native.svg +21 -0
  22. package/assets/images/content/dark/shield.svg +59 -0
  23. package/assets/images/content/dark/suse.svg +10 -0
  24. package/assets/images/content/shield.svg +59 -0
  25. package/assets/images/content/suse.svg +10 -0
  26. package/assets/images/vendor/githubapp.svg +13 -0
  27. package/assets/styles/base/_typography.scss +2 -1
  28. package/assets/styles/fonts/_fontstack.scss +53 -1
  29. package/assets/styles/global/_cards.scss +0 -3
  30. package/assets/styles/global/_layout.scss +21 -35
  31. package/assets/styles/themes/_dark.scss +1 -1
  32. package/assets/styles/themes/_light.scss +1 -1
  33. package/assets/styles/themes/_modern.scss +16 -8
  34. package/assets/styles/themes/_suse.scss +116 -24
  35. package/assets/translations/en-us.yaml +185 -21
  36. package/assets/translations/zh-hans.yaml +0 -4
  37. package/components/AutoscalerCard.vue +113 -0
  38. package/components/AutoscalerTab.vue +94 -0
  39. package/components/BackLink.vue +8 -0
  40. package/components/BannerGraphic.vue +36 -21
  41. package/components/BrandImage.vue +17 -6
  42. package/components/ClusterIconMenu.vue +1 -1
  43. package/components/ClusterProviderIcon.vue +1 -1
  44. package/components/Cron/CronExpressionEditor.vue +1 -1
  45. package/components/Cron/CronExpressionEditorModal.vue +1 -1
  46. package/components/Drawer/Chrome.vue +2 -6
  47. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +4 -9
  48. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +3 -8
  49. package/components/Drawer/ResourceDetailDrawer/composables.ts +3 -4
  50. package/components/Drawer/ResourceDetailDrawer/index.vue +4 -9
  51. package/components/Drawer/ResourceDetailDrawer/types.ts +17 -0
  52. package/components/Drawer/types.ts +3 -0
  53. package/components/DynamicContent/DynamicContentBanner.vue +102 -0
  54. package/components/DynamicContent/DynamicContentCloseButton.vue +42 -0
  55. package/components/DynamicContent/DynamicContentIcon.vue +132 -0
  56. package/components/DynamicContent/DynamicContentPanel.vue +112 -0
  57. package/components/DynamicContent/content.ts +78 -0
  58. package/components/EmberPage.vue +1 -1
  59. package/components/IconOrSvg.vue +2 -2
  60. package/components/Inactivity.vue +222 -106
  61. package/components/InstallHelmCharts.vue +2 -2
  62. package/components/PaginatedResourceTable.vue +2 -6
  63. package/components/PopoverCard.vue +192 -0
  64. package/components/Questions/__tests__/index.test.ts +159 -0
  65. package/components/Resource/Detail/CopyToClipboard.vue +4 -1
  66. package/components/Resource/Detail/FetchLoader/composables.ts +18 -4
  67. package/components/Resource/Detail/Metadata/Annotations/index.vue +2 -2
  68. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +1 -1
  69. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +4 -0
  70. package/components/Resource/Detail/Metadata/KeyValueRow.vue +1 -1
  71. package/components/Resource/Detail/Metadata/Labels/index.vue +2 -2
  72. package/components/Resource/Detail/Metadata/composables.ts +9 -9
  73. package/components/Resource/Detail/Metadata/index.vue +3 -3
  74. package/components/Resource/Detail/ResourcePopover/ResourcePopoverCard.vue +2 -19
  75. package/components/Resource/Detail/ResourcePopover/__tests__/ResourcePopoverCard.test.ts +0 -29
  76. package/components/Resource/Detail/ResourcePopover/__tests__/index.test.ts +132 -150
  77. package/components/Resource/Detail/ResourcePopover/index.vue +54 -159
  78. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +0 -2
  79. package/components/Resource/Detail/TitleBar/composables.ts +2 -1
  80. package/components/Resource/Detail/TitleBar/index.vue +10 -6
  81. package/components/Resource/Detail/composables.ts +12 -0
  82. package/components/ResourceDetail/Masthead/latest.vue +29 -0
  83. package/components/ResourceDetail/index.vue +5 -2
  84. package/components/ResourceList/Masthead.vue +1 -1
  85. package/components/SortableTable/index.vue +18 -2
  86. package/components/Tabbed/__tests__/index.test.ts +86 -0
  87. package/components/{nav/WindowManager → Window}/ContainerLogs.vue +1 -1
  88. package/components/{nav/WindowManager → Window}/ContainerLogsActions.vue +1 -0
  89. package/components/{nav/WindowManager → Window}/__tests__/ContainerLogs.test.ts +1 -1
  90. package/components/{nav/WindowManager → Window}/__tests__/ContainerShell.test.ts +2 -2
  91. package/components/__tests__/AutoscalerCard.test.ts +154 -0
  92. package/components/__tests__/AutoscalerTab.test.ts +125 -0
  93. package/components/__tests__/PopoverCard.test.ts +204 -0
  94. package/components/auth/SelectPrincipal.vue +24 -6
  95. package/components/auth/__tests__/SelectPrincipal.test.ts +119 -0
  96. package/components/fleet/FleetConfigMapSelector.vue +117 -0
  97. package/components/fleet/FleetSecretSelector.vue +127 -0
  98. package/components/fleet/__tests__/FleetConfigMapSelector.test.ts +125 -0
  99. package/components/fleet/__tests__/FleetSecretSelector.test.ts +82 -0
  100. package/components/form/FileImageSelector.vue +13 -4
  101. package/components/form/FileSelector.vue +11 -2
  102. package/components/form/ResourceLabeledSelect.vue +1 -0
  103. package/components/form/__tests__/ResourceLabeledSelect.test.ts +90 -0
  104. package/components/formatter/Autoscaler.vue +97 -0
  105. package/components/formatter/InternalExternalIP.vue +198 -24
  106. package/components/formatter/__tests__/Autoscaler.test.ts +156 -0
  107. package/components/formatter/__tests__/InternalExternalIP.test.ts +133 -0
  108. package/components/google/util/__tests__/formatter.test.ts +47 -0
  109. package/components/google/util/formatter.ts +5 -2
  110. package/components/nav/Group.vue +12 -3
  111. package/components/nav/Header.vue +37 -16
  112. package/components/nav/NamespaceFilter.vue +13 -1
  113. package/components/nav/NotificationCenter/index.vue +2 -1
  114. package/components/nav/TopLevelMenu.helper.ts +16 -6
  115. package/components/nav/TopLevelMenu.vue +4 -2
  116. package/components/{DraggableZone.vue → nav/WindowManager/PinArea.vue} +47 -80
  117. package/components/nav/WindowManager/composables/useComponentsMount.ts +70 -0
  118. package/components/nav/WindowManager/composables/useDimensionsHandler.ts +105 -0
  119. package/components/nav/WindowManager/composables/useDragHandler.ts +99 -0
  120. package/components/nav/WindowManager/composables/usePanelHandler.ts +72 -0
  121. package/components/nav/WindowManager/composables/usePanelsHandler.ts +14 -0
  122. package/components/nav/WindowManager/composables/useResizeHandler.ts +167 -0
  123. package/components/nav/WindowManager/composables/useTabsHandler.ts +51 -0
  124. package/components/nav/WindowManager/constants.ts +23 -0
  125. package/components/nav/WindowManager/index.vue +61 -575
  126. package/components/nav/WindowManager/panels/HorizontalPanel.vue +265 -0
  127. package/components/nav/WindowManager/panels/TabBodyContainer.vue +39 -0
  128. package/components/nav/WindowManager/panels/VerticalPanel.vue +308 -0
  129. package/components/templates/default.vue +4 -40
  130. package/components/templates/home.vue +31 -5
  131. package/components/templates/plain.vue +30 -4
  132. package/components/templates/standalone.vue +1 -1
  133. package/composables/useI18n.ts +10 -1
  134. package/composables/useInterval.ts +15 -0
  135. package/config/__test__/uiplugins.test.ts +309 -0
  136. package/config/labels-annotations.js +9 -1
  137. package/config/product/auth.js +1 -0
  138. package/config/product/explorer.js +3 -1
  139. package/config/product/manager.js +20 -9
  140. package/config/query-params.js +1 -0
  141. package/config/router/routes.js +10 -2
  142. package/config/settings.ts +10 -2
  143. package/config/store.js +4 -2
  144. package/config/table-headers.js +8 -0
  145. package/config/types.js +11 -0
  146. package/config/uiplugins.js +46 -2
  147. package/config/version.js +1 -1
  148. package/core/__test__/extension-manager-impl.test.js +236 -0
  149. package/core/extension-manager-impl.js +23 -6
  150. package/core/plugin-helpers.ts +2 -0
  151. package/core/types-provisioning.ts +4 -1
  152. package/detail/pod.vue +1 -0
  153. package/detail/provisioning.cattle.io.cluster.vue +13 -1
  154. package/dialog/AddonConfigConfirmationDialog.vue +45 -1
  155. package/dialog/DeveloperLoadExtensionDialog.vue +12 -3
  156. package/dialog/RollbackWorkloadDialog.vue +2 -5
  157. package/directives/ui-context.ts +103 -0
  158. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +52 -11
  159. package/edit/auth/AuthProviderWarningBanners.vue +14 -1
  160. package/edit/auth/__tests__/oidc.test.ts +26 -0
  161. package/edit/auth/github-app-steps.vue +97 -0
  162. package/edit/auth/github-steps.vue +75 -0
  163. package/edit/auth/github.vue +99 -65
  164. package/edit/auth/oidc.vue +5 -1
  165. package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -0
  166. package/edit/cloudcredential.vue +1 -1
  167. package/edit/configmap.vue +1 -0
  168. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  169. package/edit/fleet.cattle.io.gitrepo.vue +0 -10
  170. package/edit/fleet.cattle.io.helmop.vue +51 -2
  171. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  172. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  173. package/edit/logging-flow/index.vue +1 -0
  174. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  175. package/edit/management.cattle.io.fleetworkspace.vue +1 -1
  176. package/edit/management.cattle.io.project.vue +1 -0
  177. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +4 -1
  178. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +2 -1
  179. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  180. package/edit/monitoring.coreos.com.receiver/index.vue +2 -1
  181. package/edit/monitoring.coreos.com.route.vue +1 -1
  182. package/edit/namespace.vue +1 -0
  183. package/edit/networking.istio.io.destinationrule/index.vue +1 -0
  184. package/edit/networking.k8s.io.ingress/index.vue +1 -0
  185. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +15 -5
  186. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +1 -0
  187. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -0
  188. package/edit/node.vue +1 -0
  189. package/edit/persistentvolume/index.vue +27 -22
  190. package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +13 -14
  191. package/edit/persistentvolume/plugins/azureDisk.vue +49 -48
  192. package/edit/persistentvolume/plugins/azureFile.vue +15 -14
  193. package/edit/persistentvolume/plugins/cephfs.vue +15 -14
  194. package/edit/persistentvolume/plugins/cinder.vue +15 -14
  195. package/edit/persistentvolume/plugins/csi.vue +18 -16
  196. package/edit/persistentvolume/plugins/fc.vue +13 -14
  197. package/edit/persistentvolume/plugins/flexVolume.vue +15 -14
  198. package/edit/persistentvolume/plugins/flocker.vue +1 -3
  199. package/edit/persistentvolume/plugins/gcePersistentDisk.vue +13 -14
  200. package/edit/persistentvolume/plugins/glusterfs.vue +15 -14
  201. package/edit/persistentvolume/plugins/hostPath.vue +40 -39
  202. package/edit/persistentvolume/plugins/iscsi.vue +13 -14
  203. package/edit/persistentvolume/plugins/local.vue +1 -3
  204. package/edit/persistentvolume/plugins/longhorn.vue +23 -22
  205. package/edit/persistentvolume/plugins/nfs.vue +15 -14
  206. package/edit/persistentvolume/plugins/photonPersistentDisk.vue +1 -14
  207. package/edit/persistentvolume/plugins/portworxVolume.vue +15 -14
  208. package/edit/persistentvolume/plugins/quobyte.vue +15 -14
  209. package/edit/persistentvolume/plugins/rbd.vue +15 -14
  210. package/edit/persistentvolume/plugins/scaleIO.vue +15 -14
  211. package/edit/persistentvolume/plugins/storageos.vue +15 -14
  212. package/edit/persistentvolume/plugins/vsphereVolume.vue +1 -3
  213. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +32 -5
  214. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +35 -0
  215. package/edit/provisioning.cattle.io.cluster/__tests__/Networking.test.ts +155 -0
  216. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +11 -9
  217. package/edit/provisioning.cattle.io.cluster/index.vue +25 -15
  218. package/edit/provisioning.cattle.io.cluster/rke2.vue +98 -17
  219. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +28 -2
  220. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +107 -5
  221. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +92 -4
  222. package/edit/secret/index.vue +1 -1
  223. package/edit/service.vue +9 -4
  224. package/edit/serviceaccount.vue +1 -0
  225. package/edit/storage.k8s.io.storageclass/index.vue +1 -0
  226. package/edit/workload/index.vue +2 -1
  227. package/edit/workload/mixins/workload.js +1 -1
  228. package/initialize/App.vue +4 -4
  229. package/initialize/install-directives.js +2 -0
  230. package/initialize/install-plugins.js +19 -2
  231. package/list/projectsecret.vue +1 -1
  232. package/list/provisioning.cattle.io.cluster.vue +15 -2
  233. package/machine-config/amazonec2.vue +42 -135
  234. package/machine-config/azure.vue +1 -1
  235. package/machine-config/components/EC2Networking.vue +490 -0
  236. package/machine-config/components/__tests__/EC2Networking.test.ts +148 -0
  237. package/machine-config/components/__tests__/utils/vpcSubnetMockData.js +294 -0
  238. package/machine-config/digitalocean.vue +11 -0
  239. package/machine-config/google.vue +1 -1
  240. package/mixins/__tests__/brand.spec.ts +2 -2
  241. package/mixins/__tests__/chart.test.ts +21 -0
  242. package/mixins/brand.js +1 -7
  243. package/mixins/chart.js +8 -2
  244. package/mixins/create-edit-view/index.js +5 -0
  245. package/models/__tests__/chart.test.ts +49 -12
  246. package/models/__tests__/compliance.cattle.io.clusterscanprofile.spec.js +30 -0
  247. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +112 -5
  248. package/models/catalog.cattle.io.app.js +1 -1
  249. package/models/chart.js +28 -14
  250. package/models/cluster/node.js +13 -6
  251. package/models/cluster.x-k8s.io.machine.js +10 -20
  252. package/models/cluster.x-k8s.io.machinedeployment.js +5 -1
  253. package/models/compliance.cattle.io.clusterscanprofile.js +1 -1
  254. package/models/management.cattle.io.authconfig.js +1 -0
  255. package/models/management.cattle.io.cluster.js +21 -3
  256. package/models/management.cattle.io.kontainerdriver.js +1 -0
  257. package/models/provisioning.cattle.io.cluster.js +249 -33
  258. package/package.json +6 -5
  259. package/pages/auth/login.vue +43 -4
  260. package/pages/auth/verify.vue +1 -1
  261. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +3 -2
  262. package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +135 -0
  263. package/pages/c/_cluster/apps/charts/chart.vue +35 -17
  264. package/pages/c/_cluster/apps/charts/index.vue +11 -13
  265. package/pages/c/_cluster/apps/charts/install.vue +1 -1
  266. package/pages/c/_cluster/explorer/EventsTable.vue +89 -3
  267. package/pages/c/_cluster/explorer/index.vue +8 -6
  268. package/pages/c/_cluster/explorer/tools/index.vue +3 -3
  269. package/pages/c/_cluster/manager/hostedprovider/index.vue +220 -0
  270. package/pages/c/_cluster/settings/brand.vue +1 -1
  271. package/pages/c/_cluster/settings/performance.vue +12 -25
  272. package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +7 -0
  273. package/pages/c/_cluster/uiplugins/catalogs.vue +147 -0
  274. package/pages/c/_cluster/uiplugins/index.vue +126 -184
  275. package/pages/home.vue +327 -16
  276. package/pkg/dynamic-importer.lib.js +4 -0
  277. package/plugins/axios.js +2 -1
  278. package/plugins/dashboard-client-init.js +3 -0
  279. package/plugins/dashboard-store/actions.js +1 -1
  280. package/plugins/dashboard-store/getters.js +18 -1
  281. package/plugins/dashboard-store/resource-class.js +21 -6
  282. package/plugins/dynamic-content.js +13 -0
  283. package/plugins/i18n.js +8 -0
  284. package/plugins/steve/__tests__/steve-pagination-utils.test.ts +333 -0
  285. package/plugins/steve/steve-pagination-utils.ts +41 -22
  286. package/plugins/steve/subscribe.js +17 -9
  287. package/plugins/subscribe-events.ts +4 -2
  288. package/rancher-components/Form/Checkbox/Checkbox.vue +1 -1
  289. package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.vue +6 -34
  290. package/rancher-components/Pill/RcStatusBadge/index.ts +0 -1
  291. package/rancher-components/Pill/RcStatusBadge/types.ts +1 -1
  292. package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.vue +5 -28
  293. package/rancher-components/Pill/RcStatusIndicator/types.ts +2 -1
  294. package/rancher-components/Pill/types.ts +0 -1
  295. package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -0
  296. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +5 -1
  297. package/rancher-components/RcIcon/RcIcon.test.ts +51 -0
  298. package/rancher-components/RcIcon/RcIcon.vue +46 -0
  299. package/rancher-components/RcIcon/index.ts +1 -0
  300. package/rancher-components/RcIcon/types.ts +160 -0
  301. package/rancher-components/utils/status.test.ts +67 -0
  302. package/rancher-components/utils/status.ts +77 -0
  303. package/scripts/extension/publish +1 -1
  304. package/scripts/typegen.sh +1 -0
  305. package/store/action-menu.js +8 -0
  306. package/store/auth.js +11 -6
  307. package/store/aws.js +8 -6
  308. package/store/catalog.js +6 -0
  309. package/store/features.js +2 -0
  310. package/store/index.js +45 -20
  311. package/store/notifications.ts +51 -4
  312. package/store/plugins.js +7 -3
  313. package/store/prefs.js +12 -6
  314. package/store/type-map.js +3 -3
  315. package/store/ui-context.ts +86 -0
  316. package/store/wm.ts +244 -0
  317. package/types/kube/kube-api.ts +2 -1
  318. package/types/notifications/index.ts +27 -3
  319. package/types/rancher/index.d.ts +1 -0
  320. package/types/resources/settings.d.ts +29 -7
  321. package/types/shell/index.d.ts +138 -4
  322. package/types/store/__tests__/pagination.types.spec.ts +137 -0
  323. package/types/store/pagination.types.ts +157 -9
  324. package/types/store/subscribe-events.types.ts +8 -1
  325. package/types/store/subscribe.types.ts +1 -0
  326. package/types/window-manager.ts +24 -0
  327. package/utils/__tests__/cluster.test.ts +379 -1
  328. package/utils/__tests__/object.test.ts +19 -0
  329. package/utils/__tests__/provider.test.ts +98 -0
  330. package/utils/__tests__/selector-typed.test.ts +263 -0
  331. package/utils/__tests__/version.test.ts +19 -1
  332. package/utils/autoscaler-utils.ts +7 -0
  333. package/utils/back-off.ts +3 -3
  334. package/utils/brand.ts +29 -0
  335. package/utils/chart.js +18 -0
  336. package/utils/cluster.js +157 -3
  337. package/utils/color.js +1 -1
  338. package/utils/dynamic-content/__tests__/announcement.test.ts +498 -0
  339. package/utils/dynamic-content/__tests__/config.test.ts +187 -0
  340. package/utils/dynamic-content/__tests__/index.test.ts +390 -0
  341. package/utils/dynamic-content/__tests__/info.test.ts +275 -0
  342. package/utils/dynamic-content/__tests__/new-release.test.ts +216 -0
  343. package/utils/dynamic-content/__tests__/support-notice.test.ts +262 -0
  344. package/utils/dynamic-content/__tests__/util.test.ts +235 -0
  345. package/utils/dynamic-content/announcement.ts +142 -0
  346. package/utils/dynamic-content/config.ts +55 -0
  347. package/utils/dynamic-content/example.json +40 -0
  348. package/utils/dynamic-content/index.ts +277 -0
  349. package/utils/dynamic-content/info.ts +261 -0
  350. package/utils/dynamic-content/new-release.ts +126 -0
  351. package/utils/dynamic-content/notification-handler.ts +48 -0
  352. package/utils/dynamic-content/support-notice.ts +169 -0
  353. package/utils/dynamic-content/types.d.ts +153 -0
  354. package/utils/dynamic-content/util.ts +122 -0
  355. package/utils/dynamic-importer.js +2 -2
  356. package/utils/favicon.js +4 -4
  357. package/utils/inactivity.ts +104 -0
  358. package/utils/object.js +20 -2
  359. package/utils/pagination-utils.ts +19 -4
  360. package/utils/pagination-wrapper.ts +12 -8
  361. package/utils/provider.ts +14 -0
  362. package/utils/release-notes.ts +1 -1
  363. package/utils/scroll.js +7 -0
  364. package/utils/selector-typed.ts +6 -2
  365. package/utils/settings.ts +15 -0
  366. package/utils/validators/machine-pool.ts +13 -3
  367. package/utils/version.js +15 -0
  368. package/assets/images/icons/document.svg +0 -3
  369. package/plugins/nuxt-client-init.js +0 -3
  370. package/store/wm.js +0 -95
  371. /package/components/{nav/WindowManager → Window}/ChartReadme.vue +0 -0
  372. /package/components/{nav/WindowManager → Window}/ContainerShell.vue +0 -0
  373. /package/components/{nav/WindowManager → Window}/KubectlShell.vue +0 -0
  374. /package/components/{nav/WindowManager → Window}/MachineSsh.vue +0 -0
  375. /package/components/{nav/WindowManager → Window}/Window.vue +0 -0
@@ -84,11 +84,21 @@ export default {
84
84
  maintainers() {
85
85
  const maintainers = this.version.maintainers || this.versionInfo?.chart?.maintainers || [];
86
86
 
87
- return maintainers.map((m) => {
87
+ return maintainers.map((m, i) => {
88
+ const label = m.name || m.url || m.email || this.t('generic.unknown');
89
+ let href = null;
90
+
91
+ if (m.url) {
92
+ href = m.url;
93
+ } else if (m.email) {
94
+ href = `mailto:${ m.email }`;
95
+ }
96
+
88
97
  return {
89
- id: m.name,
90
- text: m.name,
91
- url: m.email ? `mailto:${ m.email }` : m.url
98
+ id: `${ m.name }-${ i }`,
99
+ name: m.name,
100
+ label,
101
+ href
92
102
  };
93
103
  });
94
104
  },
@@ -259,11 +269,11 @@ export default {
259
269
  class="status"
260
270
  >
261
271
  <i
262
- v-clean-tooltip="t(status.tooltip.key)"
272
+ v-clean-tooltip="status.tooltip.key ? t(status.tooltip.key) : status.tooltip.text"
263
273
  :class="['icon', status.icon, status.color]"
264
274
  :style="{color: status.customColor}"
265
275
  role="img"
266
- :aria-label="t(status.tooltip.key)"
276
+ :aria-label="status.tooltip.key ? t(status.tooltip.key) : status.tooltip.text"
267
277
  />
268
278
  </div>
269
279
  </div>
@@ -456,18 +466,26 @@ export default {
456
466
  data-testid="chart-home-link"
457
467
  >{{ home }}<i class="icon icon-external-link" /><span class="sr-only">{{ t('generic.opensInNewTab') }}</span></a>
458
468
  </div>
459
- <div
460
- v-if="maintainers.length"
461
- class="chart-body__info-section"
462
- >
469
+ <div class="chart-body__info-section">
463
470
  <h4>{{ t('catalog.chart.info.maintainers') }}</h4>
464
- <a
465
- v-for="m of maintainers"
466
- :key="m.id"
467
- :href="m.url"
468
- rel="nofollow noopener noreferrer"
469
- target="_blank"
470
- >{{ m.text }}<span class="sr-only">{{ t('generic.opensInNewTab') }}</span></a>
471
+ <template v-if="maintainers.length">
472
+ <div
473
+ v-for="m of maintainers"
474
+ :key="m.id"
475
+ >
476
+ <a
477
+ v-if="m.href"
478
+ v-clean-tooltip="m.name ? t('catalog.chart.info.maintainerContactTooltip', { maintainer: m.name }) : undefined"
479
+ :href="m.href"
480
+ rel="nofollow noopener noreferrer"
481
+ target="_blank"
482
+ >
483
+ {{ m.label }}
484
+ </a>
485
+ <span v-else>{{ m.label }}</span>
486
+ </div>
487
+ </template>
488
+ <span v-else>{{ t('generic.unknown') }}</span>
471
489
  </div>
472
490
  <div
473
491
  v-if="version.sources"
@@ -7,7 +7,7 @@ import {
7
7
  REPO_TYPE, REPO, CHART, VERSION, SEARCH_QUERY, SORT_BY, _FLAGGED, CATEGORY, DEPRECATED, HIDDEN, TAG, STATUS
8
8
  } from '@shell/config/query-params';
9
9
  import { DOCS_BASE } from '@shell/config/private-label';
10
- import { APP_STATUS, compatibleVersionsFor, filterAndArrangeCharts, normalizeFilterQuery } from '@shell/store/catalog';
10
+ import { APP_STATUS, filterAndArrangeCharts, normalizeFilterQuery } from '@shell/store/catalog';
11
11
  import { lcFirst } from '@shell/utils/string';
12
12
  import { sortBy } from '@shell/utils/sort';
13
13
  import debounce from 'lodash/debounce';
@@ -24,6 +24,7 @@ import AppChartCardFooter from '@shell/pages/c/_cluster/apps/charts/AppChartCard
24
24
  import AddRepoLink from '@shell/pages/c/_cluster/apps/charts/AddRepoLink';
25
25
  import StatusLabel from '@shell/pages/c/_cluster/apps/charts/StatusLabel';
26
26
  import RichTranslation from '@shell/components/RichTranslation.vue';
27
+ import { getLatestCompatibleVersion } from '@shell/utils/chart';
27
28
  import Select from '@shell/components/form/Select';
28
29
 
29
30
  const createInitialFilters = () => ({
@@ -190,6 +191,13 @@ export default {
190
191
  sort: this.selectedSortOption
191
192
  });
192
193
 
194
+ const OSs = this.currentCluster.workerOSs;
195
+ const showPrerelease = this.$store.getters['prefs/get'](SHOW_PRE_RELEASE);
196
+
197
+ res.forEach((chart) => {
198
+ chart._latestCompatibleVersion = getLatestCompatibleVersion(chart, OSs, showPrerelease);
199
+ });
200
+
193
201
  // status filtering is separated from other filters because "isInstalled" and "upgradeable" statuses are already calculated in models/chart.js
194
202
  // by doing this we won't need to re-calculate it in filterAndArrangeCharts
195
203
  if (!statuses.length) {
@@ -265,7 +273,7 @@ export default {
265
273
  statuses: chart.cardContent.statuses
266
274
  },
267
275
  subHeaderItems: chart.cardContent.subHeaderItems,
268
- image: { src: chart.versions[0].icon, alt: { text: this.t('catalog.charts.iconAlt', { app: get(chart, 'chartNameDisplay') }) } },
276
+ image: { src: chart.latestCompatibleVersion.icon, alt: { text: this.t('catalog.charts.iconAlt', { app: get(chart, 'chartNameDisplay') }) } },
269
277
  content: { text: chart.chartDescription },
270
278
  footerItems: chart.cardContent.footerItems,
271
279
  rawChart: chart
@@ -343,17 +351,7 @@ export default {
343
351
  }, 100),
344
352
 
345
353
  selectChart(chart) {
346
- let version;
347
- const OSs = this.currentCluster.workerOSs;
348
- const showPrerelease = this.$store.getters['prefs/get'](SHOW_PRE_RELEASE);
349
- const compatibleVersions = compatibleVersionsFor(chart, OSs, showPrerelease);
350
- const versions = chart.versions;
351
-
352
- if (compatibleVersions.length > 0) {
353
- version = compatibleVersions[0].version;
354
- } else {
355
- version = versions[0].version;
356
- }
354
+ const version = chart.latestCompatibleVersion.version;
357
355
 
358
356
  const query = {
359
357
  [REPO_TYPE]: chart.repoType,
@@ -1203,7 +1203,7 @@ export default {
1203
1203
  const { allValues, values: crdValues } = versionInfo;
1204
1204
 
1205
1205
  // only save crd values that differ from the defaults defined in chart values.yaml
1206
- const customizedCrdValues = diff(crdValues, allValues);
1206
+ const customizedCrdValues = diff(crdValues, allValues, true);
1207
1207
 
1208
1208
  // CRD globals should be overwritten by main chart globals
1209
1209
  // we want to avoid including globals present on crd values and not main chart values
@@ -6,6 +6,8 @@ import PaginatedResourceTable from '@shell/components/PaginatedResourceTable';
6
6
  import { STEVE_EVENT_FIRST_SEEN, STEVE_EVENT_LAST_SEEN, STEVE_EVENT_OBJECT, STEVE_NAME_COL } from '@shell/config/pagination-table-headers';
7
7
  import { headerFromSchemaColString } from '@shell/store/type-map.utils';
8
8
  import { NAME as EXPLORER } from '@shell/config/product/explorer';
9
+ import { ROWS_PER_PAGE } from '@shell/store/prefs';
10
+ import { RcDropdown, RcDropdownTrigger, RcDropdownItem } from '@components/RcDropdown';
9
11
 
10
12
  const reason = {
11
13
  ...REASON,
@@ -29,15 +31,42 @@ const eventHeaders = [
29
31
  },
30
32
  ];
31
33
 
34
+ // Local storage key for the events table row count preference
35
+ const ROWS_COUNT_PREF = 'events-row-count-pref';
36
+ // Value to use when we want to use the user's preference from the table
37
+ const ROWS_PREF_USE_TABLE = -1;
38
+ // Default number of rows to show in the events table when not set in the preference
39
+ const ROWS_COUNT_DEFAULT = 10;
40
+
32
41
  export default {
33
- components: { PaginatedResourceTable },
42
+ components: {
43
+ PaginatedResourceTable,
44
+ RcDropdown,
45
+ RcDropdownItem,
46
+ RcDropdownTrigger
47
+ },
34
48
 
35
49
  data() {
50
+ const tableRowOptions = this.$store.getters['prefs/options'](ROWS_PER_PAGE);
51
+
52
+ let rowsPerPage = ROWS_COUNT_DEFAULT;
53
+
54
+ // Read the current value from localStorage if it exists
55
+ if (window.localStorage.getItem(ROWS_COUNT_PREF)) {
56
+ try {
57
+ rowsPerPage = parseInt(window.localStorage.getItem(ROWS_COUNT_PREF));
58
+ } catch (e) {
59
+ console.error('Error parsing rows count from localStorage:', e); // eslint-disable-line no-console
60
+ }
61
+ }
62
+
36
63
  return {
64
+ rowsPerPage,
37
65
  schema: null,
38
66
  events: [],
39
67
  eventHeaders,
40
68
  paginationHeaders: null,
69
+ options: tableRowOptions || [],
41
70
  allEventsLink: {
42
71
  name: 'c-cluster-product-resource',
43
72
  params: {
@@ -72,7 +101,34 @@ export default {
72
101
  this.dismissRouteHandler = this.$router.beforeEach(this.onRouteChange);
73
102
  },
74
103
 
104
+ computed: {
105
+ userPrefRowsPerPage() {
106
+ return parseInt(this.$store.getters['prefs/get'](ROWS_PER_PAGE), 10) || undefined;
107
+ },
108
+ rowOptions() {
109
+ const rowOptions = [];
110
+
111
+ this.options.forEach((item) => rowOptions.push({
112
+ label: this.t('glance.showXEvents', { count: item }),
113
+ value: item
114
+ }));
115
+
116
+ if (this.userPrefRowsPerPage) {
117
+ rowOptions.push({
118
+ label: this.t('glance.useUserPreference', { count: this.userPrefRowsPerPage }),
119
+ value: ROWS_PREF_USE_TABLE,
120
+ });
121
+ }
122
+
123
+ return rowOptions;
124
+ }
125
+ },
126
+
75
127
  methods: {
128
+ updateRowsCount(val) {
129
+ this.rowsPerPage = val;
130
+ window.localStorage.setItem(ROWS_COUNT_PREF, val);
131
+ },
76
132
  async onRouteChange(to, from, next) {
77
133
  if (this.$route.name !== to.name) {
78
134
  await this.$store.dispatch('cluster/forgetType', EVENT);
@@ -100,7 +156,7 @@ export default {
100
156
  :table-actions="false"
101
157
  :row-actions="false"
102
158
  :groupable="false"
103
- :rows-per-page="10"
159
+ :rows-per-page="rowsPerPage"
104
160
  >
105
161
  <template v-slot:header-right>
106
162
  <router-link
@@ -110,14 +166,44 @@ export default {
110
166
  >
111
167
  <span>{{ t('glance.eventsTable') }}</span>
112
168
  </router-link>
169
+ <rc-dropdown>
170
+ <rc-dropdown-trigger
171
+ data-testid="events-list-row-count-menu-toggle"
172
+ :aria-label="t('glance.changeEventsListRowCount')"
173
+ ghost
174
+ small
175
+ >
176
+ <i class="icon icon-gear" />
177
+ </rc-dropdown-trigger>
178
+ <template #dropdownCollection>
179
+ <rc-dropdown-item
180
+ v-for="(item, i) in rowOptions"
181
+ :key="i"
182
+ :value="item.value"
183
+ @click.stop="updateRowsCount(item.value)"
184
+ >
185
+ <span :class="{ 'selected-pagesize-option': rowsPerPage === item.value }">
186
+ {{ item.label }}
187
+ </span>
188
+ </rc-dropdown-item>
189
+ </template>
190
+ </rc-dropdown>
113
191
  </template>
114
192
  </PaginatedResourceTable>
115
193
  </template>
116
194
 
117
195
  <style lang="scss" scoped>
196
+ .icon.icon-gear {
197
+ color: var(--primary);
198
+ padding: 0 8px;
199
+ }
118
200
  .events-link {
119
201
  align-self: center;
120
- padding-right: 20px;
202
+ margin-right: 10px;
121
203
  white-space: nowrap;
122
204
  }
205
+
206
+ .selected-pagesize-option {
207
+ font-weight: bold;
208
+ }
123
209
  </style>
@@ -222,7 +222,7 @@ export default {
222
222
  displayProvider() {
223
223
  const other = 'other';
224
224
 
225
- let provider = this.currentCluster?.status?.provider || other;
225
+ let provider = this.currentCluster?.status?.provider || this.currentCluster?.status?.driver.toLowerCase() || other;
226
226
 
227
227
  if (provider === 'rke.windows') {
228
228
  provider = 'rkeWindows';
@@ -484,6 +484,12 @@ export default {
484
484
  hasNodes() {
485
485
  return this.nodes?.length > 0;
486
486
  },
487
+ kubernetesVersion() {
488
+ const base = this.currentCluster?.kubernetesVersionBase || '';
489
+ const extension = this.currentCluster?.kubernetesVersionExtension || '';
490
+
491
+ return `${ base }${ extension }`;
492
+ }
487
493
  },
488
494
 
489
495
  methods: {
@@ -661,11 +667,7 @@ export default {
661
667
  </div>
662
668
  <div data-testid="kubernetesVersion__label">
663
669
  <label>{{ t('glance.version') }}: </label>
664
- <span>{{ currentCluster.kubernetesVersionBase }}</span>
665
- <span
666
- v-if="currentCluster.kubernetesVersionExtension"
667
- style="font-size: 0.75em"
668
- >{{ currentCluster.kubernetesVersionExtension }}</span>
670
+ <span>{{ kubernetesVersion }}</span>
669
671
  </div>
670
672
  <div
671
673
  v-if="hasNodes"
@@ -96,7 +96,7 @@ export default {
96
96
  title: { text: chart.chartNameDisplay },
97
97
  statuses: chart.cardContent.statuses
98
98
  },
99
- subHeaderItems: chart.cardContent.subHeaderItems.slice(0, 1),
99
+ subHeaderItems: chart.cardContent.subHeaderItems,
100
100
  footerItems: chart.deploysOnWindows ? [{
101
101
  icon: 'icon-tag-alt',
102
102
  iconTooltip: { key: 'generic.tags' },
@@ -151,7 +151,7 @@ export default {
151
151
  action: 'edit',
152
152
  });
153
153
 
154
- const currentVersion = installedApp.spec.chart.metadata.version;
154
+ const currentVersion = installedApp.spec?.chart?.metadata?.version;
155
155
  const versions = rawChart.versions;
156
156
  const currentIndex = versions.findIndex((v) => v.version === currentVersion);
157
157
 
@@ -190,7 +190,7 @@ export default {
190
190
  },
191
191
 
192
192
  downgrade(app, chart) {
193
- const currentVersion = app.spec.chart.metadata.version;
193
+ const currentVersion = app.spec?.chart?.metadata?.version;
194
194
  const versions = chart.versions;
195
195
  const currentIndex = versions.findIndex((v) => v.version === currentVersion);
196
196
 
@@ -0,0 +1,220 @@
1
+ <script>
2
+ import { MANAGEMENT, HOSTED_PROVIDER } from '@shell/config/types';
3
+ import { SETTING } from '@shell/config/settings';
4
+ import { STATE, NAME } from '@shell/config/table-headers';
5
+ import ResourceTable from '@shell/components/ResourceTable';
6
+ import Masthead from '@shell/components/ResourceList/Masthead';
7
+ import Banner from '@components/Banner/Banner.vue';
8
+ import RcStatusBadge from '@components/Pill/RcStatusBadge/RcStatusBadge.vue';
9
+ import { exceptionToErrorsArray } from '@shell/utils/error';
10
+ import { isRancherPrime } from '@shell/config/version';
11
+ import { stateDisplay, STATES_ENUM } from '@shell/plugins/dashboard-store/resource-class';
12
+ import { getHostedProviders } from '@shell/utils/provider';
13
+
14
+ export default {
15
+ name: 'HostedProviders',
16
+ components: {
17
+ ResourceTable, Masthead, RcStatusBadge, Banner
18
+ },
19
+ data() {
20
+ return {
21
+ errors: [],
22
+ rows: [],
23
+ allProviders: null,
24
+ resource: HOSTED_PROVIDER,
25
+ schema: this.$store.getters['rancher/schemaFor'](HOSTED_PROVIDER),
26
+ prime: isRancherPrime(),
27
+ settingResource: null
28
+ };
29
+ },
30
+ fetch() {
31
+ this.allProviders = this.getProviders();
32
+ this.getSettings();
33
+ this.generateRows();
34
+ },
35
+ watch: {
36
+ settings() {
37
+ this.generateRows();
38
+ },
39
+ allProviders() {
40
+ this.generateRows();
41
+ }
42
+ },
43
+ computed: {
44
+ headers() {
45
+ return [
46
+ STATE,
47
+ NAME,
48
+ ];
49
+ },
50
+ settings() {
51
+ const providerTypesJSON = this.settingResource?.value;
52
+ const providerTypes = providerTypesJSON ? JSON.parse(providerTypesJSON) : [];
53
+ const settingsDict = {};
54
+
55
+ providerTypes.forEach((p) => {
56
+ settingsDict[p.name] = p.active;
57
+ });
58
+
59
+ return settingsDict;
60
+ },
61
+
62
+ },
63
+ methods: {
64
+ getProviders() {
65
+ const context = {
66
+ dispatch: this.$store.dispatch,
67
+ getters: this.$store.getters,
68
+ axios: this.$store.$axios,
69
+ $extension: this.$store.app.$extension,
70
+ t: (...args) => this.t.apply(this, args),
71
+ };
72
+
73
+ return getHostedProviders(context);
74
+ },
75
+ getSettings() {
76
+ this.settingResource = this.$store.getters['management/byId'](MANAGEMENT.SETTING, SETTING.KEV2_OPERATORS );
77
+ },
78
+ stateDisplay(row) {
79
+ if (!row.active) {
80
+ return stateDisplay(STATES_ENUM.INACTIVE);
81
+ }
82
+
83
+ return stateDisplay(STATES_ENUM.ACTIVE);
84
+ },
85
+ async setSetting(resources, active) {
86
+ try {
87
+ const providerTypes = this.settingResource.value ? JSON.parse(this.settingResource.value) : [];
88
+ const providerMap = new Map(providerTypes.map((prov) => [prov.name, prov]));
89
+
90
+ resources.forEach((resource) => {
91
+ const provider = providerMap.get(resource.id);
92
+
93
+ if (provider) {
94
+ provider.active = active;
95
+ } else {
96
+ providerMap.set(resource.id, { name: resource.id, active });
97
+ }
98
+ });
99
+
100
+ this.settingResource.value = JSON.stringify(Array.from(providerMap.values()));
101
+ await this.settingResource.save();
102
+ this.getSettings();
103
+ } catch (e) {
104
+ this.errors = exceptionToErrorsArray(e);
105
+ }
106
+ },
107
+ async generateRows() {
108
+ this.rows = this.allProviders.map((p) => {
109
+ const active = p.id in this.settings ? this.settings[p.id] : true;
110
+ const canNotPrime = p.prime && !this.prime;
111
+ const canNotChangeSettings = !this.settingResource?.canUpdate;
112
+ const enableAction = {
113
+ action: 'activate',
114
+ label: this.t('action.activate'),
115
+ icon: 'icon icon-play',
116
+ bulkable: true,
117
+ enabled: !active && !canNotPrime && !canNotChangeSettings,
118
+ invoke: async(opts, resources) => {
119
+ await this.setSetting(resources, true);
120
+ }
121
+ };
122
+ const disableAction = {
123
+ action: 'deactivate',
124
+ label: this.t('action.deactivate'),
125
+ icon: 'icon icon-pause',
126
+ bulkable: true,
127
+ enabled: active && !canNotChangeSettings,
128
+ weight: -1,
129
+ invoke: async(opts, resources) => {
130
+ await this.setSetting(resources, false);
131
+ }
132
+ };
133
+ const availableActions = [enableAction, disableAction];
134
+
135
+ return {
136
+ id: p.id,
137
+ name: p.label,
138
+ nameDisplay: p.label,
139
+ description: p.description || '',
140
+ prime: p.prime,
141
+ active,
142
+ availableActions
143
+ };
144
+ }) || [];
145
+ },
146
+ closeError(index) {
147
+ this.errors.splice(index, 1);
148
+ },
149
+ },
150
+ };
151
+ </script>
152
+
153
+ <template>
154
+ <div>
155
+ <Masthead
156
+ :schema="schema"
157
+ :resource="resource"
158
+ :type-display="t('providers.hosted.title')"
159
+ :is-creatable="false"
160
+ />
161
+ <Banner
162
+ color="warning"
163
+ :label="t('providers.hosted.warning')"
164
+ :closable="false"
165
+ />
166
+ <Banner
167
+ v-for="(err, i) in errors"
168
+ :key="i"
169
+ color="error"
170
+ :label="err"
171
+ :closable="true"
172
+ @close="closeError(i)"
173
+ />
174
+ <ResourceTable
175
+ :schema="schema"
176
+ :resource="resource"
177
+ :rows="rows"
178
+ :headers="headers"
179
+ :row-actions="true"
180
+ :table-actions="true"
181
+ :data-testid="'hosted-provider-list'"
182
+ key-field="id"
183
+ >
184
+ <template #cell:state="{row}">
185
+ <RcStatusBadge
186
+ :status="!row.active ? 'error' : 'success'"
187
+ >
188
+ {{ stateDisplay(row) }}
189
+ </RcStatusBadge>
190
+ </template>
191
+ <template #cell:name="{row}">
192
+ <div class="col">
193
+ <div class="row">
194
+ <span class="mr-10">{{ row.name }}</span>
195
+ <RcStatusBadge
196
+ v-if="row.prime"
197
+ class="prime-badge"
198
+ status="success"
199
+ >
200
+ {{ t('providers.hosted.prime') }}
201
+ </RcStatusBadge>
202
+ </div>
203
+ <div
204
+ v-if="row.description"
205
+ class="description text-muted text-small"
206
+ >
207
+ {{ row.description }}
208
+ </div>
209
+ </div>
210
+ </template>
211
+ </ResourceTable>
212
+ </div>
213
+ </template>
214
+
215
+ <style lang="scss" scoped>
216
+ .prime-badge {
217
+ font-size: 10px;
218
+ line-height: 15px;
219
+ }
220
+ </style>
@@ -18,7 +18,7 @@ import { _EDIT, _VIEW } from '@shell/config/query-params';
18
18
  import { setFavIcon } from '@shell/utils/favicon';
19
19
  import TabTitle from '@shell/components/TabTitle';
20
20
 
21
- const Color = require('color');
21
+ import Color from 'color';
22
22
 
23
23
  export default {
24
24
  components: {
@@ -76,6 +76,13 @@ export default {
76
76
  resource: MANAGEMENT.FEATURE
77
77
  }
78
78
  }).href,
79
+ settingsPageUrl: this.$router.resolve({
80
+ name: 'c-cluster-product-resource',
81
+ params: {
82
+ product: SETTING_PRODUCT,
83
+ resource: MANAGEMENT.SETTING
84
+ }
85
+ }).href,
79
86
  ssPApplicableTypesOpen: false,
80
87
  };
81
88
  },
@@ -206,31 +213,11 @@ export default {
206
213
  <!-- Inactivity -->
207
214
  <div class="mt-20">
208
215
  <h2>{{ t('performance.inactivity.title') }}</h2>
209
- <p>{{ t('performance.inactivity.description') }}</p>
210
- <Checkbox
211
- v-model:value="value.inactivity.enabled"
212
- :mode="mode"
213
- :label="t('performance.inactivity.checkboxLabel')"
214
- class="mt-10 mb-20"
215
- :primary="true"
216
- />
217
- <div class="ml-20">
218
- <LabeledInput
219
- v-model:value="value.inactivity.threshold"
220
- data-testid="inactivity-threshold"
221
- :mode="mode"
222
- :label="t('performance.inactivity.inputLabel')"
223
- :disabled="!value.inactivity.enabled"
224
- class="input mb-10"
225
- type="number"
226
- min="0"
227
- :rules="[validateInactivityThreshold]"
228
- />
229
- <span
230
- v-clean-html="t('performance.inactivity.information', {}, true)"
231
- :class="{ 'text-muted': !value.incrementalLoading.enabled }"
232
- />
233
- </div>
216
+ <Banner
217
+ color="warning"
218
+ >
219
+ <span v-clean-html="t(`performance.deprecatedInactivitySetting`, { settingsPageUrl }, true)" />
220
+ </Banner>
234
221
  </div>
235
222
  <!-- Websocket Notifications -->
236
223
  <div class="mt-40">
@@ -164,6 +164,13 @@ describe('page: UI plugins/Extensions', () => {
164
164
  });
165
165
 
166
166
  describe('getFooterItems', () => {
167
+ it('should return "developer" label for isDeveloper plugins', () => {
168
+ const plugin = { isDeveloper: true };
169
+ const items = wrapper.vm.getFooterItems(plugin);
170
+
171
+ expect(items[0].labels).toContain('plugins.labels.isDeveloper');
172
+ });
173
+
167
174
  it('should return "builtin" label for builtin plugins', () => {
168
175
  const plugin = { builtin: true };
169
176
  const items = wrapper.vm.getFooterItems(plugin);