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

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 (280) hide show
  1. package/assets/data/aws-regions.json +2 -0
  2. package/assets/images/providers/sks.svg +1 -0
  3. package/assets/styles/base/_helpers.scss +4 -0
  4. package/assets/styles/base/_variables.scss +1 -0
  5. package/assets/styles/global/_layout.scss +0 -1
  6. package/assets/translations/en-us.yaml +92 -34
  7. package/assets/translations/zh-hans.yaml +4 -13
  8. package/chart/monitoring/index.vue +4 -2
  9. package/components/ActionDropdownShell.vue +71 -0
  10. package/components/AppModal.vue +18 -4
  11. package/components/AsyncButton.vue +2 -0
  12. package/components/CodeMirror.vue +3 -3
  13. package/components/CommunityLinks.vue +3 -58
  14. package/components/CruResource.vue +109 -16
  15. package/components/ExplorerProjectsNamespaces.vue +19 -6
  16. package/components/FixedBanner.vue +19 -5
  17. package/components/GlobalRoleBindings.vue +5 -1
  18. package/components/GrowlManager.vue +1 -0
  19. package/components/LandingPagePreference.vue +2 -0
  20. package/components/LocaleSelector.vue +1 -1
  21. package/components/ModalManager.vue +55 -0
  22. package/components/PaginatedResourceTable.vue +7 -0
  23. package/components/PromptModal.vue +47 -8
  24. package/components/ResourceDetail/Masthead.vue +38 -13
  25. package/components/ResourceDetail/__tests__/Masthead.test.ts +5 -1
  26. package/components/ResourceDetail/index.vue +47 -12
  27. package/components/ResourceList/index.vue +2 -1
  28. package/components/ResourceTable.vue +54 -19
  29. package/components/SideNav.vue +5 -1
  30. package/components/SlideInPanelManager.vue +125 -0
  31. package/components/SortableTable/THead.vue +5 -2
  32. package/components/SortableTable/actions.js +1 -1
  33. package/components/SortableTable/index.vue +54 -40
  34. package/components/SortableTable/paging.js +16 -19
  35. package/components/SortableTable/selection.js +1 -12
  36. package/components/Tabbed/index.vue +6 -0
  37. package/components/Wizard.vue +2 -2
  38. package/components/__tests__/AsyncButton.test.ts +39 -0
  39. package/components/__tests__/CruResource.test.ts +63 -0
  40. package/components/__tests__/ModalManager.spec.ts +176 -0
  41. package/components/__tests__/PromptModal.test.ts +146 -0
  42. package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
  43. package/components/auth/AuthBanner.vue +13 -11
  44. package/components/auth/Principal.vue +1 -0
  45. package/components/auth/login/ldap.vue +1 -1
  46. package/components/fleet/FleetResources.vue +21 -6
  47. package/components/form/ArrayList.vue +138 -118
  48. package/components/form/BannerSettings.vue +149 -85
  49. package/components/form/ColorInput.vue +35 -6
  50. package/components/form/EnvVars.vue +1 -0
  51. package/components/form/KeyValue.vue +10 -7
  52. package/components/form/LabeledSelect.vue +25 -23
  53. package/components/form/MatchExpressions.vue +9 -2
  54. package/components/form/NameNsDescription.vue +6 -2
  55. package/components/form/NotificationSettings.vue +15 -1
  56. package/components/form/Password.vue +1 -0
  57. package/components/form/Probe.vue +1 -0
  58. package/components/form/ResourceSelector.vue +26 -23
  59. package/components/form/ResourceTabs/index.vue +2 -1
  60. package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +15 -34
  61. package/components/form/SSHKnownHosts/index.vue +14 -11
  62. package/components/form/Select.vue +8 -15
  63. package/components/form/UnitInput.vue +13 -0
  64. package/components/form/ValueFromResource.vue +12 -12
  65. package/components/form/__tests__/ArrayList.test.ts +34 -2
  66. package/components/form/__tests__/ColorInput.test.ts +35 -0
  67. package/components/form/__tests__/KeyValue.test.ts +36 -0
  68. package/components/form/__tests__/LabeledSelect.test.ts +73 -0
  69. package/components/form/__tests__/SSHKnownHosts.test.ts +11 -2
  70. package/components/form/__tests__/Select.test.ts +34 -1
  71. package/components/form/__tests__/UnitInput.test.ts +23 -1
  72. package/components/formatter/ClusterLink.vue +5 -8
  73. package/components/formatter/Description.vue +30 -0
  74. package/components/formatter/__tests__/ClusterLink.test.ts +2 -32
  75. package/components/nav/Group.vue +12 -4
  76. package/components/nav/Header.vue +16 -43
  77. package/components/nav/NamespaceFilter.vue +134 -86
  78. package/components/nav/TopLevelMenu.vue +4 -5
  79. package/components/nav/WindowManager/ContainerLogs.vue +87 -61
  80. package/components/nav/WindowManager/ContainerLogsActions.vue +76 -0
  81. package/components/nav/WindowManager/index.vue +1 -0
  82. package/components/templates/default.vue +6 -3
  83. package/components/templates/home.vue +6 -0
  84. package/components/templates/plain.vue +6 -3
  85. package/composables/focusTrap.ts +12 -4
  86. package/config/product/explorer.js +16 -13
  87. package/config/product/manager.js +1 -28
  88. package/config/settings.ts +11 -13
  89. package/config/store.js +4 -0
  90. package/config/table-headers.js +7 -5
  91. package/config/uiplugins.js +5 -1
  92. package/core/types.ts +7 -6
  93. package/detail/catalog.cattle.io.app.vue +5 -1
  94. package/detail/fleet.cattle.io.bundle.vue +70 -6
  95. package/detail/fleet.cattle.io.gitrepo.vue +1 -1
  96. package/detail/namespace.vue +0 -3
  97. package/detail/node.vue +17 -13
  98. package/detail/provisioning.cattle.io.cluster.vue +85 -9
  99. package/detail/service.vue +0 -1
  100. package/detail/workload/index.vue +21 -34
  101. package/dialog/AddCustomBadgeDialog.vue +0 -1
  102. package/{pages/c/_cluster/uiplugins/AddExtensionRepos.vue → dialog/AddExtensionReposDialog.vue} +72 -42
  103. package/dialog/AssignToDialog.vue +176 -0
  104. package/dialog/ChangePasswordDialog.vue +106 -0
  105. package/{pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue → dialog/DeveloperLoadExtensionDialog.vue} +74 -71
  106. package/dialog/DisableAuthProviderDialog.vue +101 -0
  107. package/dialog/DrainNode.vue +1 -1
  108. package/{pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue → dialog/ExtensionCatalogInstallDialog.vue} +100 -88
  109. package/{pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue → dialog/ExtensionCatalogUninstallDialog.vue} +83 -65
  110. package/dialog/FeatureFlagListDialog.vue +288 -0
  111. package/dialog/ForceMachineRemoveDialog.vue +1 -1
  112. package/{components/Import.vue → dialog/ImportDialog.vue} +0 -5
  113. package/{pages/c/_cluster/uiplugins/InstallDialog.vue → dialog/InstallExtensionDialog.vue} +124 -106
  114. package/{components/form/SSHKnownHosts → dialog}/KnownHostsEditDialog.vue +52 -62
  115. package/dialog/MoveNamespaceDialog.vue +157 -0
  116. package/dialog/ScalePoolDownDialog.vue +1 -1
  117. package/{components/nav/Jump.vue → dialog/SearchDialog.vue} +34 -14
  118. package/{pages/c/_cluster/uiplugins/UninstallDialog.vue → dialog/UninstallExtensionDialog.vue} +67 -58
  119. package/dialog/WechatDialog.vue +57 -0
  120. package/edit/__tests__/service.test.ts +2 -1
  121. package/edit/auth/azuread.vue +1 -1
  122. package/edit/auth/github.vue +1 -1
  123. package/edit/auth/googleoauth.vue +1 -1
  124. package/edit/auth/ldap/index.vue +1 -1
  125. package/edit/auth/oidc.vue +1 -1
  126. package/edit/auth/saml.vue +1 -1
  127. package/edit/cloudcredential.vue +24 -10
  128. package/edit/management.cattle.io.user.vue +28 -3
  129. package/edit/namespace.vue +1 -4
  130. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -14
  131. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +57 -62
  132. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +3 -14
  133. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.test.ts +72 -41
  134. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/mock.json +17 -1
  135. package/edit/networking.k8s.io.networkpolicy/index.vue +18 -30
  136. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +4 -1
  137. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +26 -10
  138. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +8 -8
  139. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +26 -12
  140. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +66 -0
  141. package/edit/provisioning.cattle.io.cluster/__tests__/utils/rke2-test-data.ts +58 -0
  142. package/edit/provisioning.cattle.io.cluster/index.vue +21 -73
  143. package/edit/provisioning.cattle.io.cluster/rke2.vue +24 -7
  144. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +5 -3
  145. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +4 -1
  146. package/edit/service.vue +13 -28
  147. package/initialize/install-plugins.js +2 -1
  148. package/list/harvesterhci.io.management.cluster.vue +4 -1
  149. package/list/management.cattle.io.feature.vue +4 -288
  150. package/list/workload.vue +6 -1
  151. package/machine-config/azure.vue +16 -4
  152. package/mixins/resource-fetch-api-pagination.js +55 -43
  153. package/mixins/resource-fetch.js +14 -5
  154. package/mixins/vue-select-overrides.js +0 -4
  155. package/models/__tests__/workload.test.ts +1 -0
  156. package/models/cluster/node.js +1 -0
  157. package/models/cluster.js +32 -2
  158. package/models/fleet.cattle.io.cluster.js +8 -2
  159. package/models/fleet.cattle.io.gitrepo.js +8 -34
  160. package/models/management.cattle.io.cluster.js +0 -20
  161. package/models/management.cattle.io.feature.js +7 -1
  162. package/models/management.cattle.io.node.js +7 -22
  163. package/models/management.cattle.io.nodepool.js +12 -0
  164. package/models/namespace.js +12 -1
  165. package/models/provisioning.cattle.io.cluster.js +18 -64
  166. package/models/service.js +24 -9
  167. package/models/workload.js +70 -31
  168. package/package.json +1 -1
  169. package/pages/about.vue +13 -3
  170. package/pages/account/index.vue +12 -5
  171. package/pages/auth/login.vue +7 -4
  172. package/pages/auth/setup.vue +1 -0
  173. package/pages/auth/verify.vue +9 -7
  174. package/pages/c/_cluster/apps/charts/install.vue +25 -26
  175. package/pages/c/_cluster/auth/config/index.vue +10 -12
  176. package/pages/c/_cluster/explorer/EventsTable.vue +38 -33
  177. package/pages/c/_cluster/explorer/index.vue +28 -15
  178. package/pages/c/_cluster/istio/index.vue +2 -2
  179. package/pages/c/_cluster/longhorn/index.vue +3 -3
  180. package/pages/c/_cluster/monitoring/index.vue +1 -1
  181. package/pages/c/_cluster/monitoring/monitor/_namespace/_id.vue +4 -2
  182. package/pages/c/_cluster/monitoring/monitor/create.vue +4 -2
  183. package/pages/c/_cluster/monitoring/route-receiver/_id.vue +4 -2
  184. package/pages/c/_cluster/monitoring/route-receiver/create.vue +5 -2
  185. package/pages/c/_cluster/neuvector/index.vue +1 -1
  186. package/pages/c/_cluster/settings/banners.vue +60 -5
  187. package/pages/c/_cluster/settings/performance.vue +7 -26
  188. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +8 -10
  189. package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +4 -7
  190. package/pages/c/_cluster/uiplugins/index.vue +98 -55
  191. package/pages/diagnostic.vue +12 -9
  192. package/pages/fail-whale.vue +8 -5
  193. package/pages/home.vue +11 -52
  194. package/pages/prefs.vue +7 -6
  195. package/plugins/clean-html.js +2 -0
  196. package/plugins/dashboard-store/__tests__/actions.test.ts +4 -1
  197. package/plugins/dashboard-store/actions.js +122 -21
  198. package/plugins/dashboard-store/getters.js +74 -3
  199. package/plugins/dashboard-store/mutations.js +10 -5
  200. package/plugins/dashboard-store/resource-class.js +23 -3
  201. package/plugins/internal-api/index.ts +37 -0
  202. package/plugins/internal-api/shared/base-api.ts +13 -0
  203. package/plugins/internal-api/shell/shell.api.ts +108 -0
  204. package/plugins/steve/__tests__/getters.test.ts +18 -11
  205. package/plugins/steve/__tests__/steve-class.test.ts +1 -0
  206. package/plugins/steve/actions.js +34 -24
  207. package/plugins/steve/getters.js +39 -10
  208. package/plugins/steve/steve-class.js +5 -0
  209. package/plugins/steve/steve-pagination-utils.ts +199 -37
  210. package/plugins/steve/worker/web-worker.advanced.js +3 -1
  211. package/public/index.html +1 -0
  212. package/rancher-components/Banner/Banner.test.ts +51 -3
  213. package/rancher-components/Banner/Banner.vue +28 -6
  214. package/rancher-components/Card/Card.vue +1 -1
  215. package/rancher-components/Form/Checkbox/Checkbox.test.ts +59 -1
  216. package/rancher-components/Form/Checkbox/Checkbox.vue +27 -3
  217. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +51 -0
  218. package/rancher-components/Form/LabeledInput/LabeledInput.vue +20 -2
  219. package/rancher-components/Form/Radio/RadioButton.test.ts +36 -1
  220. package/rancher-components/Form/Radio/RadioButton.vue +20 -4
  221. package/rancher-components/Form/Radio/RadioGroup.test.ts +60 -0
  222. package/rancher-components/Form/Radio/RadioGroup.vue +75 -35
  223. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.test.ts +17 -0
  224. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +26 -1
  225. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +10 -1
  226. package/rancher-components/RcButton/RcButton.vue +2 -1
  227. package/rancher-components/RcButton/types.ts +1 -0
  228. package/rancher-components/RcDropdown/RcDropdown.vue +17 -6
  229. package/rancher-components/RcDropdown/RcDropdownItem.vue +3 -56
  230. package/rancher-components/RcDropdown/RcDropdownItemCheckbox.vue +68 -0
  231. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +92 -0
  232. package/rancher-components/RcDropdown/index.ts +2 -0
  233. package/rancher-components/RcDropdown/useDropdownItem.ts +63 -0
  234. package/scripts/extension/bundle +20 -0
  235. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -1
  236. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
  237. package/scripts/extension/helmpatch +44 -31
  238. package/scripts/extension/publish +12 -13
  239. package/scripts/typegen.sh +2 -4
  240. package/store/action-menu.js +26 -56
  241. package/store/features.js +0 -1
  242. package/store/index.js +5 -0
  243. package/store/modal.ts +71 -0
  244. package/store/slideInPanel.ts +47 -0
  245. package/store/type-map.js +8 -1
  246. package/store/type-map.utils.ts +49 -6
  247. package/types/fleet.d.ts +1 -1
  248. package/types/global-vue.d.ts +5 -0
  249. package/types/internal-api/shell/growl.d.ts +25 -0
  250. package/types/internal-api/shell/modal.d.ts +77 -0
  251. package/types/internal-api/shell/slideIn.d.ts +15 -0
  252. package/types/kube/kube-api.ts +22 -0
  253. package/types/resources/fleet.d.ts +0 -14
  254. package/types/resources/settings.d.ts +0 -4
  255. package/types/shell/index.d.ts +375 -306
  256. package/types/store/dashboard-store.types.ts +24 -1
  257. package/types/store/pagination.types.ts +19 -2
  258. package/types/vue-shim.d.ts +4 -1
  259. package/utils/__mocks__/tabbable.js +13 -0
  260. package/utils/__tests__/object.test.ts +38 -4
  261. package/utils/cluster.js +24 -20
  262. package/utils/fleet.ts +15 -73
  263. package/utils/grafana.js +1 -0
  264. package/utils/object.js +36 -5
  265. package/utils/pagination-utils.ts +6 -2
  266. package/utils/perf-setting.utils.ts +28 -0
  267. package/utils/selector-typed.ts +205 -0
  268. package/utils/selector.js +29 -6
  269. package/utils/uiplugins.ts +10 -6
  270. package/utils/v-sphere.ts +5 -1
  271. package/utils/validators/formRules/__tests__/index.test.ts +10 -1
  272. package/utils/validators/formRules/index.ts +27 -3
  273. package/components/AssignTo.vue +0 -199
  274. package/components/DisableAuthProviderModal.vue +0 -115
  275. package/components/MoveModal.vue +0 -167
  276. package/components/PromptChangePassword.vue +0 -123
  277. package/components/fleet/FleetBundleResources.vue +0 -86
  278. package/components/formatter/RKETemplateName.vue +0 -37
  279. package/dialog/SaveAsRKETemplateDialog.vue +0 -139
  280. package/types/vue-shim.d +0 -20
@@ -15,14 +15,8 @@ import Tab from '@shell/components/Tabbed/Tab.vue';
15
15
  import IconMessage from '@shell/components/IconMessage.vue';
16
16
  import LazyImage from '@shell/components/LazyImage';
17
17
  import { BadgeState } from '@components/BadgeState';
18
- import UninstallDialog from './UninstallDialog.vue';
19
- import InstallDialog from './InstallDialog.vue';
20
- import CatalogLoadDialog from './CatalogList/CatalogLoadDialog.vue';
21
- import CatalogUninstallDialog from './CatalogList/CatalogUninstallDialog.vue';
22
- import DeveloperInstallDialog from './DeveloperInstallDialog.vue';
23
18
  import PluginInfoPanel from './PluginInfoPanel.vue';
24
19
  import SetupUIPlugins from './SetupUIPlugins.vue';
25
- import AddExtensionRepos from './AddExtensionRepos';
26
20
  import CatalogList from './CatalogList/index.vue';
27
21
  import Banner from '@components/Banner/Banner.vue';
28
22
  import {
@@ -53,20 +47,14 @@ export default {
53
47
  components: {
54
48
  ActionMenu,
55
49
  BadgeState,
56
- DeveloperInstallDialog,
57
50
  IconMessage,
58
51
  CatalogList,
59
52
  Banner,
60
- CatalogLoadDialog,
61
- CatalogUninstallDialog,
62
- InstallDialog,
63
53
  LazyImage,
64
54
  PluginInfoPanel,
65
55
  Tab,
66
56
  Tabbed,
67
- UninstallDialog,
68
57
  SetupUIPlugins,
69
- AddExtensionRepos,
70
58
  TabTitle
71
59
  },
72
60
 
@@ -253,15 +241,13 @@ export default {
253
241
  // Label can be overridden by chart annotation
254
242
  const label = uiPluginAnnotation(chart, UI_PLUGIN_CHART_ANNOTATIONS.DISPLAY_NAME) || chart.chartNameDisplay;
255
243
  const item = {
256
- name: chart.chartName,
244
+ name: chart.chartName,
257
245
  label,
258
- description: chart.chartDescription,
259
- id: chart.id,
260
- versions: [],
261
- installed: false,
262
- builtin: false,
263
- experimental: uiPluginHasAnnotation(chart, CATALOG_ANNOTATIONS.EXPERIMENTAL, 'true'),
264
- certified: uiPluginHasAnnotation(chart, CATALOG_ANNOTATIONS.CERTIFIED, CATALOG_ANNOTATIONS._RANCHER)
246
+ description: chart.chartDescription,
247
+ id: chart.id,
248
+ versions: [],
249
+ installed: false,
250
+ builtin: false,
265
251
  };
266
252
 
267
253
  item.versions = [...chart.versions];
@@ -282,9 +268,15 @@ export default {
282
268
  const latestNotCompatible = item.versions.find((version) => !version.isVersionCompatible);
283
269
 
284
270
  if (latestCompatible) {
271
+ item.experimental = latestCompatible?.annotations?.[CATALOG_ANNOTATIONS.EXPERIMENTAL] === 'true';
272
+ item.certified = latestCompatible?.annotations?.[CATALOG_ANNOTATIONS.CERTIFIED] === CATALOG_ANNOTATIONS._RANCHER;
273
+
285
274
  item.displayVersion = latestCompatible.version;
286
275
  item.icon = latestCompatible.icon;
287
276
  } else {
277
+ item.experimental = uiPluginHasAnnotation(chart, CATALOG_ANNOTATIONS.EXPERIMENTAL, 'true');
278
+ item.certified = uiPluginHasAnnotation(chart, CATALOG_ANNOTATIONS.CERTIFIED, CATALOG_ANNOTATIONS._RANCHER);
279
+
288
280
  item.displayVersion = item.versions?.[0]?.version;
289
281
  item.icon = chart.icon || latestCompatible?.annotations?.['catalog.cattle.io/ui-icon'];
290
282
  }
@@ -323,6 +315,7 @@ export default {
323
315
  if (!chart) {
324
316
  // A plugin is loaded, but there is no chart, so add an item so that it shows up
325
317
  const rancher = typeof p.metadata?.rancher === 'object' ? p.metadata.rancher : {};
318
+
326
319
  const label = rancher.annotations?.[UI_PLUGIN_CHART_ANNOTATIONS.DISPLAY_NAME] || p.name;
327
320
  const item = {
328
321
  name: p.name,
@@ -334,6 +327,8 @@ export default {
334
327
  displayVersion: p.metadata?.version || '-',
335
328
  installed: true,
336
329
  builtin: !!p.builtin,
330
+ experimental: rancher?.annotations?.[CATALOG_ANNOTATIONS.EXPERIMENTAL] === 'true',
331
+ certified: rancher?.annotations?.[CATALOG_ANNOTATIONS.CERTIFIED] === CATALOG_ANNOTATIONS._RANCHER
337
332
  };
338
333
 
339
334
  // Built-in plugins can chose to be hidden - used where we implement as extensions
@@ -357,7 +352,15 @@ export default {
357
352
  chart.installing = this.installing[chart.name];
358
353
 
359
354
  // Check for upgrade
355
+ // Use the currently installed version's metadata to show/hide the experimental and certified labels
360
356
  if (chart.installableVersions?.length && p.version !== chart.installableVersions?.[0]?.version) {
357
+ const installedVersion = (chart.installableVersions || []).find((v) => v?.version === p.version);
358
+
359
+ if (installedVersion) {
360
+ chart.experimental = installedVersion?.annotations?.[CATALOG_ANNOTATIONS.EXPERIMENTAL] === 'true';
361
+ chart.certified = installedVersion?.annotations?.[CATALOG_ANNOTATIONS.CERTIFIED] === CATALOG_ANNOTATIONS._RANCHER;
362
+ }
363
+
361
364
  chart.upgrade = chart.installableVersions[0].version;
362
365
  }
363
366
  } else {
@@ -525,21 +528,61 @@ export default {
525
528
 
526
529
  // Developer Load is in the action menu
527
530
  showDeveloperLoadDialog() {
528
- this.$refs.developerInstallDialog.showDialog();
531
+ this.$store.dispatch('management/promptModal', {
532
+ component: 'DeveloperLoadExtensionDialog',
533
+ returnFocusSelector: '[data-testid="extensions-page-menu"]',
534
+ componentProps: {
535
+ closed: (res) => {
536
+ this.didInstall(res);
537
+ }
538
+ }
539
+ });
529
540
  },
530
541
 
531
542
  showAddExtensionReposDialog() {
532
543
  this.updateAddReposSetting();
533
544
  this.refreshCharts(true);
534
- this.$refs.addExtensionReposDialog.showDialog();
545
+
546
+ this.$store.dispatch('management/promptModal', {
547
+ component: 'AddExtensionReposDialog',
548
+ testId: 'add-extensions-repos-modal',
549
+ componentProps: {
550
+ done: () => {
551
+ this.updateInstallStatus(true);
552
+ }
553
+ }
554
+ });
535
555
  },
536
556
 
537
557
  showCatalogLoadDialog() {
538
- this.$refs.catalogLoadDialog.showDialog();
558
+ this.$store.dispatch('management/promptModal', {
559
+ component: 'ExtensionCatalogInstallDialog',
560
+ returnFocusSelector: '[data-testid="extensions-catalog-load-dialog"]',
561
+ componentProps: {
562
+ refresh: () => {
563
+ this.reloadRequired = true;
564
+ },
565
+ closed: (res) => {
566
+ this.didInstall(res);
567
+ }
568
+ }
569
+ });
539
570
  },
540
571
 
541
572
  showCatalogUninstallDialog(ev) {
542
- this.$refs.catalogUninstallDialog.showDialog(ev);
573
+ this.$store.dispatch('management/promptModal', {
574
+ component: 'ExtensionCatalogUninstallDialog',
575
+ returnFocusSelector: '[data-testid="extensions-catalog-load-dialog"]',
576
+ componentProps: {
577
+ catalog: ev,
578
+ refresh: () => {
579
+ this.reloadRequired = true;
580
+ },
581
+ closed: (res) => {
582
+ this.didUninstall(res);
583
+ }
584
+ }
585
+ });
543
586
  },
544
587
 
545
588
  showInstallDialog(plugin, mode, ev) {
@@ -547,7 +590,22 @@ export default {
547
590
  ev.preventDefault();
548
591
  ev.stopPropagation();
549
592
 
550
- this.$refs.installDialog.showDialog(plugin, mode);
593
+ this.$store.dispatch('management/promptModal', {
594
+ component: 'InstallExtensionDialog',
595
+ testId: 'install-extension-modal',
596
+ returnFocusSelector: `[data-testid="extension-card-${ mode }-btn-${ plugin?.name }"]`,
597
+ returnFocusFirstIterableNodeSelector: '#extensions-main-page',
598
+ componentProps: {
599
+ plugin,
600
+ mode,
601
+ updateStatus: (pluginName, type) => {
602
+ this.updatePluginInstallStatus(pluginName, type);
603
+ },
604
+ closed: (res) => {
605
+ this.didInstall(res);
606
+ }
607
+ }
608
+ });
551
609
  },
552
610
 
553
611
  showUninstallDialog(plugin, ev) {
@@ -555,7 +613,21 @@ export default {
555
613
  ev.preventDefault();
556
614
  ev.stopPropagation();
557
615
 
558
- this.$refs.uninstallDialog.showDialog(plugin);
616
+ this.$store.dispatch('management/promptModal', {
617
+ component: 'UninstallExtensionDialog',
618
+ testId: 'uninstall-extension-modal',
619
+ returnFocusSelector: `[data-testid="extension-card-uninstall-btn-${ plugin.name }"]`,
620
+ returnFocusFirstIterableNodeSelector: '#extensions-main-page',
621
+ componentProps: {
622
+ plugin,
623
+ updateStatus: (pluginName, type) => {
624
+ this.updatePluginInstallStatus(pluginName, type);
625
+ },
626
+ closed: (res) => {
627
+ this.didUninstall(res);
628
+ }
629
+ }
630
+ });
559
631
  },
560
632
 
561
633
  didUninstall(plugin) {
@@ -996,35 +1068,6 @@ export default {
996
1068
  </div>
997
1069
  </template>
998
1070
  </div>
999
-
1000
- <InstallDialog
1001
- ref="installDialog"
1002
- @closed="didInstall"
1003
- @update="updatePluginInstallStatus"
1004
- />
1005
- <UninstallDialog
1006
- ref="uninstallDialog"
1007
- @closed="didUninstall"
1008
- @update="updatePluginInstallStatus"
1009
- />
1010
- <CatalogLoadDialog
1011
- ref="catalogLoadDialog"
1012
- @closed="didInstall"
1013
- @refresh="() => reloadRequired = true"
1014
- />
1015
- <CatalogUninstallDialog
1016
- ref="catalogUninstallDialog"
1017
- @closed="didUninstall"
1018
- @refresh="() => reloadRequired = true"
1019
- />
1020
- <DeveloperInstallDialog
1021
- ref="developerInstallDialog"
1022
- @closed="didInstall"
1023
- />
1024
- <AddExtensionRepos
1025
- ref="addExtensionReposDialog"
1026
- @done="updateInstallStatus(true)"
1027
- />
1028
1071
  </div>
1029
1072
  </template>
1030
1073
 
@@ -83,6 +83,16 @@ export default {
83
83
  },
84
84
 
85
85
  data() {
86
+ return {
87
+ systemInformation: null,
88
+ topFifteenForResponseTime: null,
89
+ responseTimes: null,
90
+ finalCounts: null,
91
+ includeResponseTimes: true,
92
+ };
93
+ },
94
+
95
+ created() {
86
96
  const {
87
97
  userAgent,
88
98
  userAgentData,
@@ -129,14 +139,7 @@ export default {
129
139
  systemInformation.jsMemory.value += `, ${ this.t('about.diagnostic.systemInformation.memUsedJsHeapSize', { usedJSHeapSize: window?.performance?.memory?.usedJSHeapSize }) }`;
130
140
  }
131
141
 
132
- return {
133
- systemInformation,
134
- topFifteenForResponseTime: null,
135
- responseTimes: null,
136
- finalCounts: null,
137
- includeResponseTimes: true,
138
- storeMapping: this.$store?._modules?.root?.state,
139
- };
142
+ this.systemInformation = systemInformation;
140
143
  },
141
144
 
142
145
  computed: {
@@ -157,7 +160,7 @@ export default {
157
160
  const fileName = 'rancher-diagnostic-data.json';
158
161
  const data = {
159
162
  systemInformation: this.systemInformation,
160
- storeMapping: this.parseStoreData(this.storeMapping),
163
+ storeMapping: this.parseStoreData(this.$store?._modules?.root?.state),
161
164
  resourceCounts: this.finalCounts,
162
165
  responseTimes: this.responseTimes,
163
166
  };
@@ -17,17 +17,19 @@ export default {
17
17
  mixins: [Brand, BrowserTabVisibility],
18
18
 
19
19
  data() {
20
+ return {
21
+ previousRoute: '',
22
+ styles: { '--custom-content': `'${ this.t('nav.failWhale.separator') }'` }
23
+ };
24
+ },
25
+
26
+ created() {
20
27
  const store = this.$store;
21
28
 
22
29
  if (!store.state.error && !store.state.cameFromError) {
23
30
  store.commit('cameFromError');
24
31
  this.$router.replace('/');
25
32
  }
26
-
27
- return {
28
- previousRoute: '',
29
- styles: { '--custom-content': `'${ this.t('nav.failWhale.separator') }'` }
30
- };
31
33
  },
32
34
 
33
35
  computed: {
@@ -108,6 +110,7 @@ export default {
108
110
  <hr
109
111
  class="custom-content"
110
112
  :style="styles"
113
+ role="none"
111
114
  >
112
115
  <p class="mt-20">
113
116
  <a
package/pages/home.vue CHANGED
@@ -226,10 +226,6 @@ export default defineComponent({
226
226
  readWhatsNewAlready() {
227
227
  return readReleaseNotes(this.$store);
228
228
  },
229
-
230
- showSetLoginBanner() {
231
- return this.homePageCards?.setLoginPage;
232
- },
233
229
  },
234
230
 
235
231
  async created() {
@@ -415,10 +411,6 @@ export default defineComponent({
415
411
  markReadReleaseNotes(this.$store);
416
412
  },
417
413
 
418
- showUserPrefs() {
419
- this.$router.push({ name: 'prefs' });
420
- },
421
-
422
414
  async resetCards() {
423
415
  const value = this.$store.getters['prefs/get'](HIDE_HOME_PAGE_CARDS) || {};
424
416
 
@@ -441,21 +433,6 @@ export default defineComponent({
441
433
  await this.$store.dispatch('prefs/set', { key: HIDE_HOME_PAGE_CARDS, value });
442
434
  },
443
435
 
444
- async closeSetLoginBanner(retry = 0) {
445
- let value = this.$store.getters['prefs/get'](HIDE_HOME_PAGE_CARDS);
446
-
447
- if (value === true || value === false || value.length > 0) {
448
- value = {};
449
- }
450
- value.setLoginPage = true;
451
-
452
- const res = await this.$store.dispatch('prefs/set', { key: HIDE_HOME_PAGE_CARDS, value });
453
-
454
- if (retry === 0 && res?.type === 'error' && res?.status === 500) {
455
- await this.closeSetLoginBanner(retry + 1);
456
- }
457
- },
458
-
459
436
  /**
460
437
  * Filter out hidden clusters from list of all clusters
461
438
  */
@@ -549,31 +526,6 @@ export default defineComponent({
549
526
  </div>
550
527
  <div class="row home-panels">
551
528
  <div class="col main-panel">
552
- <div
553
- v-if="!showSetLoginBanner"
554
- class="mb-10 row"
555
- >
556
- <div class="col span-12">
557
- <Banner
558
- color="set-login-page mt-0"
559
- data-testid="set-login-page-banner"
560
- :closable="true"
561
- @close="closeSetLoginBanner()"
562
- >
563
- <div>
564
- {{ t('landing.landingPrefs.title') }}
565
- </div>
566
- <a
567
- class="hand mr-20"
568
- tabindex="0"
569
- :aria-label="t('landing.landingPrefs.userPrefs')"
570
- @click.prevent.stop="showUserPrefs"
571
- @keyup.prevent.stop.enter="showUserPrefs"
572
- @keyup.prevent.stop.space="showUserPrefs"
573
- ><span v-clean-html="t('landing.landingPrefs.userPrefs')" /></a>
574
- </Banner>
575
- </div>
576
- </div>
577
529
  <div class="row panel">
578
530
  <div
579
531
  v-if="mcm"
@@ -671,6 +623,11 @@ export default defineComponent({
671
623
  v-clean-tooltip="row.unavailableMachines"
672
624
  class="conditions-alert-icon icon-alert icon"
673
625
  />
626
+ <i
627
+ v-if="row.isRke1"
628
+ v-clean-tooltip="t('cluster.rke1Unsupported')"
629
+ class="rke1-unsupported-icon icon-warning icon"
630
+ />
674
631
  </p>
675
632
  <p
676
633
  v-if="row.description"
@@ -754,7 +711,7 @@ export default defineComponent({
754
711
  }
755
712
  }
756
713
 
757
- .set-login-page, .whats-new {
714
+ .whats-new {
758
715
  > :deep() .banner__content {
759
716
  display: flex;
760
717
 
@@ -767,9 +724,6 @@ export default defineComponent({
767
724
  }
768
725
  }
769
726
 
770
- .banner.set-login-page {
771
- border: 1px solid var(--border);
772
- }
773
727
  .table-heading {
774
728
  align-items: center;
775
729
  display: flex;
@@ -824,6 +778,11 @@ export default defineComponent({
824
778
  color: var(--error);
825
779
  margin-left: 4px;
826
780
  }
781
+
782
+ .rke1-unsupported-icon {
783
+ color: var(--warning);
784
+ margin-left: 4px;
785
+ }
827
786
  }
828
787
 
829
788
  // Hide the side-panel showing links when the screen is small
package/pages/prefs.vue CHANGED
@@ -225,7 +225,7 @@ export default {
225
225
  v-if="!isSingleProduct"
226
226
  class="mt-10 mb-10"
227
227
  >
228
- <hr>
228
+ <hr role="none">
229
229
  <h4 v-t="'prefs.landing.label'" />
230
230
  <LandingPagePreference
231
231
  data-testid="prefs__landingPagePreference"
@@ -233,7 +233,7 @@ export default {
233
233
  </div>
234
234
  <!-- Display Settings -->
235
235
  <div class="mt-10 mb-10">
236
- <hr>
236
+ <hr role="none">
237
237
  <h4 v-t="'prefs.displaySettings.title'" />
238
238
  <p class="set-landing-leadin">
239
239
  {{ t('prefs.displaySettings.detail', {}, raw=true) }}
@@ -277,7 +277,7 @@ export default {
277
277
  v-if="!isSingleProduct"
278
278
  class="col adv-features mt-10 mb-10"
279
279
  >
280
- <hr>
280
+ <hr role="none">
281
281
  <h4 v-t="'prefs.confirmationSetting.title'" />
282
282
  <Checkbox
283
283
  v-model:value="scalingDownPrompt"
@@ -288,7 +288,7 @@ export default {
288
288
  </div>
289
289
  <!-- Advanced Features -->
290
290
  <div class="col adv-features mt-10 mb-10">
291
- <hr>
291
+ <hr role="none">
292
292
  <h4 v-t="'prefs.advFeatures.title'" />
293
293
  <Checkbox
294
294
  v-model:value="viewInApi"
@@ -325,13 +325,14 @@ export default {
325
325
  <Checkbox
326
326
  v-model:value="pluginDeveloper"
327
327
  :label="t('prefs.advFeatures.pluginDeveloper', {}, true)"
328
+ :tooltip="t('prefs.advFeatures.pluginDeveloperTooltip')"
328
329
  class="mt-20"
329
330
  />
330
331
  </template>
331
332
  </div>
332
333
  <!-- YAML editor key mapping -->
333
334
  <div class="col mt-10 mb-10">
334
- <hr>
335
+ <hr role="none">
335
336
  <h4 v-t="'prefs.keymap.label'" />
336
337
  <ButtonGroup
337
338
  v-model:value="keymap"
@@ -344,7 +345,7 @@ export default {
344
345
  v-if="!isSingleProduct"
345
346
  class="col mt-10 mb-40"
346
347
  >
347
- <hr>
348
+ <hr role="none">
348
349
  <h4 v-t="'prefs.helm.label'" />
349
350
  <ButtonGroup
350
351
  v-model:value="showPreRelease"
@@ -2,6 +2,7 @@ import DOMPurify from 'dompurify';
2
2
  import { uniq } from '@shell/utils/array';
3
3
 
4
4
  const ALLOWED_TAGS = [
5
+ 'center',
5
6
  'code',
6
7
  'li',
7
8
  'a',
@@ -13,6 +14,7 @@ const ALLOWED_TAGS = [
13
14
  'span',
14
15
  'div',
15
16
  'i',
17
+ 'img',
16
18
  'em',
17
19
  'strong',
18
20
  'h1',
@@ -175,7 +175,9 @@ describe('dashboard-store: actions', () => {
175
175
  haveSelector: jest.fn(() => false),
176
176
  matching: jest.fn(() => 'getters.all'),
177
177
  urlFor: jest.fn(() => 'getters.urlFor'),
178
- urlOptions: jest.fn(() => 'getters.urlOptions')
178
+ urlOptions: jest.fn(() => 'getters.urlOptions'),
179
+ haveAll: jest.fn(() => false),
180
+ all: jest.fn(() => []),
179
181
  };
180
182
  const rootGetters = { 'type-map/optionsFor': jest.fn() };
181
183
 
@@ -207,6 +209,7 @@ describe('dashboard-store: actions', () => {
207
209
  null,
208
210
  {
209
211
  ...genericOpt,
212
+ isCollection: true,
210
213
  depaginate: undefined,
211
214
  labelSelector: genericSelector,
212
215
  url: 'getters.urlFor',