dashboard-shell-shell 1.0.122 → 1.0.1000000082

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 (372) hide show
  1. package/.DS_Store +0 -0
  2. package/assets/brand/harvester/favicon.png +0 -0
  3. package/assets/brand/suse/favicon.png +0 -0
  4. package/assets/icons/iconfont.css +19 -3
  5. package/assets/icons/iconfont.js +1 -1
  6. package/assets/icons/iconfont.json +28 -0
  7. package/assets/icons/iconfont.ttf +0 -0
  8. package/assets/icons/iconfont.woff +0 -0
  9. package/assets/icons/iconfont.woff2 +0 -0
  10. package/assets/images/pl/half-logo.svg +2 -23
  11. package/assets/styles/base/_functions.scss +0 -0
  12. package/assets/styles/base/_mixins.scss +0 -0
  13. package/assets/styles/base/_variables.scss +1 -1
  14. package/assets/styles/global/_labeled-input.scss +0 -1
  15. package/assets/styles/global/_layout.scss +1 -1
  16. package/assets/styles/global/_select.scss +4 -2
  17. package/assets/styles/global/_table.scss +5 -0
  18. package/assets/styles/vendor/vue-select.scss +2 -1
  19. package/assets/translations/en-us.yaml +1 -1
  20. package/assets/translations/zh-hans.yaml +25 -15
  21. package/chart/monitoring/index.vue +3 -1
  22. package/chart/monitoring/prometheus/index.vue +13 -10
  23. package/cloud-credential/aws.vue +2 -0
  24. package/components/ActionDropdown.vue +1 -1
  25. package/components/ActionDropdownShell.vue +71 -0
  26. package/components/ActionMenu.vue +2 -2
  27. package/components/ActionMenuShell.vue +3 -0
  28. package/components/AppModal.vue +84 -8
  29. package/components/AssignTo.vue +25 -11
  30. package/components/AsyncButton.vue +24 -7
  31. package/components/BannerGraphic.vue +1 -0
  32. package/components/ButtonDropdown.vue +26 -4
  33. package/components/ButtonGroup.vue +4 -0
  34. package/components/ButtonMultiAction.vue +1 -0
  35. package/components/CodeMirror.vue +19 -6
  36. package/components/CommunityLinks.vue +3 -3
  37. package/components/ConsumptionGauge.vue +24 -5
  38. package/components/CopyToClipboardText.vue +2 -1
  39. package/components/CruResource.vue +13 -7
  40. package/components/CruResourceFooter.vue +2 -2
  41. package/components/DashboardOptions.vue +29 -17
  42. package/components/DetailText.vue +5 -0
  43. package/components/DisableAuthProviderModal.vue +1 -0
  44. package/components/DotState.vue +84 -0
  45. package/components/ExplorerMembers.vue +1 -1
  46. package/components/ExplorerProjectsNamespaces.vue +88 -16
  47. package/components/FixedBanner.vue +19 -12
  48. package/components/GlobalRoleBindings.vue +5 -1
  49. package/components/GrafanaDashboard.vue +4 -4
  50. package/components/GrowlManager.vue +4 -1
  51. package/components/HardwareResourceGauge.vue +39 -3
  52. package/components/InfoBox.vue +3 -3
  53. package/components/InputOrDisplay.vue +28 -2
  54. package/components/LabelValue.vue +20 -1
  55. package/components/LandingPagePreference.vue +5 -3
  56. package/components/LocaleSelector.vue +39 -93
  57. package/components/ModalManager.vue +55 -0
  58. package/components/ModalWithCard.vue +13 -3
  59. package/components/MoveModal.vue +1 -0
  60. package/components/PodSecurityAdmission.vue +1 -1
  61. package/components/PromptChangePassword.vue +1 -1
  62. package/components/PromptModal.vue +16 -3
  63. package/components/PromptRemove.vue +29 -9
  64. package/components/PromptRestore.vue +1 -0
  65. package/components/ResourceCancelModal.vue +1 -0
  66. package/components/ResourceDetail/Masthead.vue +52 -17
  67. package/components/ResourceDetail/__tests__/Masthead.test.ts +5 -1
  68. package/components/ResourceDetail/index.vue +54 -16
  69. package/components/ResourceList/Masthead.vue +26 -4
  70. package/components/ResourceList/index.vue +4 -3
  71. package/components/ResourceTable.vue +1 -0
  72. package/components/SideNav.vue +20 -15
  73. package/components/SlideInPanelManager.vue +126 -0
  74. package/components/SortableTable/THead.vue +10 -4
  75. package/components/SortableTable/actions.js +1 -1
  76. package/components/SortableTable/index.vue +542 -553
  77. package/components/SortableTable/selection.js +2 -13
  78. package/components/StatusBadge.vue +77 -0
  79. package/components/Tabbed/Tab.vue +3 -3
  80. package/components/Tabbed/index.vue +47 -29
  81. package/components/Wizard.vue +2 -2
  82. package/components/YamlEditor.vue +1 -1
  83. package/components/__tests__/AsyncButton.test.ts +2 -2
  84. package/components/__tests__/FixedBanner.test.ts +3 -3
  85. package/components/__tests__/ModalManager.spec.ts +176 -0
  86. package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
  87. package/components/auth/Principal.vue +10 -3
  88. package/components/auth/RoleDetailEdit.vue +1 -1
  89. package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
  90. package/components/form/ArrayList.vue +123 -85
  91. package/components/form/ArrayListGrouped.vue +10 -2
  92. package/components/form/ArrayListSelect.vue +1 -1
  93. package/components/form/Command.vue +6 -15
  94. package/components/form/EnvVars.vue +16 -8
  95. package/components/form/Footer.vue +10 -7
  96. package/components/form/HealthCheck.vue +3 -3
  97. package/components/form/HookOption.vue +11 -16
  98. package/components/form/InputWithSelect.vue +6 -5
  99. package/components/form/KeyValue.vue +39 -10
  100. package/components/form/LabeledSelect.vue +73 -77
  101. package/components/form/Labels.vue +6 -3
  102. package/components/form/LifecycleHooks.vue +3 -3
  103. package/components/form/MatchExpressions.vue +42 -17
  104. package/components/form/NameNsDescription.vue +163 -116
  105. package/components/form/Networking.vue +20 -12
  106. package/components/form/NodeAffinity.vue +31 -23
  107. package/components/form/NodeScheduling.vue +13 -3
  108. package/components/form/Password.vue +11 -5
  109. package/components/form/PodAffinity.vue +47 -48
  110. package/components/form/Probe.vue +68 -66
  111. package/components/form/ResourceQuota/Namespace.vue +4 -4
  112. package/components/form/ResourceQuota/NamespaceRow.vue +5 -7
  113. package/components/form/ResourceQuota/Project.vue +9 -5
  114. package/components/form/ResourceQuota/ProjectRow.vue +4 -6
  115. package/components/form/ResourceSelector.vue +7 -9
  116. package/components/form/SSHKnownHosts/KnownHostsEditDialog.vue +6 -3
  117. package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +12 -1
  118. package/components/form/SSHKnownHosts/index.vue +16 -2
  119. package/components/form/Security.vue +54 -56
  120. package/components/form/Select.vue +44 -7
  121. package/components/form/ShellInput.vue +5 -1
  122. package/components/form/SimpleSecretSelector.vue +29 -9
  123. package/components/form/Tolerations.vue +5 -1
  124. package/components/form/UnitInput.vue +10 -5
  125. package/components/form/ValueFromResource.vue +134 -121
  126. package/components/form/WorkloadPorts.vue +18 -18
  127. package/components/form/__tests__/ArrayList.test.ts +5 -2
  128. package/components/form/__tests__/MatchExpressions.test.ts +12 -12
  129. package/components/form/__tests__/NameNsDescription.test.ts +115 -14
  130. package/components/form/__tests__/Probe.test.ts +12 -8
  131. package/components/form/__tests__/SSHKnownHosts.test.ts +11 -0
  132. package/components/form/__tests__/Select.test.ts +37 -0
  133. package/components/form/__tests__/UnitInput.test.ts +4 -5
  134. package/components/formatter/BadgeStateFormatter.vue +8 -5
  135. package/components/formatter/InternalExternalIP.vue +2 -0
  136. package/components/formatter/LiveDate.vue +3 -3
  137. package/components/formatter/SecretData.vue +20 -7
  138. package/components/nav/Favorite.vue +5 -1
  139. package/components/nav/Group.vue +18 -4
  140. package/components/nav/Header.vue +39 -13
  141. package/components/nav/Jump.vue +7 -0
  142. package/components/nav/NamespaceFilter.vue +21 -11
  143. package/components/nav/Pinned.vue +1 -1
  144. package/components/nav/TopLevelMenu.vue +5 -17
  145. package/components/nav/Type.vue +30 -33
  146. package/components/nav/__tests__/TopLevelMenu.test.ts +0 -40
  147. package/components/rancherResourceDetail/Masthead.vue +769 -0
  148. package/components/rancherResourceDetail/__tests__/Masthead.test.ts +65 -0
  149. package/components/rancherResourceDetail/index.vue +591 -0
  150. package/components/rancherResourceList/Masthead-btn.vue +225 -0
  151. package/components/rancherResourceList/Masthead.vue +375 -0
  152. package/components/rancherResourceList/ResourceLoadingIndicator.vue +140 -0
  153. package/components/rancherResourceList/index.vue +307 -0
  154. package/components/rancherResourceList/resource-list.config.js +7 -0
  155. package/components/rancherResourceTable.vue +783 -0
  156. package/components/rancherSortableTable/THead.vue +561 -0
  157. package/components/rancherSortableTable/actions.js +153 -0
  158. package/components/rancherSortableTable/advanced-filtering.js +272 -0
  159. package/components/rancherSortableTable/debug.js +117 -0
  160. package/components/rancherSortableTable/filtering.js +290 -0
  161. package/components/rancherSortableTable/grouping.js +48 -0
  162. package/components/rancherSortableTable/index.vue +2712 -0
  163. package/components/rancherSortableTable/paging.js +155 -0
  164. package/components/rancherSortableTable/selection.js +629 -0
  165. package/components/rancherSortableTable/sortable-config.ts +4 -0
  166. package/components/rancherSortableTable/sorting.js +129 -0
  167. package/components/templates/blank.vue +4 -1
  168. package/components/templates/default.vue +8 -0
  169. package/components/templates/home.vue +10 -1
  170. package/components/templates/plain.vue +10 -1
  171. package/composables/focusTrap.ts +11 -3
  172. package/composables/useRuntimeFlag.ts +29 -0
  173. package/config/private-label.js +15 -10
  174. package/config/router/routes.js +21 -13
  175. package/config/store.js +4 -0
  176. package/config/table-headers.js +3 -2
  177. package/config/uiplugins.js +5 -1
  178. package/core/plugin-routes.ts +5 -115
  179. package/core/plugins.js +1 -1
  180. package/core/types.ts +23 -2
  181. package/detail/__tests__/autoscaling.horizontalpodautoscaler.test.ts +84 -23
  182. package/detail/autoscaling.horizontalpodautoscaler/index.vue +13 -3
  183. package/detail/provisioning.cattle.io.cluster.vue +72 -6
  184. package/dialog/AddCustomBadgeDialog.vue +1 -0
  185. package/dialog/DeactivateDriverDialog.vue +5 -4
  186. package/dialog/ForceMachineRemoveDialog.vue +6 -3
  187. package/dialog/GitRepoForceUpdateDialog.vue +1 -1
  188. package/dialog/ScalePoolDownDialog.vue +2 -2
  189. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +16 -3
  190. package/edit/auth/__tests__/oidc.test.ts +162 -88
  191. package/edit/auth/azuread.vue +2 -1
  192. package/edit/auth/github.vue +1 -1
  193. package/edit/auth/googleoauth.vue +5 -1
  194. package/edit/auth/ldap/__tests__/config.test.ts +0 -14
  195. package/edit/auth/ldap/config.vue +0 -24
  196. package/edit/auth/ldap/index.vue +1 -1
  197. package/edit/auth/oidc.vue +39 -6
  198. package/edit/auth/saml.vue +1 -1
  199. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +5 -2
  200. package/edit/cloudcredential.vue +24 -9
  201. package/edit/fleet.cattle.io.clustergroup.vue +5 -3
  202. package/edit/fleet.cattle.io.gitrepo.vue +2 -0
  203. package/edit/logging-flow/Match.vue +1 -1
  204. package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +40 -9
  205. package/edit/management.cattle.io.user.vue +28 -3
  206. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +19 -19
  207. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +31 -31
  208. package/edit/monitoring.coreos.com.alertmanagerconfig/routeConfig.vue +36 -12
  209. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +6 -6
  210. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +10 -10
  211. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +4 -4
  212. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +4 -4
  213. package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +1 -1
  214. package/edit/monitoring.coreos.com.receiver/auth.vue +29 -29
  215. package/edit/monitoring.coreos.com.receiver/types/email.vue +6 -6
  216. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +10 -10
  217. package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +5 -5
  218. package/edit/monitoring.coreos.com.receiver/types/slack.vue +4 -4
  219. package/edit/namespace.vue +1 -2
  220. package/edit/networking.k8s.io.ingress/IngressClass.vue +7 -3
  221. package/edit/networking.k8s.io.ingress/RulePath.vue +1 -1
  222. package/edit/networking.k8s.io.ingress/__tests__/IngressClass.test.ts +58 -0
  223. package/edit/persistentvolume/__tests__/persistentvolume.test.ts +14 -2
  224. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +4 -1
  225. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +26 -9
  226. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +8 -10
  227. package/edit/provisioning.cattle.io.cluster/rke2.vue +31 -40
  228. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +5 -2
  229. package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +6 -1
  230. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +33 -2
  231. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +3 -3
  232. package/edit/service.vue +0 -3
  233. package/edit/token.vue +32 -11
  234. package/edit/workload/Job.vue +6 -6
  235. package/edit/workload/__tests__/Job.test.ts +0 -1
  236. package/edit/workload/index.vue +1 -0
  237. package/edit/workload/mixins/workload.js +3 -3
  238. package/initialize/install-plugins.js +2 -1
  239. package/list/harvesterhci.io.management.cluster.vue +4 -1
  240. package/list/management.cattle.io.feature.vue +1 -0
  241. package/list/namespace.vue +3 -1
  242. package/list/provisioning.cattle.io.cluster.vue +20 -12
  243. package/list/workload.vue +7 -6
  244. package/machine-config/__tests__/vmwarevsphere.test.ts +48 -3
  245. package/machine-config/azure.vue +16 -4
  246. package/machine-config/vmwarevsphere.vue +16 -0
  247. package/mixins/resource-fetch.js +2 -1
  248. package/models/__tests__/logging.banzaicloud.io.flow.test.ts +88 -0
  249. package/models/__tests__/namespace.test.ts +25 -1
  250. package/models/cloudcredential.js +5 -0
  251. package/models/kontainerdriver.js +6 -3
  252. package/models/logging.banzaicloud.io.flow.js +2 -1
  253. package/models/management.cattle.io.node.js +3 -3
  254. package/models/management.cattle.io.setting.js +2 -1
  255. package/models/namespace.js +4 -5
  256. package/models/nodedriver.js +6 -3
  257. package/models/storage.k8s.io.storageclass.js +2 -2
  258. package/models/workload.js +4 -1
  259. package/package.json +1 -1
  260. package/pages/about.vue +16 -8
  261. package/pages/account/index.vue +80 -24
  262. package/pages/account/pri.vue +229 -0
  263. package/pages/auth/login.vue +195 -44
  264. package/pages/auth/logout.vue +4 -1
  265. package/pages/auth/setup.vue +144 -19
  266. package/pages/auth/verify.vue +13 -8
  267. package/pages/auth copy/login.vue +595 -0
  268. package/pages/auth copy/logout.vue +47 -0
  269. package/pages/auth copy/setup.vue +523 -0
  270. package/pages/auth copy/verify.vue +203 -0
  271. package/pages/c/_cluster/_product/namespaces.vue +5 -5
  272. package/pages/c/_cluster/apps/charts/chart.vue +1 -1
  273. package/pages/c/_cluster/apps/charts/install.vue +26 -26
  274. package/pages/c/_cluster/auth/config/index.vue +10 -12
  275. package/pages/c/_cluster/explorer/EventsTable.vue +38 -33
  276. package/pages/c/_cluster/explorer/index.vue +17 -15
  277. package/pages/c/_cluster/istio/index.vue +2 -2
  278. package/pages/c/_cluster/longhorn/index.vue +1 -1
  279. package/pages/c/_cluster/monitoring/index.vue +1 -1
  280. package/pages/c/_cluster/monitoring/monitor/_namespace/_id.vue +4 -2
  281. package/pages/c/_cluster/monitoring/monitor/create.vue +4 -2
  282. package/pages/c/_cluster/monitoring/monitor/index.vue +2 -2
  283. package/pages/c/_cluster/monitoring/route-receiver/_id.vue +4 -2
  284. package/pages/c/_cluster/monitoring/route-receiver/create.vue +5 -2
  285. package/pages/c/_cluster/neuvector/index.vue +1 -1
  286. package/pages/c/_cluster/settings/brand.vue +3 -3
  287. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +8 -10
  288. package/pages/diagnostic.vue +59 -11
  289. package/pages/fail-whale.vue +14 -8
  290. package/pages/home.vue +24 -18
  291. package/pages/prefs.vue +9 -7
  292. package/pages/support/index.vue +4 -1
  293. package/pkg/tsconfig.json +9 -9
  294. package/pkg/vue.config.js +1 -1
  295. package/plugins/dashboard-store/normalize.js +3 -1
  296. package/plugins/dashboard-store/resource-class.js +31 -29
  297. package/plugins/internal-api/index.ts +37 -0
  298. package/plugins/internal-api/shared/base-api.ts +13 -0
  299. package/plugins/internal-api/shell/shell.api.ts +108 -0
  300. package/promptRemove/management.cattle.io.fleetworkspace.vue +1 -1
  301. package/promptRemove/management.cattle.io.globalrole.vue +1 -1
  302. package/promptRemove/management.cattle.io.project.vue +2 -2
  303. package/promptRemove/management.cattle.io.roletemplate.vue +1 -1
  304. package/promptRemove/pod.vue +1 -1
  305. package/public/index.html +2 -1
  306. package/rancher-components/BadgeState/BadgeState.vue +5 -1
  307. package/rancher-components/Banner/Banner.vue +8 -2
  308. package/rancher-components/Card/Card.vue +3 -6
  309. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -0
  310. package/rancher-components/Form/LabeledInput/LabeledInput.vue +5 -2
  311. package/rancher-components/Form/Radio/RadioButton.vue +3 -3
  312. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +1 -5
  313. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  314. package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -2
  315. package/rancher-components/RcDropdown/RcDropdownMenu.vue +7 -3
  316. package/rancher-components/RcDropdown/types.ts +1 -0
  317. package/scripts/clean +0 -0
  318. package/scripts/extension/bundle +20 -0
  319. package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +2 -2
  320. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -1
  321. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
  322. package/scripts/extension/helm/scripts/package +0 -0
  323. package/scripts/extension/helm/scripts/patch +0 -0
  324. package/scripts/extension/helm/scripts/version +0 -0
  325. package/scripts/extension/helmpatch +44 -31
  326. package/scripts/extension/parse-tag-name +0 -0
  327. package/scripts/extension/publish +12 -12
  328. package/scripts/publish-shell.sh +18 -23
  329. package/scripts/serve-pkgs +0 -0
  330. package/scripts/sync-shell-deps +0 -0
  331. package/scripts/test-plugins-build.sh +4 -6
  332. package/scripts/typegen.sh +28 -46
  333. package/server/har-file.js +25 -3
  334. package/static/favicon.ico +0 -0
  335. package/static/favicon.png +0 -0
  336. package/static/loading-indicator.html +2 -2
  337. package/store/aws.js +9 -2
  338. package/store/features.js +2 -1
  339. package/store/i18n.js +3 -3
  340. package/store/modal.ts +71 -0
  341. package/store/slideInPanel.ts +47 -0
  342. package/store/type-map.js +9 -1
  343. package/types/cloud-shell/index.d.ts +11020 -0
  344. package/types/global-vue.d.ts +5 -0
  345. package/types/internal-api/shell/growl.d.ts +25 -0
  346. package/types/internal-api/shell/modal.d.ts +77 -0
  347. package/types/internal-api/shell/slideIn.d.ts +15 -0
  348. package/types/shell/index.d.ts +118 -128
  349. package/types/vue-shim.d.ts +4 -1
  350. package/utils/__tests__/object.test.ts +38 -4
  351. package/utils/__tests__/string.test.ts +2 -2
  352. package/utils/auth.js +1 -0
  353. package/utils/banners.js +0 -45
  354. package/utils/cluster.js +35 -0
  355. package/utils/color.js +9 -8
  356. package/utils/error.js +61 -3
  357. package/utils/errorTranslate.json +450 -30
  358. package/utils/object.js +46 -6
  359. package/utils/router.js +22 -1
  360. package/utils/select.js +26 -3
  361. package/utils/string.js +9 -8
  362. package/utils/title.ts +1 -1
  363. package/utils/validators/machine-pool.ts +20 -0
  364. package/vue.config.js +7 -2
  365. package/components/formatter/ExtensionCache.vue +0 -74
  366. package/components/formatter/Port.vue +0 -24
  367. package/components/formatter/SecretType.vue +0 -41
  368. package/types/resources/fleet.d.ts +0 -57
  369. package/types/resources/pod-security-admission.ts +0 -36
  370. package/types/resources/settings.d.ts +0 -93
  371. package/types/resources/userPreferences.d.ts +0 -13
  372. package/types/vue-shim.d +0 -20
@@ -1,4 +1,4 @@
1
- import { mount } from '@vue/test-utils';
1
+ import { mount, shallowMount } from '@vue/test-utils';
2
2
  import vmwarevsphere from '@shell/machine-config/vmwarevsphere.vue';
3
3
  import { DEFAULT_VALUES, SENTINEL } from '@shell/machine-config/vmwarevsphere-config';
4
4
 
@@ -172,12 +172,12 @@ describe('component: vmwarevsphere', () => {
172
172
  name: 'tag_name',
173
173
  category: 'tag_category',
174
174
  };
175
- const expectedReslut = [{
175
+ const expectedResult = [{
176
176
  ...tag, label: `${ tag.category } / ${ tag.name }`, value: tag.id
177
177
  }];
178
178
  const wrapper = mount(vmwarevsphere, defaultCreateSetup);
179
179
 
180
- expect(wrapper.vm.mapTagsToContent([tag])).toStrictEqual(expectedReslut);
180
+ expect(wrapper.vm.mapTagsToContent([tag])).toStrictEqual(expectedResult);
181
181
  });
182
182
  });
183
183
 
@@ -254,4 +254,49 @@ describe('component: vmwarevsphere', () => {
254
254
  });
255
255
  });
256
256
  });
257
+
258
+ describe('syncNetworkValueForLegacyLabels', () => {
259
+ it('should update the current network value properly', () => {
260
+ const legacyName = 'legacy_name';
261
+ const legacyValue = 'legacy_value';
262
+ const networkLabel = 'network_label';
263
+
264
+ const wrapper = shallowMount(vmwarevsphere, {
265
+ ...defaultEditSetup,
266
+ propsData: {
267
+ ...defaultEditSetup.propsData,
268
+ value: {
269
+ ...defaultEditSetup.propsData.value,
270
+ network: [legacyName]
271
+ }
272
+ },
273
+ computed: {
274
+ networks: () => [
275
+ {
276
+ name: legacyName, label: networkLabel, value: legacyValue
277
+ },
278
+ {
279
+ name: 'name1', label: 'label1', value: 'value1'
280
+ },
281
+ {
282
+ name: 'name2', label: 'label2', value: 'value2'
283
+ },
284
+ {
285
+ name: 'name3', label: 'label3', value: 'value3'
286
+ },
287
+ {
288
+ name: 'name4', label: 'label4', value: 'value4'
289
+ },
290
+ ]
291
+ }
292
+ });
293
+
294
+ // check the current network before updating
295
+ expect(wrapper.vm.value.network).toStrictEqual([legacyName]);
296
+
297
+ wrapper.vm.syncNetworkValueForLegacyLabels();
298
+
299
+ expect(wrapper.vm.value.network).toStrictEqual([legacyValue]);
300
+ });
301
+ });
257
302
  });
@@ -602,7 +602,10 @@ export default {
602
602
  />
603
603
  </div>
604
604
  </div>
605
- <hr class="mt-20">
605
+ <hr
606
+ class="mt-20"
607
+ role="none"
608
+ >
606
609
  <div class="row mt-20">
607
610
  <div class="col span-6">
608
611
  <LabeledInput
@@ -668,7 +671,10 @@ export default {
668
671
  </div>
669
672
  </div>
670
673
  </div>
671
- <hr class="mt-20 mb-20">
674
+ <hr
675
+ class="mt-20 mb-20"
676
+ role="none"
677
+ >
672
678
  <h2>{{ t('cluster.machineConfig.azure.sections.purchasePlan') }}</h2>
673
679
  <div class="row mt-20">
674
680
  <div class="col span-6">
@@ -681,7 +687,10 @@ export default {
681
687
  />
682
688
  </div>
683
689
  </div>
684
- <hr class="mt-20">
690
+ <hr
691
+ class="mt-20"
692
+ role="none"
693
+ >
685
694
  <h2>{{ t('cluster.machineConfig.azure.sections.network') }}</h2>
686
695
  <div class="row mt-20 mb-20">
687
696
  <div class="col span-6">
@@ -803,7 +812,10 @@ export default {
803
812
  />
804
813
  </div>
805
814
  </div>
806
- <hr class="mt-20 mb-20">
815
+ <hr
816
+ class="mt-20 mb-20"
817
+ role="none"
818
+ >
807
819
  <h2>{{ t('cluster.machineConfig.azure.sections.disks') }}</h2>
808
820
  <div class="row mt-20 mb-20">
809
821
  <div class="col span-6">
@@ -558,6 +558,7 @@ export default {
558
558
  this.resetValueIfNecessary('network', content, options, true);
559
559
 
560
560
  set(this, 'networksResults', content);
561
+ this.syncNetworkValueForLegacyLabels();
561
562
  this.vappMode = this.getInitialVappMode(this.value);
562
563
  },
563
564
 
@@ -669,6 +670,21 @@ export default {
669
670
  }
670
671
  },
671
672
 
673
+ // Network labels have been updated to include the MOID.
674
+ // To ensure previously selected networks remain consistent with this change,
675
+ // we update the current network value to allow correct selection from the network list.
676
+ syncNetworkValueForLegacyLabels() {
677
+ const currentNetwork = this.value.network[0];
678
+
679
+ if (this.mode !== _CREATE && currentNetwork) {
680
+ const networkMatch = this.networks.find((network) => currentNetwork === network.name && currentNetwork !== network.label);
681
+
682
+ if (networkMatch) {
683
+ this.value.network = [networkMatch.value];
684
+ }
685
+ }
686
+ },
687
+
672
688
  mapPathOptionsToContent(pathOptions) {
673
689
  return (pathOptions || []).map((pathOption) => {
674
690
  return {
@@ -3,6 +3,7 @@ import { COUNT, MANAGEMENT } from '@shell/config/types';
3
3
  import { SETTING, DEFAULT_PERF_SETTING } from '@shell/config/settings';
4
4
  import ResourceFetchNamespaced from '@shell/mixins/resource-fetch-namespaced';
5
5
  import ResourceFetchApiPagination from '@shell/mixins/resource-fetch-api-pagination';
6
+ import { cloud2harvesterhci } from '@shell/utils/router'
6
7
 
7
8
  // Number of pages to fetch when loading incrementally
8
9
  const PAGES = 4;
@@ -34,7 +35,7 @@ export default {
34
35
  // Normally owner components supply `resource` and `inStore` as part of their data, however these are needed here before parent data runs
35
36
  // So set up both here
36
37
  const params = { ...this.$route.params };
37
- const resource = params.resource || this.schema?.id; // Resource can either be on a page showing single list, or a page of a resource showing a list of another resource
38
+ const resource = cloud2harvesterhci(params.resource) || this.schema?.id; // Resource can either be on a page showing single list, or a page of a resource showing a list of another resource
38
39
  const inStore = this.$store.getters['currentStore'](resource);
39
40
 
40
41
  return {
@@ -0,0 +1,88 @@
1
+ import LogFlow from '@shell/models/logging.banzaicloud.io.flow';
2
+
3
+ describe('class LogFlow', () => {
4
+ it('prop "outputs" should take namespace in consideration when filtering logging v2 "outputs"', () => {
5
+ const logOutputs = [
6
+ {
7
+ apiVersion: 'logging.banzaicloud.io/v1beta1',
8
+ kind: 'Output',
9
+ metadata: {
10
+ creationTimestamp: '2025-03-17T10:51:55Z',
11
+ namespace: 'default',
12
+ name: 'output1',
13
+ uid: '927b4a2e-6be0-476f-9bdd-cf30c4a27d8b'
14
+ },
15
+ name: 'output1',
16
+ spec: { awsElasticsearch: { endpoint: {} } },
17
+ status: { active: false }
18
+ },
19
+ {
20
+ apiVersion: 'logging.banzaicloud.io/v1beta1',
21
+ kind: 'Output',
22
+ metadata: {
23
+ creationTimestamp: '2025-03-17T10:51:55Z',
24
+ namespace: 'cattle-fleet-system',
25
+ name: 'output2',
26
+ uid: '927b4a2e-6be0-476f-9bdd-cf30c4a27d8c'
27
+ },
28
+ name: 'output2',
29
+ spec: { awsElasticsearch: { endpoint: {} } },
30
+ status: { active: false }
31
+ },
32
+ {
33
+ apiVersion: 'logging.banzaicloud.io/v1beta1',
34
+ kind: 'Output',
35
+ metadata: {
36
+ creationTimestamp: '2025-03-17T10:51:55Z',
37
+ namespace: 'cattle-fleet-system',
38
+ name: 'output3',
39
+ uid: '927b4a2e-6be0-476f-9bdd-cf30c4a27d8d'
40
+ },
41
+ name: 'output3',
42
+ spec: { awsElasticsearch: { endpoint: {} } },
43
+ status: { active: false }
44
+ },
45
+ {
46
+ apiVersion: 'logging.banzaicloud.io/v1beta1',
47
+ kind: 'Output',
48
+ metadata: {
49
+ creationTimestamp: '2025-03-17T10:51:55Z',
50
+ namespace: 'kube-system',
51
+ name: 'output4',
52
+ uid: '927b4a2e-6be0-476f-9bdd-cf30c4a27d8e'
53
+ },
54
+ name: 'output4',
55
+ spec: { awsElasticsearch: { endpoint: {} } },
56
+ status: { active: false }
57
+ },
58
+ ];
59
+
60
+ const logFlowData = {
61
+ apiVersion: 'logging.banzaicloud.io/v1beta1',
62
+ kind: 'Flow',
63
+ metadata: {
64
+ name: 'flow2',
65
+ creationTimestamp: '2025-03-17T10:53:02Z',
66
+ generation: 1,
67
+ namespace: 'cattle-fleet-system',
68
+ resourceVersion: '4070',
69
+ uid: 'fdf7d553-d101-4c37-91b0-784f95dc950a',
70
+ fields: [
71
+ 'flow2', true, null
72
+ ]
73
+ },
74
+ spec: {
75
+ localOutputRefs: [
76
+ 'output2',
77
+ 'output3'
78
+ ]
79
+ }
80
+ };
81
+
82
+ const logFlow = new LogFlow(logFlowData);
83
+
84
+ jest.spyOn(logFlow, 'allOutputs', 'get').mockReturnValue(logOutputs);
85
+
86
+ expect(logFlow.outputs).toStrictEqual([logOutputs[1], logOutputs[2]]);
87
+ });
88
+ });
@@ -84,7 +84,31 @@ describe('class Namespace', () => {
84
84
  });
85
85
 
86
86
  it.todo('should return the project');
87
- it.todo('should return the groupByLabel with i18n');
87
+
88
+ describe('handling groupById', () => {
89
+ it('should return the groupById if have project id', () => {
90
+ const namespace = new Namespace({});
91
+
92
+ jest.spyOn(namespace, 'project', 'get').mockReturnValue({
93
+ id: 'mock-project-id',
94
+ type: 'project',
95
+ name: 'mock-project',
96
+ });
97
+
98
+ expect(namespace.groupById).toStrictEqual('mock-project-id');
99
+ });
100
+
101
+ it('should return the groupById if project id undefined', () => {
102
+ const t = jest.fn(() => 'Not in a Project');
103
+ const ctx = { rootGetters: { 'i18n/t': t } };
104
+ const namespace = new Namespace({}, ctx);
105
+
106
+ jest.spyOn(namespace, 'project', 'get').mockReturnValue({});
107
+
108
+ expect(namespace.groupById).toStrictEqual('Not in a Project');
109
+ });
110
+ });
111
+
88
112
  it.todo('should return the project name with i18n');
89
113
  it.todo('should return the projectNameSort');
90
114
  it.todo('should check if istioInstalled');
@@ -275,6 +275,11 @@ export default class CloudCredential extends NormanModel {
275
275
  expired: false,
276
276
  expiring: true,
277
277
  };
278
+ } else if (this.expiresIn) {
279
+ return {
280
+ expired: false,
281
+ expiring: false,
282
+ };
278
283
  }
279
284
 
280
285
  return null;
@@ -72,14 +72,17 @@ export default class KontainerDriver extends Driver {
72
72
  return this.$dispatch('rancher/request', {
73
73
  url: `v3/kontainerDrivers/${ escape(this.id) }?action=activate`,
74
74
  method: 'post',
75
- }, { root: true });
75
+ }, { root: true }).catch((err) => {
76
+ this.$dispatch('growl/fromError', { title: this.t('drivers.error.activate', { name: this.nameDisplay }), err }, { root: true });
77
+ });
76
78
  }
77
79
 
78
80
  async activateBulk(resources) {
79
81
  await Promise.all(resources.map((resource) => this.$dispatch('rancher/request', {
80
82
  url: `v3/kontainerDrivers/${ escape(resource.id) }?action=activate`,
81
83
  method: 'post',
82
- }, { root: true }
83
- )));
84
+ }, { root: true }).catch((err) => {
85
+ this.$dispatch('growl/fromError', { title: this.t('drivers.error.activate', { name: resource.nameDisplay }), err }, { root: true });
86
+ })));
84
87
  }
85
88
  }
@@ -64,7 +64,8 @@ export default class LogFlow extends SteveModel {
64
64
  get outputs() {
65
65
  const localOutputRefs = this.spec?.localOutputRefs || [];
66
66
 
67
- return this.allOutputs.filter((output) => localOutputRefs.includes(output.name));
67
+ return this.allOutputs.filter((output) => localOutputRefs.includes(output.name) &&
68
+ output.metadata?.namespace === this.metadata?.namespace);
68
69
  }
69
70
 
70
71
  get outputsSortable() {
@@ -168,12 +168,12 @@ export default class MgmtNode extends HybridModel {
168
168
  }
169
169
 
170
170
  get canScaleDown() {
171
- if (!this.isEtcd && !this.isControlPlane) {
171
+ const hasAction = this.norman?.actions?.scaledown;
172
+
173
+ if (!this.isEtcd && !this.isControlPlane && hasAction) {
172
174
  return true;
173
175
  }
174
176
 
175
- const hasAction = this.norman?.actions?.scaledown;
176
-
177
177
  return hasAction && notOnlyOfRole(this, this.provisioningCluster?.nodes);
178
178
  }
179
179
  }
@@ -2,6 +2,7 @@ import { ALLOWED_SETTINGS } from '@shell/config/settings';
2
2
  import HybridModel from '@shell/plugins/steve/hybrid-class';
3
3
  import { isServerUrl } from '@shell/utils/validators/setting';
4
4
  import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
5
+ import { harvester2cloud } from '@shell/utils/router'
5
6
  import {
6
7
  _EDIT,
7
8
  _UNFLAG,
@@ -54,7 +55,7 @@ export default class Setting extends HybridModel {
54
55
  goToEdit(moreQuery = {}) {
55
56
  if (this.$rootGetters['currentProduct'].inStore === HARVESTER) {
56
57
  location.name = `${ HARVESTER }-c-cluster-brand`;
57
- location.params = { cluster: this.$rootGetters['currentCluster'].id, product: HARVESTER };
58
+ location.params = { cluster: this.$rootGetters['currentCluster'].id, product: harvester2cloud(HARVESTER) };
58
59
 
59
60
  location.query = {
60
61
  ...location.query,
@@ -5,7 +5,6 @@ import {
5
5
  import { ISTIO, MANAGEMENT } from '@shell/config/types';
6
6
 
7
7
  import { get, set } from '@shell/utils/object';
8
- import { escapeHtml } from '@shell/utils/string';
9
8
  import { insertAt, isArray } from '@shell/utils/array';
10
9
  import SteveModel from '@shell/plugins/steve/steve-class';
11
10
  import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
@@ -124,11 +123,11 @@ export default class Namespace extends SteveModel {
124
123
  return project;
125
124
  }
126
125
 
127
- get groupByLabel() {
128
- const name = this.project?.nameDisplay;
126
+ get groupById() {
127
+ const projectId = this.project?.id;
129
128
 
130
- if ( name ) {
131
- return this.$rootGetters['i18n/t']('resourceTable.groupLabel.project', { name: escapeHtml(name) });
129
+ if ( projectId ) {
130
+ return projectId;
132
131
  } else {
133
132
  return this.$rootGetters['i18n/t']('resourceTable.groupLabel.notInAProject');
134
133
  }
@@ -80,14 +80,17 @@ export default class NodeDriver extends Driver {
80
80
  return this.$dispatch('rancher/request', {
81
81
  url: `v3/nodeDrivers/${ escape(this.id) }?action=activate`,
82
82
  method: 'post',
83
- }, { root: true });
83
+ }, { root: true }).catch((err) => {
84
+ this.$dispatch('growl/fromError', { title: this.t('drivers.error.activate', { name: this.nameDisplay }), err }, { root: true });
85
+ });
84
86
  }
85
87
 
86
88
  async activateBulk(resources) {
87
89
  await Promise.all(resources.map((resource) => this.$dispatch('rancher/request', {
88
90
  url: `v3/nodeDrivers/${ escape(resource.id) }?action=activate`,
89
91
  method: 'post',
90
- }, { root: true }
91
- )));
92
+ }, { root: true }).catch((err) => {
93
+ this.$dispatch('growl/fromError', { title: this.t('drivers.error.activate', { name: resource.nameDisplay }), err }, { root: true });
94
+ })));
92
95
  }
93
96
  }
@@ -141,14 +141,14 @@ export default class extends SteveModel {
141
141
  out.unshift({
142
142
  action: 'resetDefault',
143
143
  enabled: true,
144
- icon: 'icon icon-fw icon-checkmark',
144
+ // icon: 'icon icon-fw icon-checkmark',
145
145
  label: this.t('storageClass.actions.resetDefault'),
146
146
  });
147
147
  } else {
148
148
  out.unshift({
149
149
  action: 'setDefault',
150
150
  enabled: true,
151
- icon: 'icon icon-fw icon-checkmark',
151
+ // icon: 'icon icon-fw icon-checkmark',
152
152
  label: this.t('storageClass.actions.setAsDefault'),
153
153
  });
154
154
  }
@@ -34,7 +34,10 @@ export default class Workload extends WorkloadService {
34
34
  enabled: !!this.links.update,
35
35
  });
36
36
 
37
- if (type !== WORKLOAD_TYPES.JOB && type !== WORKLOAD_TYPES.CRON_JOB) {
37
+ if (type !== WORKLOAD_TYPES.JOB &&
38
+ type !== WORKLOAD_TYPES.CRON_JOB &&
39
+ type !== WORKLOAD_TYPES.REPLICA_SET
40
+ ) {
38
41
  insertAt(out, 0, {
39
42
  action: 'toggleRollbackModal',
40
43
  label: this.t('action.rollback'),
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "dashboard-shell-shell",
3
+ "version": "1.0.1000000082",
3
4
  "description": "Rancher Dashboard Shell",
4
5
  "repository": "https://github.com/rancherlabs/dashboard",
5
6
  "license": "Apache-2.0",
6
7
  "author": "SUSE",
7
8
  "private": false,
8
- "version": "1.0.00000000122",
9
9
  "engines": {
10
10
  "node": ">=20.0.0"
11
11
  },
package/pages/about.vue CHANGED
@@ -119,8 +119,12 @@ export default {
119
119
  <table>
120
120
  <thead>
121
121
  <tr>
122
- <th>{{ t('about.versions.component') }}</th>
123
- <th>{{ t('about.versions.version') }}</th>
122
+ <th class="custom-th">
123
+ {{ t('about.versions.component') }}
124
+ </th>
125
+ <th class="custom-th">
126
+ {{ t('about.versions.version') }}
127
+ </th>
124
128
  </tr>
125
129
  </thead>
126
130
  <tr v-if="rancherVersion">
@@ -210,11 +214,11 @@ export default {
210
214
  v-for="(d, i) in downloadImageList"
211
215
  :key="i"
212
216
  >
213
- <td>
217
+ <th>
214
218
  <div class="os">
215
219
  <i :class="`icon ${d.icon} mr-5`" /> {{ t(d.label) }}
216
220
  </div>
217
- </td>
221
+ </th>
218
222
  <td>
219
223
  <a
220
224
  v-if="d.imageList"
@@ -241,11 +245,11 @@ export default {
241
245
  :key="i"
242
246
  class="link"
243
247
  >
244
- <td>
248
+ <th>
245
249
  <div class="os">
246
250
  <i :class="`icon ${d.icon} mr-5`" /> {{ t(d.label) }}
247
251
  </div>
248
- </td>
252
+ </th>
249
253
  <td>
250
254
  <a
251
255
  v-if="d.cliLink"
@@ -273,7 +277,7 @@ export default {
273
277
  overflow: hidden;
274
278
  border-radius: var(--border-radius);
275
279
 
276
- tr > td:first-of-type {
280
+ tr > th:first-of-type {
277
281
  width: 20%;
278
282
  }
279
283
 
@@ -284,11 +288,15 @@ export default {
284
288
  text-align: left;
285
289
  }
286
290
 
287
- th {
291
+ th.custom-th {
288
292
  background-color: var(--sortable-table-top-divider);
289
293
  border-bottom: 1px solid var(--sortable-table-top-divider);
290
294
  }
291
295
 
296
+ th:not(.custom-th) {
297
+ font-weight: normal;
298
+ }
299
+
292
300
  a {
293
301
  cursor: pointer;
294
302
  }