@rancher/shell 0.5.2 → 1.2.0

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 (338) hide show
  1. package/.DS_Store +0 -0
  2. package/assets/images/providers/aks-black.svg +28 -0
  3. package/assets/images/providers/aks.svg +31 -0
  4. package/assets/styles/global/_labeled-input.scss +1 -0
  5. package/assets/styles/global/_layout.scss +0 -99
  6. package/assets/translations/en-us.yaml +77 -71
  7. package/assets/translations/zh-hans.yaml +25 -23
  8. package/babel.config.js +1 -7
  9. package/chart/gatekeeper.vue +11 -2
  10. package/chart/istio.vue +10 -1
  11. package/chart/logging/index.vue +11 -2
  12. package/chart/monitoring/alerting/index.vue +21 -7
  13. package/chart/monitoring/grafana/index.vue +2 -57
  14. package/chart/monitoring/index.vue +26 -52
  15. package/chart/monitoring/prometheus/index.vue +43 -37
  16. package/chart/rancher-backup/index.vue +10 -3
  17. package/cloud-credential/azure.vue +17 -4
  18. package/components/AsyncButton.vue +0 -9
  19. package/components/Carousel.vue +0 -1
  20. package/components/ChartPsp.vue +76 -0
  21. package/components/CodeMirror.vue +21 -19
  22. package/components/CopyCode.vue +2 -6
  23. package/components/CopyToClipboard.vue +1 -2
  24. package/components/CopyToClipboardText.vue +9 -14
  25. package/components/CruResource.vue +0 -1
  26. package/components/EtcdInfoBanner.vue +5 -5
  27. package/components/ExplorerProjectsNamespaces.vue +1 -25
  28. package/components/IconOrSvg.vue +1 -1
  29. package/components/Markdown.vue +12 -16
  30. package/components/Questions/index.vue +1 -1
  31. package/components/ResourceDetail/Masthead.vue +9 -25
  32. package/components/ResourceList/Masthead.vue +18 -1
  33. package/components/ResourceTable.vue +2 -14
  34. package/components/ResourceYaml.vue +0 -5
  35. package/components/SideNav.vue +1 -1
  36. package/components/SortableTable/THead.vue +9 -7
  37. package/components/SortableTable/index.vue +3 -2
  38. package/components/StatusTable.vue +1 -5
  39. package/components/TabTitle.vue +84 -0
  40. package/components/Tabbed/index.vue +0 -12
  41. package/components/__tests__/ChartPsp.test.ts +75 -0
  42. package/components/__tests__/CopyCode.test.ts +4 -5
  43. package/components/fleet/FleetBundles.vue +11 -5
  44. package/components/fleet/FleetRepos.vue +27 -62
  45. package/components/fleet/FleetResources.vue +1 -6
  46. package/components/fleet/FleetStatus.vue +3 -3
  47. package/components/fleet/FleetSummary.vue +30 -35
  48. package/components/form/ArrayList.vue +8 -1
  49. package/components/form/ArrayListSelect.vue +9 -9
  50. package/components/form/KeyValue.vue +0 -1
  51. package/components/form/LabeledSelect.vue +0 -4
  52. package/components/form/Password.vue +1 -3
  53. package/components/form/Select.vue +1 -1
  54. package/components/form/SelectOrCreateAuthSecret.vue +4 -4
  55. package/components/form/__tests__/KeyValue.test.ts +1 -1
  56. package/components/formatter/Checked.vue +3 -11
  57. package/components/formatter/ClusterProvider.vue +18 -1
  58. package/components/formatter/FleetSummaryGraph.vue +11 -23
  59. package/components/formatter/LiveDate.vue +16 -0
  60. package/components/formatter/LiveDuration.vue +1 -1
  61. package/components/formatter/PercentageBar.vue +1 -1
  62. package/components/formatter/__tests__/ClusterProvider.test.ts +28 -0
  63. package/components/nav/Group.vue +2 -2
  64. package/components/nav/Header.vue +2 -1
  65. package/components/nav/TopLevelMenu.vue +3 -29
  66. package/components/nav/Type.vue +3 -1
  67. package/components/nav/WindowManager/ContainerLogs.vue +19 -120
  68. package/components/nav/WindowManager/ContainerShell.vue +1 -6
  69. package/components/nav/WindowManager/index.vue +10 -11
  70. package/components/nav/__tests__/TopLevelMenu.test.ts +0 -33
  71. package/components/nav/__tests__/Type.test.ts +1 -1
  72. package/components/nuxt/nuxt-child.js +78 -14
  73. package/components/nuxt/nuxt.js +1 -1
  74. package/components/user.retention/user-retention-header.vue +34 -0
  75. package/composables/useI18n.ts +26 -0
  76. package/composables/useStore.ts +16 -0
  77. package/config/harvester-manager-types.js +0 -2
  78. package/config/home-links.js +32 -2
  79. package/config/private-label.js +0 -22
  80. package/config/product/explorer.js +4 -4
  81. package/config/product/fleet.js +1 -6
  82. package/config/product/legacy.js +1 -84
  83. package/config/product/manager.js +15 -8
  84. package/config/query-params.js +0 -1
  85. package/config/router.js +368 -385
  86. package/config/settings.ts +9 -2
  87. package/config/store.js +1 -1
  88. package/config/system-namespaces.js +0 -3
  89. package/config/table-headers.js +27 -47
  90. package/config/types.js +5 -0
  91. package/config/uiplugins.js +1 -1
  92. package/core/plugin-helpers.js +5 -3
  93. package/core/plugin-routes.ts +114 -56
  94. package/core/plugin.ts +10 -16
  95. package/core/plugins-loader.js +9 -7
  96. package/core/plugins.js +3 -0
  97. package/core/types-provisioning.ts +0 -7
  98. package/creators/app/init +0 -19
  99. package/detail/fleet.cattle.io.cluster.vue +1 -11
  100. package/detail/node.vue +0 -42
  101. package/detail/pod.vue +1 -68
  102. package/detail/provisioning.cattle.io.cluster.vue +4 -6
  103. package/detail/workload/index.vue +1 -15
  104. package/dialog/ScaleMachineDownDialog.vue +17 -34
  105. package/edit/auth/googleoauth.vue +5 -1
  106. package/edit/catalog.cattle.io.clusterrepo.vue +7 -20
  107. package/edit/cloudcredential.vue +0 -2
  108. package/edit/fleet.cattle.io.gitrepo.vue +4 -3
  109. package/edit/management.cattle.io.project.vue +52 -1
  110. package/edit/management.cattle.io.setting.vue +2 -31
  111. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +3 -12
  112. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +1 -2
  113. package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.spec.ts +1 -1
  114. package/edit/provisioning.cattle.io.cluster/{tabs/Basics.vue → Basics.vue} +126 -109
  115. package/edit/provisioning.cattle.io.cluster/{tabs/MachinePool.vue → MachinePool.vue} +7 -1
  116. package/edit/provisioning.cattle.io.cluster/{tabs/registries/RegistryConfigs.vue → RegistryConfigs.vue} +3 -1
  117. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +7 -15
  118. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +237 -0
  119. package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.test.ts → CustomCommand.tests.ts} +0 -6
  120. package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
  121. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +1 -7
  122. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  123. package/edit/provisioning.cattle.io.cluster/index.vue +37 -99
  124. package/edit/provisioning.cattle.io.cluster/rke2.vue +690 -181
  125. package/edit/service.vue +0 -12
  126. package/edit/workload/Upgrading.vue +2 -3
  127. package/edit/workload/index.vue +1 -2
  128. package/edit/workload/mixins/workload.js +1 -1
  129. package/initialize/App.js +71 -25
  130. package/initialize/client.js +162 -21
  131. package/initialize/index.js +124 -47
  132. package/initialize/layouts.ts +26 -0
  133. package/{components/templates → layouts}/blank.vue +1 -1
  134. package/{components/templates → layouts}/default.vue +98 -8
  135. package/{components/templates → layouts}/error.vue +19 -10
  136. package/{components/templates → layouts}/home.vue +1 -4
  137. package/{components/templates → layouts}/plain.vue +1 -4
  138. package/{components/templates → layouts}/standalone.vue +1 -1
  139. package/{components/templates → layouts}/unauthenticated.vue +1 -1
  140. package/list/management.cattle.io.feature.vue +7 -1
  141. package/list/management.cattle.io.user.vue +25 -1
  142. package/list/node.vue +0 -1
  143. package/machine-config/__tests__/vmwarevsphere.test.ts +161 -56
  144. package/machine-config/amazonec2.vue +1 -0
  145. package/machine-config/azure.vue +37 -21
  146. package/machine-config/vmwarevsphere.vue +47 -42
  147. package/middleware/authenticated.js +19 -14
  148. package/mixins/auth-config.js +7 -2
  149. package/mixins/brand.js +41 -29
  150. package/mixins/fetch.server.js +73 -0
  151. package/mixins/labeled-form-element.ts +1 -6
  152. package/models/__tests__/management.cattle.io.node.ts +0 -85
  153. package/models/__tests__/namespace.test.ts +9 -49
  154. package/models/cluster/node.js +4 -4
  155. package/models/cluster.x-k8s.io.machine.js +1 -1
  156. package/models/cluster.x-k8s.io.machinedeployment.js +0 -14
  157. package/models/fleet.cattle.io.cluster.js +0 -4
  158. package/models/fleet.cattle.io.gitrepo.js +13 -56
  159. package/models/management.cattle.io.cluster.js +3 -11
  160. package/models/management.cattle.io.kontainerdriver.js +0 -1
  161. package/models/management.cattle.io.node.js +14 -18
  162. package/models/management.cattle.io.nodepool.js +0 -17
  163. package/models/management.cattle.io.project.js +36 -0
  164. package/models/management.cattle.io.setting.js +7 -11
  165. package/models/management.cattle.io.user.js +65 -0
  166. package/models/namespace.js +1 -1
  167. package/models/pod.js +0 -20
  168. package/models/provisioning.cattle.io.cluster.js +8 -55
  169. package/models/secret.js +18 -117
  170. package/models/workload.js +0 -16
  171. package/models/workload.service.js +0 -18
  172. package/package.json +10 -12
  173. package/pages/about.vue +1 -0
  174. package/pages/account/create-key.vue +1 -0
  175. package/pages/account/index.vue +1 -0
  176. package/pages/auth/login.vue +1 -0
  177. package/pages/auth/logout.vue +2 -0
  178. package/pages/auth/setup.vue +4 -37
  179. package/pages/auth/verify.vue +8 -14
  180. package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +17 -2
  181. package/pages/c/_cluster/apps/charts/index.vue +58 -64
  182. package/pages/c/_cluster/apps/charts/install.helpers.js +13 -2
  183. package/pages/c/_cluster/apps/charts/install.vue +5 -5
  184. package/pages/c/_cluster/apps/index.vue +2 -0
  185. package/pages/c/_cluster/auth/index.vue +2 -0
  186. package/pages/c/_cluster/auth/user.retention/index.vue +384 -0
  187. package/pages/c/_cluster/ecm/index.vue +2 -0
  188. package/pages/c/_cluster/explorer/index.vue +53 -56
  189. package/pages/c/_cluster/explorer/tools/index.vue +3 -171
  190. package/pages/c/_cluster/fleet/index.vue +1 -1
  191. package/pages/c/_cluster/index.vue +2 -0
  192. package/pages/c/_cluster/manager/pages/_page.vue +5 -4
  193. package/pages/c/_cluster/monitoring/index.vue +1 -17
  194. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
  195. package/pages/c/_cluster/settings/banners.vue +2 -0
  196. package/pages/c/_cluster/settings/brand.vue +2 -0
  197. package/pages/c/_cluster/settings/index.vue +2 -0
  198. package/pages/c/_cluster/settings/links.vue +3 -2
  199. package/pages/c/_cluster/settings/performance.vue +1 -0
  200. package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +4 -4
  201. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +1 -2
  202. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +46 -10
  203. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +5 -2
  204. package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +96 -0
  205. package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +128 -0
  206. package/pages/c/_cluster/uiplugins/index.vue +2 -0
  207. package/pages/c/index.vue +9 -0
  208. package/pages/diagnostic.vue +2 -1
  209. package/pages/fail-whale.vue +1 -0
  210. package/pages/prefs.vue +1 -0
  211. package/pages/rio/mesh.vue +508 -0
  212. package/pages/support/index.vue +8 -2
  213. package/pkg/auto-import.js +1 -1
  214. package/plugins/axios.js +36 -0
  215. package/plugins/back-button.js +5 -3
  216. package/plugins/clean-html-directive.js +19 -1
  217. package/plugins/clean-tooltip-directive.js +1 -1
  218. package/plugins/codemirror-loader.js +1 -1
  219. package/plugins/codemirror.js +0 -41
  220. package/plugins/dashboard-store/__tests__/actions.spec.ts +250 -0
  221. package/plugins/dashboard-store/__tests__/{mutations.test.ts → mutations.spec.ts} +1 -1
  222. package/plugins/dashboard-store/actions.js +21 -22
  223. package/plugins/dashboard-store/classify.js +18 -1
  224. package/plugins/dashboard-store/getters.js +5 -10
  225. package/plugins/dashboard-store/index.js +12 -0
  226. package/plugins/dashboard-store/mutations.js +4 -0
  227. package/plugins/dashboard-store/resource-class.js +18 -59
  228. package/plugins/i18n.js +1 -1
  229. package/plugins/steve/__tests__/getters.spec.ts +56 -24
  230. package/plugins/steve/__tests__/subscribe.spec.ts +106 -0
  231. package/plugins/steve/getters.js +30 -7
  232. package/plugins/steve/mutations.js +5 -2
  233. package/plugins/steve/norman-class.js +0 -19
  234. package/plugins/steve/steve-class.js +0 -22
  235. package/plugins/steve/subscribe.js +34 -13
  236. package/plugins/transitions.js +4 -0
  237. package/plugins/vue-clipboard2.js +4 -0
  238. package/rancher-components/Accordion/Accordion.vue +3 -2
  239. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  240. package/rancher-components/Banner/Banner.test.ts +1 -5
  241. package/rancher-components/Banner/Banner.vue +2 -2
  242. package/rancher-components/Card/Card.vue +4 -4
  243. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
  244. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +1 -1
  245. package/rancher-components/Form/LabeledInput/LabeledInput.vue +55 -24
  246. package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
  247. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  248. package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
  249. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
  250. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  251. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  252. package/rancher-components/StringList/StringList.vue +8 -8
  253. package/rancher-components/components/Accordion/Accordion.vue +3 -2
  254. package/rancher-components/components/BadgeState/BadgeState.test.ts +12 -0
  255. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +2 -19
  256. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +14 -11
  257. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +1 -1
  258. package/rancher-components/components/StringList/StringList.test.ts +0 -270
  259. package/rancher-components/components/StringList/StringList.vue +18 -57
  260. package/scripts/extension/bundle +7 -19
  261. package/scripts/extension/helm/scripts/package +3 -11
  262. package/scripts/extension/parse-tag-name +4 -4
  263. package/scripts/extension/publish +9 -20
  264. package/scripts/publish-shell.sh +1 -11
  265. package/scripts/test-plugins-build.sh +9 -85
  266. package/store/catalog.js +1 -1
  267. package/store/features.js +0 -1
  268. package/store/i18n.js +0 -11
  269. package/store/index.js +11 -8
  270. package/store/prefs.js +38 -33
  271. package/store/type-map.js +8 -13
  272. package/tsconfig.default.json +46 -0
  273. package/tsconfig.json +9 -35
  274. package/types/shell/index.d.ts +404 -463
  275. package/utils/__tests__/create-yaml.test.ts +10 -0
  276. package/utils/axios.js +19 -0
  277. package/utils/create-yaml.js +6 -6
  278. package/utils/custom-validators.js +2 -0
  279. package/utils/error.js +1 -16
  280. package/utils/monitoring.js +2 -37
  281. package/utils/nuxt.js +39 -18
  282. package/utils/object.js +0 -14
  283. package/utils/router.scrollBehavior.js +14 -12
  284. package/utils/socket.js +1 -0
  285. package/utils/time.js +1 -1
  286. package/utils/title.ts +3 -0
  287. package/utils/url.ts +1 -1
  288. package/utils/validators/formRules/__tests__/index.test.ts +4 -49
  289. package/utils/validators/formRules/index.ts +9 -12
  290. package/utils/validators/setting.js +10 -6
  291. package/vue.config.js +3 -24
  292. package/chart/monitoring/steps/uninstall-v1.vue +0 -135
  293. package/components/Certificates.vue +0 -164
  294. package/components/fleet/__tests__/FleetSummary.test.ts +0 -316
  295. package/components/formatter/FleetClusterSummaryGraph.vue +0 -27
  296. package/components/formatter/__tests__/Checked.test.ts +0 -19
  297. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +0 -186
  298. package/composables/useCompactInput.ts +0 -20
  299. package/composables/useLabeledFormElement.ts +0 -138
  300. package/creators/app/files/.gitlab-ci.yml +0 -14
  301. package/edit/__tests__/service.test.ts +0 -89
  302. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +0 -112
  303. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +0 -473
  304. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +0 -73
  305. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +0 -386
  306. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +0 -137
  307. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +0 -157
  308. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +0 -135
  309. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +0 -189
  310. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +0 -144
  311. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +0 -76
  312. package/mixins/v1-workload-metrics.js +0 -43
  313. package/models/__tests__/management.cattle.io.cluster.test.ts +0 -23
  314. package/models/__tests__/management.cattle.io.nodepool.ts +0 -83
  315. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +0 -90
  316. package/models/__tests__/workload.test.ts +0 -91
  317. package/plugins/clean-html.js +0 -53
  318. package/plugins/dashboard-store/__tests__/actions.test.ts +0 -165
  319. package/plugins/dashboard-store/__tests__/resource-class.test.ts +0 -49
  320. package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +0 -7
  321. package/plugins/index.js +0 -11
  322. package/plugins/steve/__tests__/steve-class.spec.ts +0 -59
  323. package/plugins/steve/__tests__/utils/steve-mocks.ts +0 -31
  324. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +0 -50
  325. package/server/har-file.js +0 -183
  326. package/tsconfig.paths.json +0 -18
  327. package/utils/azure.js +0 -24
  328. package/utils/clipboard.js +0 -5
  329. /package/components/form/__tests__/{NameNsDescription.test.ts → NameNsDescription.ts} +0 -0
  330. /package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.test.ts → selectors.ts} +0 -0
  331. /package/edit/provisioning.cattle.io.cluster/{tabs/networking/ACE.vue → ACE.vue} +0 -0
  332. /package/edit/provisioning.cattle.io.cluster/{tabs/AgentConfiguration.vue → AgentConfiguration.vue} +0 -0
  333. /package/edit/provisioning.cattle.io.cluster/{tabs/upgrade/DrainOptions.vue → DrainOptions.vue} +0 -0
  334. /package/edit/provisioning.cattle.io.cluster/{tabs/MemberRoles.vue → MemberRoles.vue} +0 -0
  335. /package/edit/provisioning.cattle.io.cluster/{tabs/registries/RegistryMirrors.vue → RegistryMirrors.vue} +0 -0
  336. /package/edit/provisioning.cattle.io.cluster/{tabs/etcd/S3Config.vue → S3Config.vue} +0 -0
  337. /package/plugins/dashboard-store/__tests__/{getters.test.ts → getters.spec.ts} +0 -0
  338. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
@@ -20,6 +20,10 @@ export default {
20
20
 
21
21
  height: {
22
22
  get() {
23
+ if ( process.server ) {
24
+ return 0;
25
+ }
26
+
23
27
  if ( this.userHeight ) {
24
28
  return this.userHeight;
25
29
  }
@@ -48,6 +52,10 @@ export default {
48
52
 
49
53
  width: {
50
54
  get() {
55
+ if ( process.server ) {
56
+ return 0;
57
+ }
58
+
51
59
  if (this.userWidth) {
52
60
  return this.userWidth;
53
61
  }
@@ -334,8 +342,7 @@ export default {
334
342
  />
335
343
  <span class="tab-label"> {{ tab.label }}</span>
336
344
  <i
337
- data-testid="wm-tab-close-button"
338
- class="closer icon icon-fw icon-x wm-closer-button"
345
+ class="closer icon icon-fw icon-x"
339
346
  @click.stop="close(tab.id)"
340
347
  />
341
348
  </div>
@@ -433,16 +440,9 @@ export default {
433
440
  margin-left: 5px;
434
441
  border: 1px solid var(--body-text);
435
442
  border-radius: var(--border-radius);
436
- line-height: 12px;
437
- font-size: 10px;
438
- width: 14px;
439
- align-self: center;
440
- display: flex;
441
- justify-content: center;
442
443
 
443
444
  &:hover {
444
- border-color: var(--link-border);
445
- color: var(--link-border);
445
+ background-color: var(--wm-closer-hover-bg);
446
446
  }
447
447
  }
448
448
  }
@@ -502,5 +502,4 @@ export default {
502
502
  border-right: var(--nav-border-size) solid var(--nav-border);
503
503
  }
504
504
  }
505
-
506
505
  </style>
@@ -1,6 +1,5 @@
1
1
  import { mount, Wrapper } from '@vue/test-utils';
2
2
  import TopLevelMenu from '@shell/components/nav/TopLevelMenu';
3
- import { SETTING } from '@shell/config/settings';
4
3
 
5
4
  // DISCLAIMER: This should not be added here, although we have several store requests which are irrelevant
6
5
  const defaultStore = {
@@ -33,38 +32,6 @@ describe('topLevelMenu', () => {
33
32
  expect(cluster.exists()).toBe(true);
34
33
  });
35
34
 
36
- it('should not "crash" the component if the structure of banner settings is in an old format', () => {
37
- const wrapper: Wrapper<InstanceType<typeof TopLevelMenu>> = mount(TopLevelMenu, {
38
- mocks: {
39
- $store: {
40
- getters: {
41
- 'management/all': () => [{ name: 'whatever' },
42
- // object based on https://github.com/rancher/dashboard/issues/10140#issuecomment-1883252402
43
- {
44
- id: SETTING.BANNERS,
45
- value: JSON.stringify({
46
- banner: {
47
- color: '#78c9cf',
48
- background: '#27292e',
49
- text: 'Hello World!'
50
- },
51
- showHeader: 'true',
52
- showFooter: 'true'
53
- })
54
- }],
55
- ...defaultStore
56
- },
57
- },
58
- },
59
- stubs: ['BrandImage', 'nuxt-link']
60
- });
61
-
62
- expect(wrapper.vm.globalBannerSettings).toStrictEqual({
63
- headerFont: '2em',
64
- footerFont: '2em'
65
- });
66
- });
67
-
68
35
  describe('searching a term', () => {
69
36
  describe('should displays a no results message if have clusters but', () => {
70
37
  it('given no matching clusters', () => {
@@ -5,7 +5,7 @@ import Type from '@shell/components/nav/Type.vue';
5
5
  jest.mock('vue-router');
6
6
 
7
7
  // Configuration text
8
- const className = 'router-link-active';
8
+ const className = 'nuxt-link-active';
9
9
 
10
10
  describe('component: Type', () => {
11
11
  describe('should not use highlight class', () => {
@@ -18,8 +18,10 @@ export default {
18
18
 
19
19
  data.nuxtChild = true
20
20
  const _parent = parent
21
- let depth = 0
21
+ const transitions = parent.$nuxt.nuxt.transitions
22
+ const defaultTransition = parent.$nuxt.nuxt.defaultTransition
22
23
 
24
+ let depth = 0
23
25
  while (parent) {
24
26
  if (parent.$vnode && parent.$vnode.data.nuxtChild) {
25
27
  depth++
@@ -27,18 +29,48 @@ export default {
27
29
  parent = parent.$parent
28
30
  }
29
31
  data.nuxtChildDepth = depth
32
+ const transition = transitions[depth] || defaultTransition
33
+ const transitionProps = {}
34
+ transitionsKeys.forEach((key) => {
35
+ if (typeof transition[key] !== 'undefined') {
36
+ transitionProps[key] = transition[key]
37
+ }
38
+ })
30
39
 
31
40
  const listeners = {}
32
-
33
- // Add triggerScroll event on beforeEnter (fix #1376)
34
- const beforeEnter = listeners.beforeEnter
35
- listeners.beforeEnter = (el) => {
36
- // Ensure to trigger scroll event after calling scrollBehavior
37
- window.$nuxt.$nextTick(() => {
38
- window.$nuxt.$emit('triggerScroll')
39
- })
40
- if (beforeEnter) {
41
- return beforeEnter.call(_parent, el)
41
+ listenersKeys.forEach((key) => {
42
+ if (typeof transition[key] === 'function') {
43
+ listeners[key] = transition[key].bind(_parent)
44
+ }
45
+ })
46
+ if (process.client) {
47
+ // Add triggerScroll event on beforeEnter (fix #1376)
48
+ const beforeEnter = listeners.beforeEnter
49
+ listeners.beforeEnter = (el) => {
50
+ // Ensure to trigger scroll event after calling scrollBehavior
51
+ window.$nuxt.$nextTick(() => {
52
+ window.$nuxt.$emit('triggerScroll')
53
+ })
54
+ if (beforeEnter) {
55
+ return beforeEnter.call(_parent, el)
56
+ }
57
+ }
58
+ }
59
+
60
+ // make sure that leave is called asynchronous (fix #5703)
61
+ if (transition.css === false) {
62
+ const leave = listeners.leave
63
+
64
+ // only add leave listener when user didnt provide one
65
+ // or when it misses the done argument
66
+ if (!leave || leave.length < 2) {
67
+ listeners.leave = (el, done) => {
68
+ if (leave) {
69
+ leave.call(_parent, el)
70
+ }
71
+
72
+ _parent.$nextTick(done)
73
+ }
42
74
  }
43
75
  }
44
76
 
@@ -48,11 +80,43 @@ export default {
48
80
  routerView = h('keep-alive', { props: props.keepAliveProps }, [routerView])
49
81
  }
50
82
 
51
- // this needs to be a "transition" or another non-rendering component,
52
- // otherwise we will break pages like the charts wizard or the extensions main screen (DOM would render an additional element and break CSS)
53
- // we can deal with this later once we remove this component and <nuxt /> component
54
83
  return h('transition', {
84
+ props: transitionProps,
55
85
  on: listeners
56
86
  }, [routerView])
57
87
  }
58
88
  }
89
+
90
+ const transitionsKeys = [
91
+ 'name',
92
+ 'mode',
93
+ 'appear',
94
+ 'css',
95
+ 'type',
96
+ 'duration',
97
+ 'enterClass',
98
+ 'leaveClass',
99
+ 'appearClass',
100
+ 'enterActiveClass',
101
+ 'enterActiveClass',
102
+ 'leaveActiveClass',
103
+ 'appearActiveClass',
104
+ 'enterToClass',
105
+ 'leaveToClass',
106
+ 'appearToClass'
107
+ ]
108
+
109
+ const listenersKeys = [
110
+ 'beforeEnter',
111
+ 'enter',
112
+ 'afterEnter',
113
+ 'enterCancelled',
114
+ 'beforeLeave',
115
+ 'leave',
116
+ 'afterLeave',
117
+ 'leaveCancelled',
118
+ 'beforeAppear',
119
+ 'appear',
120
+ 'afterAppear',
121
+ 'appearCancelled'
122
+ ]
@@ -1,7 +1,7 @@
1
1
  import Vue from 'vue'
2
2
  import { compile } from '../../utils/nuxt'
3
3
 
4
- import NuxtError from '../../components/templates/error.vue'
4
+ import NuxtError from '../../layouts/error.vue'
5
5
 
6
6
  import NuxtChild from './nuxt-child'
7
7
 
@@ -0,0 +1,34 @@
1
+ <script lang="ts" setup>
2
+ import TabTitle from '@shell/components/TabTitle';
3
+ </script>
4
+
5
+ <template>
6
+ <div>
7
+ <header>
8
+ <div class="title">
9
+ <h1
10
+ data-testid="charts-header-title"
11
+ class="m-0"
12
+ >
13
+ <TabTitle :show-child="false">
14
+ {{ t('user.retention.edit.title.header') }}
15
+ </TabTitle>
16
+ <router-link
17
+ :to="{
18
+ name: 'c-cluster-product-resource',
19
+ params: {
20
+ cluster: '_',
21
+ product: 'auth',
22
+ resource: 'management.cattle.io.user',
23
+ }
24
+ }"
25
+ >
26
+ {{ t('user.retention.edit.title.pre') }}
27
+ </router-link>
28
+ {{ t('user.retention.edit.title.post') }}
29
+ </h1>
30
+ </div>
31
+ </header>
32
+ <h2>{{ t('user.retention.edit.title.subTitle') }}</h2>
33
+ </div>
34
+ </template>
@@ -0,0 +1,26 @@
1
+ import { Store } from 'vuex';
2
+
3
+ import { stringFor } from '@shell/plugins/i18n';
4
+
5
+ let store: Store<any> | null = null;
6
+
7
+ export const useI18n = (vuexStore: Store<any>): { t: typeof t } => {
8
+ store = vuexStore;
9
+
10
+ if (!store) {
11
+ throw new Error('usI18n() must be called from setup()');
12
+ }
13
+
14
+ return { t };
15
+ };
16
+
17
+ /**
18
+ * Allows for consuming i18n strings with the Vue composition API.
19
+ * @param key - The key for the i18n string to translate.
20
+ * @param args - An object or array containing arguments for the translation function.
21
+ * @param raw - A boolean determining if the string returned is a raw representation.
22
+ * @returns A translated string or the raw value if the raw parameter is set to true.
23
+ */
24
+ const t = (key: string, args?: unknown, raw?: boolean): unknown => {
25
+ return stringFor(store, key, args, raw);
26
+ };
@@ -0,0 +1,16 @@
1
+ import { getCurrentInstance } from 'vue';
2
+ import { Store } from 'vuex';
3
+
4
+ /**
5
+ * useStore allows for accessing Vuex stores from within a setup function. This is a temporary measure for working with
6
+ * Vuex in Vue2.
7
+ *
8
+ * TODO: #9541 Remove for Vue 3 migration
9
+ */
10
+ export const useStore = ():Store<any> => {
11
+ const vm = getCurrentInstance();
12
+
13
+ if (!vm) throw new Error('useStore() must be called from setup()');
14
+
15
+ return vm.proxy.$store;
16
+ };
@@ -1,3 +1 @@
1
1
  export const NAME = 'harvesterManager';
2
-
3
- export const KIND = { MACHINE_TEMPLATE: 'HarvesterMachineTemplate' };
@@ -2,6 +2,7 @@ import { DOCS_BASE } from '@shell/config/private-label';
2
2
  import { MANAGEMENT } from '@shell/config/types';
3
3
  import { SETTING } from '@shell/config/settings';
4
4
  import { allHash } from '@shell/utils/promise';
5
+ import { isRancherPrime } from '@shell/config/version';
5
6
 
6
7
  const DEFAULT_LINKS = [
7
8
  {
@@ -26,11 +27,17 @@ const DEFAULT_LINKS = [
26
27
  },
27
28
  {
28
29
  key: 'getStarted',
29
- value: `${ DOCS_BASE }/getting-started/overview`,
30
+ value: 'https://ranchermanager.docs.rancher.com/getting-started/overview',
30
31
  enabled: true,
31
32
  },
32
33
  ];
33
34
 
35
+ const COLLECTIVE_LINK = {
36
+ key: 'suseCollective',
37
+ value: 'https://susecollective.suse.com/join/prime',
38
+ enabled: true,
39
+ };
40
+
34
41
  const SUPPORT_LINK = {
35
42
  key: 'commercialSupport',
36
43
  value: '/support',
@@ -47,6 +54,9 @@ const CN_FORUMS_LINK = {
47
54
  // We add a version attribute to the setting so we know what has been migrated and which version of the setting we have
48
55
  export const CUSTOM_LINKS_VERSION = 'v1';
49
56
 
57
+ // Version with collective added (Prime)
58
+ export const CUSTOM_LINKS_COLLECTIVE_VERSION = 'v1.1';
59
+
50
60
  // Fetch the settings required for the links, taking into account legacy settings if we have not migrated
51
61
  export async function fetchLinks(store, hasSupport, isSupportPage, t) {
52
62
  let uiLinks = {};
@@ -63,11 +73,26 @@ export async function fetchLinks(store, hasSupport, isSupportPage, t) {
63
73
  }
64
74
 
65
75
  // If uiLinks is set and has the correct version, then we are okay, otherwise we need to migrate from the old settings
66
- if (uiLinks?.version === CUSTOM_LINKS_VERSION) {
76
+ if (uiLinks?.version?.startsWith(CUSTOM_LINKS_VERSION)) {
77
+ // v1 > v1.1 migration
78
+ if (uiLinks?.version === CUSTOM_LINKS_VERSION) {
79
+ uiLinks.version = CUSTOM_LINKS_COLLECTIVE_VERSION;
80
+
81
+ // Add collective link so that it is enabled by default
82
+ if (!uiLinks.defaults.includes(COLLECTIVE_LINK.key)) {
83
+ uiLinks.defaults.push(COLLECTIVE_LINK.key);
84
+ }
85
+ }
86
+
67
87
  // Map out the default settings, as we only store keys of the ones to show
68
88
  if (uiLinks.defaults) {
69
89
  const defaults = [...DEFAULT_LINKS];
70
90
 
91
+ // Add prime link if necessary
92
+ if (isRancherPrime()) {
93
+ defaults.push(COLLECTIVE_LINK);
94
+ }
95
+
71
96
  // Map the link name stored to the default link, if it exists
72
97
  defaults.forEach((link) => {
73
98
  const enabled = uiLinks.defaults.find((linkName) => linkName === link.key);
@@ -89,6 +114,11 @@ export async function fetchLinks(store, hasSupport, isSupportPage, t) {
89
114
  custom: []
90
115
  };
91
116
 
117
+ // Add prime link if necessary
118
+ if (isRancherPrime()) {
119
+ links.defaults.push(COLLECTIVE_LINK);
120
+ }
121
+
92
122
  // There are two legacy settings:
93
123
  // SETTING.ISSUES - can specify a custom link to use for 'File an issue'
94
124
  // SETTING.COMMUNITY_LINKS - can specify whether to hide all of the default links (other than 'File an issue')
@@ -23,7 +23,6 @@ export function setMode(m) {
23
23
 
24
24
  export function setVendor(v) {
25
25
  vendor = v;
26
- setTitle();
27
26
  }
28
27
 
29
28
  export function setProduct(p) {
@@ -72,24 +71,3 @@ export function getVendor() {
72
71
  export function getProduct() {
73
72
  return product;
74
73
  }
75
-
76
- export function setTitle() {
77
- const v = getVendor();
78
-
79
- if (v === 'Harvester') {
80
- const ico = require(`~shell/assets/images/pl/harvester.png`);
81
-
82
- document.title = 'Harvester';
83
- const link = document.createElement('link');
84
-
85
- link.hid = 'icon';
86
- link.rel = 'icon';
87
- link.type = 'image/x-icon';
88
- link.hrefv = ico;
89
- const head = document.getElementsByTagName('head')[0];
90
-
91
- head.appendChild(link);
92
- } else {
93
- document.title = v;
94
- }
95
- }
@@ -7,7 +7,6 @@ import {
7
7
  MANAGEMENT,
8
8
  NAMESPACE,
9
9
  NORMAN,
10
- SNAPSHOT,
11
10
  VIRTUAL_TYPES,
12
11
  } from '@shell/config/types';
13
12
 
@@ -15,7 +14,7 @@ import {
15
14
  STATE, NAME as NAME_COL, NAMESPACE as NAMESPACE_COL, AGE, KEYS,
16
15
  INGRESS_DEFAULT_BACKEND, INGRESS_TARGET, INGRESS_CLASS,
17
16
  SPEC_TYPE, TARGET_PORT, SELECTOR, NODE as NODE_COL, TYPE, WORKLOAD_IMAGES, POD_IMAGES,
18
- USER_ID, USERNAME, USER_DISPLAY_NAME, USER_PROVIDER, WORKLOAD_ENDPOINTS, STORAGE_CLASS_DEFAULT,
17
+ USER_ID, USERNAME, USER_DISPLAY_NAME, USER_PROVIDER, USER_LAST_LOGIN, USER_DISABLED_IN, USER_DELETED_IN, WORKLOAD_ENDPOINTS, STORAGE_CLASS_DEFAULT,
19
18
  STORAGE_CLASS_PROVISIONER, PERSISTENT_VOLUME_SOURCE,
20
19
  HPA_REFERENCE, MIN_REPLICA, MAX_REPLICA, CURRENT_REPLICA,
21
20
  ACCESS_KEY, DESCRIPTION, EXPIRES, EXPIRY_STATE, SUB_TYPE, AGE_NORMAN, SCOPE_NORMAN, PERSISTENT_VOLUME_CLAIM, RECLAIM_POLICY, PV_REASON, WORKLOAD_HEALTH_SCALE, POD_RESTARTS,
@@ -163,8 +162,6 @@ export function init(store) {
163
162
  configureType(MANAGEMENT.PROJECT_ROLE_TEMPLATE_BINDING, { isEditable: false, depaginate: true });
164
163
  configureType(MANAGEMENT.PROJECT, { displayName: store.getters['i18n/t']('namespace.project.label') });
165
164
  configureType(NORMAN.PROJECT_ROLE_TEMPLATE_BINDING, { depaginate: true });
166
- configureType(SNAPSHOT, { depaginate: true });
167
- configureType(NORMAN.ETCD_BACKUP, { depaginate: true });
168
165
 
169
166
  configureType(EVENT, { limit: 500 });
170
167
  weightType(EVENT, -1, true);
@@ -262,6 +259,9 @@ export function init(store) {
262
259
  USER_DISPLAY_NAME,
263
260
  USER_PROVIDER,
264
261
  USERNAME,
262
+ USER_LAST_LOGIN,
263
+ USER_DISABLED_IN,
264
+ USER_DELETED_IN,
265
265
  AGE
266
266
  ]);
267
267
 
@@ -3,7 +3,6 @@ import { FLEET } from '@shell/config/types';
3
3
  import { STATE, NAME as NAME_COL, AGE } from '@shell/config/table-headers';
4
4
  import { FLEET as FLEET_FEATURE } from '@shell/store/features';
5
5
  import { gitRepoGraphConfig } from '@shell/pages/c/_cluster/fleet/GitRepoGraphConfig';
6
- import { BLANK_CLUSTER } from '@shell/store/store-types.js';
7
6
 
8
7
  export const NAME = 'fleet';
9
8
  export const CHART_NAME = 'fleet';
@@ -27,10 +26,6 @@ export function init(store) {
27
26
  removable: false,
28
27
  showClusterSwitcher: false,
29
28
  showWorkspaceSwitcher: true,
30
- to: {
31
- name: 'c-cluster-fleet',
32
- params: { resource: FLEET.DASHBOARD, cluster: BLANK_CLUSTER }
33
- },
34
29
  });
35
30
 
36
31
  virtualType({
@@ -42,7 +37,7 @@ export function init(store) {
42
37
  weight: 110,
43
38
  route: {
44
39
  name: 'c-cluster-fleet',
45
- params: { resource: FLEET.DASHBOARD, cluster: BLANK_CLUSTER }
40
+ params: { resource: FLEET.DASHBOARD }
46
41
  },
47
42
  exact: true,
48
43
  });
@@ -16,36 +16,6 @@ export function init(store) {
16
16
  showNamespaceFilter: true,
17
17
  });
18
18
 
19
- virtualType({
20
- labelKey: 'legacy.alerts',
21
- name: 'v1-alerts',
22
- group: 'Root',
23
- namespaced: true,
24
- weight: 111,
25
- route: { name: 'c-cluster-legacy-pages-page', params: { page: 'alerts' } },
26
- exact: true
27
- });
28
-
29
- virtualType({
30
- labelKey: 'legacy.catalogs',
31
- name: 'v1-catalogs',
32
- group: 'Root',
33
- namespaced: true,
34
- weight: 111,
35
- route: { name: 'c-cluster-legacy-pages-page', params: { page: 'catalogs' } },
36
- exact: true
37
- });
38
-
39
- virtualType({
40
- labelKey: 'legacy.notifiers',
41
- name: 'v1-notifiers',
42
- group: 'Root',
43
- namespaced: true,
44
- weight: 111,
45
- route: { name: 'c-cluster-legacy-pages-page', params: { page: 'notifiers' } },
46
- exact: true
47
- });
48
-
49
19
  virtualType({
50
20
  ifHave: IF_HAVE.PROJECT,
51
21
  labelKey: 'legacy.project.label',
@@ -68,59 +38,10 @@ export function init(store) {
68
38
  overview: false,
69
39
  });
70
40
 
71
- basicType([
72
- 'v1-alerts',
73
- 'v1-catalogs',
74
- 'v1-notifiers',
75
- 'v1-project-overview'
76
- ]);
41
+ basicType(['v1-project-overview']);
77
42
 
78
43
  // Project Pages
79
44
 
80
- virtualType({
81
- ifHave: IF_HAVE.PROJECT,
82
- labelKey: 'legacy.alerts',
83
- namespaced: true,
84
- name: 'project-alerts',
85
- weight: 105,
86
- route: { name: 'c-cluster-legacy-project-page', params: { page: 'alerts' } },
87
- exact: true,
88
- overview: false,
89
- });
90
-
91
- virtualType({
92
- ifHave: IF_HAVE.PROJECT,
93
- labelKey: 'legacy.apps',
94
- namespaced: true,
95
- name: 'project-apps',
96
- weight: 110,
97
- route: { name: 'c-cluster-legacy-project-page', params: { page: 'apps' } },
98
- exact: true,
99
- overview: false,
100
- });
101
-
102
- virtualType({
103
- ifHave: IF_HAVE.PROJECT,
104
- labelKey: 'legacy.catalogs',
105
- namespaced: true,
106
- name: 'project-catalogs',
107
- weight: 105,
108
- route: { name: 'c-cluster-legacy-project-page', params: { page: 'catalogs' } },
109
- exact: true,
110
- overview: false,
111
- });
112
-
113
- virtualType({
114
- ifHave: IF_HAVE.PROJECT,
115
- labelKey: 'legacy.monitoring',
116
- namespaced: true,
117
- name: 'project-monitoring',
118
- weight: 105,
119
- route: { name: 'c-cluster-legacy-project-page', params: { page: 'monitoring' } },
120
- exact: true,
121
- overview: false,
122
- });
123
-
124
45
  virtualType({
125
46
  ifHave: IF_HAVE.PROJECT,
126
47
  labelKey: 'legacy.secrets',
@@ -144,11 +65,7 @@ export function init(store) {
144
65
  });
145
66
 
146
67
  basicType([
147
- 'project-apps',
148
- 'project-alerts',
149
- 'project-catalogs',
150
68
  'project-config-maps',
151
- 'project-monitoring',
152
69
  'project-secrets',
153
70
  ], 'Project');
154
71
  }
@@ -4,10 +4,9 @@ import {
4
4
  CATALOG,
5
5
  NORMAN,
6
6
  HCI,
7
- MANAGEMENT,
8
- SNAPSHOT
7
+ MANAGEMENT
9
8
  } from '@shell/config/types';
10
- import { MULTI_CLUSTER, RKE1_UI } from '@shell/store/features';
9
+ import { MULTI_CLUSTER } from '@shell/store/features';
11
10
  import { DSL } from '@shell/store/type-map';
12
11
  import { BLANK_CLUSTER } from '@shell/store/store-types.js';
13
12
 
@@ -55,15 +54,24 @@ export function init(store) {
55
54
  route: { name: 'c-cluster-manager-cloudCredential' },
56
55
  });
57
56
 
57
+ virtualType({
58
+ labelKey: 'legacy.psps',
59
+ name: 'pod-security-policies',
60
+ group: 'Root',
61
+ namespaced: false,
62
+ weight: 5,
63
+ icon: 'folder',
64
+ route: { name: 'c-cluster-manager-pages-page', params: { cluster: 'local', page: 'pod-security-policies' } },
65
+ exact: true
66
+ });
67
+
58
68
  basicType([
59
69
  CAPI.RANCHER_CLUSTER,
60
70
  'cloud-credentials',
61
71
  'drivers',
72
+ 'pod-security-policies',
62
73
  ]);
63
74
 
64
- configureType(SNAPSHOT, { depaginate: true });
65
- configureType(NORMAN.ETCD_BACKUP, { depaginate: true });
66
-
67
75
  configureType(CAPI.RANCHER_CLUSTER, {
68
76
  showListMasthead: false, namespaced: false, alias: [HCI.CLUSTER]
69
77
  });
@@ -88,7 +96,6 @@ export function init(store) {
88
96
  });
89
97
 
90
98
  virtualType({
91
- ifFeature: RKE1_UI,
92
99
  labelKey: 'manager.rkeTemplates.label',
93
100
  name: 'rke-templates',
94
101
  group: 'Root',
@@ -99,7 +106,6 @@ export function init(store) {
99
106
  });
100
107
 
101
108
  virtualType({
102
- ifFeature: RKE1_UI,
103
109
  labelKey: 'manager.nodeTemplates.label',
104
110
  name: 'rke-node-templates',
105
111
  group: 'Root',
@@ -125,6 +131,7 @@ export function init(store) {
125
131
  CAPI.MACHINE_SET,
126
132
  CAPI.MACHINE,
127
133
  CATALOG.CLUSTER_REPO,
134
+ 'pod-security-policies',
128
135
  MANAGEMENT.PSA
129
136
  ], 'advanced');
130
137
 
@@ -50,7 +50,6 @@ export const _SPLIT = 'split';
50
50
 
51
51
  // CruResource
52
52
  export const SUB_TYPE = 'type';
53
- export const RKE_TYPE = 'rkeType';
54
53
 
55
54
  // App launch
56
55
  export const REPO_TYPE = 'repo-type';