@rancher/shell 3.0.5-rc.7 → 3.0.5-rc.9

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 (301) hide show
  1. package/assets/brand/classic/metadata.json +3 -0
  2. package/assets/styles/app.scss +1 -0
  3. package/assets/styles/base/_color.scss +19 -0
  4. package/assets/styles/base/_helpers.scss +10 -0
  5. package/assets/styles/base/_variables.scss +1 -1
  6. package/assets/styles/fonts/_icons.scss +1 -32
  7. package/assets/styles/global/_layout.scss +1 -1
  8. package/assets/styles/global/_tooltip.scss +7 -4
  9. package/assets/styles/themes/_dark.scss +272 -259
  10. package/assets/styles/themes/_light.scss +551 -516
  11. package/assets/styles/themes/_modern.scss +936 -0
  12. package/assets/translations/en-us.yaml +219 -38
  13. package/assets/translations/zh-hans.yaml +0 -1
  14. package/chart/__tests__/S3.test.ts +2 -1
  15. package/chart/monitoring/grafana/index.vue +8 -2
  16. package/cloud-credential/generic.vue +18 -10
  17. package/cloud-credential/harvester.vue +1 -9
  18. package/components/ActionMenuShell.vue +3 -1
  19. package/components/AdvancedSection.vue +8 -0
  20. package/components/ChartReadme.vue +17 -7
  21. package/components/Cron/CronExpressionEditor.vue +299 -0
  22. package/components/Cron/CronExpressionEditorModal.vue +247 -0
  23. package/components/Cron/CronTooltip.vue +87 -0
  24. package/components/Cron/types.ts +13 -0
  25. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +1 -26
  26. package/components/Drawer/ResourceDetailDrawer/composables.ts +0 -23
  27. package/components/Drawer/ResourceDetailDrawer/index.vue +17 -4
  28. package/components/ForceDirectedTreeChart/composable.ts +11 -0
  29. package/components/InstallHelmCharts.vue +656 -0
  30. package/components/LazyImage.vue +60 -4
  31. package/components/LocaleSelector.vue +7 -2
  32. package/components/Markdown.vue +4 -0
  33. package/components/PromptModal.vue +1 -1
  34. package/components/Resource/Detail/Card/__tests__/StateCard.test.ts +1 -0
  35. package/components/Resource/Detail/CopyToClipboard.vue +78 -0
  36. package/components/Resource/Detail/FetchLoader/__tests__/composables.test.ts +69 -0
  37. package/components/Resource/Detail/FetchLoader/composables.ts +27 -0
  38. package/components/Resource/Detail/Masthead/composable.ts +16 -0
  39. package/components/Resource/Detail/Masthead/index.vue +37 -0
  40. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +1 -1
  41. package/components/Resource/Detail/Metadata/Annotations/index.vue +1 -1
  42. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +13 -61
  43. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/index.test.ts +33 -6
  44. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +29 -43
  45. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +25 -5
  46. package/components/Resource/Detail/Metadata/KeyValue.vue +12 -23
  47. package/components/Resource/Detail/Metadata/KeyValueRow.vue +144 -0
  48. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +1 -0
  49. package/components/Resource/Detail/Metadata/Labels/index.vue +1 -0
  50. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +30 -32
  51. package/components/Resource/Detail/Metadata/__tests__/KeyValueRow.test.ts +108 -0
  52. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +10 -20
  53. package/components/Resource/Detail/Metadata/__tests__/index.test.ts +12 -5
  54. package/components/Resource/Detail/Metadata/composables.ts +9 -10
  55. package/components/Resource/Detail/Metadata/index.vue +18 -2
  56. package/components/Resource/Detail/Page.vue +35 -21
  57. package/components/Resource/Detail/Preview/Content.vue +63 -0
  58. package/components/Resource/Detail/Preview/Preview.vue +128 -0
  59. package/components/Resource/Detail/Preview/__tests__/Content.spec.ts +71 -0
  60. package/components/Resource/Detail/Preview/__tests__/Preview.spec.ts +121 -0
  61. package/components/Resource/Detail/ResourcePopover/ResourcePopoverCard.vue +141 -0
  62. package/components/Resource/Detail/ResourcePopover/__tests__/ResourcePopoverCard.test.ts +136 -0
  63. package/components/Resource/Detail/ResourcePopover/__tests__/index.test.ts +245 -0
  64. package/components/Resource/Detail/ResourcePopover/index.vue +226 -0
  65. package/components/Resource/Detail/SpacedRow.vue +1 -0
  66. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +8 -14
  67. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +1 -1
  68. package/components/Resource/Detail/TitleBar/composables.ts +3 -6
  69. package/components/Resource/Detail/TitleBar/index.vue +11 -29
  70. package/components/Resource/Detail/ViewOptions/composable.ts +9 -0
  71. package/components/Resource/Detail/ViewOptions/index.vue +41 -0
  72. package/components/Resource/Detail/__tests__/CopyToClipboard.spec.ts +82 -0
  73. package/components/ResourceDetail/Masthead/legacy.vue +0 -19
  74. package/components/ResourceDetail/index.vue +544 -74
  75. package/components/ResourceTable.vue +24 -0
  76. package/components/SlideInPanelManager.vue +10 -3
  77. package/components/SortableTable/index.vue +11 -5
  78. package/components/SortableTable/paging.js +3 -0
  79. package/components/Tabbed/Tab.vue +43 -1
  80. package/components/Tabbed/index.vue +32 -4
  81. package/components/__tests__/Cron/CronExpressionEditor.test.ts +151 -0
  82. package/components/__tests__/Cron/CronExpressionEditorModal.test.ts +81 -0
  83. package/components/__tests__/LazyImage.spec.ts +121 -0
  84. package/components/auth/login/saml.vue +86 -0
  85. package/components/fleet/FleetStatus.vue +4 -0
  86. package/components/form/ClusterAppearance.vue +5 -0
  87. package/components/form/LabeledSelect.vue +8 -8
  88. package/components/form/Members/ClusterPermissionsEditor.vue +1 -1
  89. package/components/form/ProjectMemberEditor.vue +1 -1
  90. package/components/form/ResourceLabeledSelect.vue +19 -6
  91. package/components/form/ResourceTabs/composable.ts +54 -0
  92. package/components/form/ResourceTabs/index.vue +30 -7
  93. package/components/form/SecretSelector.vue +9 -0
  94. package/components/form/Select.vue +13 -10
  95. package/components/form/__tests__/LabeledSelect.test.ts +133 -0
  96. package/components/form/__tests__/Select.test.ts +134 -0
  97. package/components/form/labeled-select-utils/labeled-select-pagination.ts +3 -38
  98. package/components/formatter/FleetApplicationSource.vue +25 -17
  99. package/components/nav/Favorite.vue +4 -0
  100. package/components/nav/NotificationCenter/Notification.vue +1 -27
  101. package/components/nav/WindowManager/index.vue +3 -3
  102. package/composables/useExtensionManager.ts +17 -0
  103. package/config/home-links.js +12 -0
  104. package/config/labels-annotations.js +1 -3
  105. package/config/page-actions.js +0 -1
  106. package/config/product/explorer.js +3 -1
  107. package/config/product/fleet.js +2 -7
  108. package/config/product/manager.js +0 -5
  109. package/config/query-params.js +1 -0
  110. package/config/router/navigation-guards/clusters.js +2 -1
  111. package/config/router/navigation-guards/products.js +1 -1
  112. package/core/extension-manager-impl.js +518 -0
  113. package/core/plugins.js +35 -468
  114. package/core/types.ts +8 -2
  115. package/detail/__tests__/autoscaling.horizontalpodautoscaler.test.ts +1 -0
  116. package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +11 -0
  117. package/detail/__tests__/workload.test.ts +164 -0
  118. package/detail/catalog.cattle.io.app.vue +7 -4
  119. package/detail/configmap.vue +33 -75
  120. package/detail/fleet.cattle.io.bundle.vue +1 -5
  121. package/detail/fleet.cattle.io.cluster.vue +3 -2
  122. package/detail/fleet.cattle.io.gitrepo.vue +76 -49
  123. package/detail/fleet.cattle.io.helmop.vue +78 -49
  124. package/detail/projectsecret.vue +11 -0
  125. package/detail/provisioning.cattle.io.cluster.vue +350 -324
  126. package/detail/secret.vue +49 -308
  127. package/detail/workload/index.vue +38 -21
  128. package/dialog/AddonConfigConfirmationDialog.vue +1 -1
  129. package/dialog/GenericPrompt.vue +1 -1
  130. package/dialog/ImportDialog.vue +9 -2
  131. package/dialog/InstallExtensionDialog.vue +26 -15
  132. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +2 -1
  133. package/edit/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
  134. package/edit/__tests__/resources.cattle.io.restore.test.ts +106 -0
  135. package/edit/cloudcredential.vue +31 -17
  136. package/edit/constraints.gatekeeper.sh.constraint/index.vue +10 -2
  137. package/edit/fleet.cattle.io.cluster.vue +19 -0
  138. package/edit/fleet.cattle.io.gitrepo.vue +28 -22
  139. package/edit/fleet.cattle.io.helmop.vue +78 -56
  140. package/edit/logging.banzaicloud.io.output/index.vue +1 -1
  141. package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +5 -6
  142. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +12 -11
  143. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +11 -1
  144. package/edit/networking.k8s.io.ingress/Certificate.vue +9 -11
  145. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +8 -3
  146. package/edit/networking.k8s.io.ingress/Rule.vue +2 -5
  147. package/edit/networking.k8s.io.ingress/RulePath.vue +17 -11
  148. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +11 -10
  149. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +1 -3
  150. package/edit/networking.k8s.io.networkpolicy/index.vue +17 -17
  151. package/edit/provisioning.cattle.io.cluster/index.vue +14 -19
  152. package/edit/provisioning.cattle.io.cluster/rke2.vue +31 -15
  153. package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +9 -7
  154. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +10 -12
  155. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +39 -38
  156. package/edit/provisioning.cattle.io.cluster/tabs/etcd/S3Config.vue +41 -19
  157. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +16 -3
  158. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +30 -31
  159. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryMirrors.vue +9 -10
  160. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +1 -3
  161. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/DrainOptions.vue +16 -9
  162. package/edit/resources.cattle.io.restore.vue +5 -8
  163. package/edit/workload/index.vue +5 -14
  164. package/list/__tests__/workload.test.ts +1 -0
  165. package/list/provisioning.cattle.io.cluster.vue +1 -69
  166. package/list/workload.vue +8 -1
  167. package/machine-config/__tests__/vmwarevsphere.test.ts +5 -7
  168. package/machine-config/components/GCEImage.vue +6 -5
  169. package/machine-config/google.vue +20 -7
  170. package/machine-config/vmwarevsphere.vue +7 -17
  171. package/mixins/__tests__/chart.test.ts +139 -1
  172. package/mixins/chart.js +58 -20
  173. package/mixins/resource-fetch-api-pagination.js +3 -4
  174. package/models/__tests__/chart.test.ts +111 -80
  175. package/models/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
  176. package/models/__tests__/namespace.test.ts +69 -0
  177. package/models/__tests__/node.test.ts +7 -63
  178. package/models/apps.statefulset.js +8 -10
  179. package/models/catalog.cattle.io.app.js +1 -1
  180. package/models/catalog.cattle.io.operation.js +1 -1
  181. package/models/chart.js +41 -21
  182. package/models/cloudcredential.js +2 -163
  183. package/models/cluster/node.js +7 -7
  184. package/models/cluster.x-k8s.io.machine.js +3 -3
  185. package/models/compliance.cattle.io.clusterscan.js +2 -2
  186. package/models/configmap.js +4 -0
  187. package/models/constraints.gatekeeper.sh.constraint.js +1 -1
  188. package/models/fleet-application.js +16 -63
  189. package/models/fleet.cattle.io.bundle.js +1 -38
  190. package/models/fleet.cattle.io.gitrepo.js +19 -1
  191. package/models/fleet.cattle.io.helmop.js +30 -22
  192. package/models/management.cattle.io.project.js +12 -0
  193. package/models/management.cattle.io.setting.js +4 -0
  194. package/models/namespace.js +30 -0
  195. package/models/persistentvolumeclaim.js +1 -1
  196. package/models/pod.js +2 -2
  197. package/models/provisioning.cattle.io.cluster.js +16 -40
  198. package/models/rke.cattle.io.etcdsnapshot.js +1 -1
  199. package/models/secret.js +4 -0
  200. package/models/storage.k8s.io.storageclass.js +2 -2
  201. package/models/workload.js +6 -3
  202. package/package.json +19 -18
  203. package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +26 -10
  204. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +4 -1
  205. package/pages/c/_cluster/apps/charts/__tests__/AppChartCardFooter.spec.js +41 -0
  206. package/pages/c/_cluster/apps/charts/chart.vue +440 -183
  207. package/pages/c/_cluster/apps/charts/index.vue +1 -0
  208. package/pages/c/_cluster/apps/charts/install.vue +7 -6
  209. package/pages/c/_cluster/explorer/projectsecret.vue +3 -13
  210. package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +102 -12
  211. package/pages/c/_cluster/explorer/tools/index.vue +145 -254
  212. package/pages/c/_cluster/fleet/__tests__/index.test.ts +608 -314
  213. package/pages/c/_cluster/fleet/index.vue +103 -44
  214. package/pages/c/_cluster/manager/cloudCredential/index.vue +20 -60
  215. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +12 -2
  216. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +11 -4
  217. package/pages/c/_cluster/uiplugins/__tests__/index.spec.ts +318 -0
  218. package/pages/c/_cluster/uiplugins/index.vue +256 -387
  219. package/pages/home.vue +1 -9
  220. package/plugins/dashboard-store/actions.js +42 -22
  221. package/plugins/dashboard-store/resource-class.js +80 -0
  222. package/plugins/steve/__tests__/getters.test.ts +1 -1
  223. package/plugins/steve/__tests__/subscribe.spec.ts +259 -1
  224. package/plugins/steve/getters.js +8 -2
  225. package/plugins/steve/resourceWatcher.js +10 -3
  226. package/plugins/steve/subscribe.js +192 -19
  227. package/plugins/steve/worker/web-worker.advanced.js +2 -0
  228. package/public/index.html +2 -1
  229. package/rancher-components/Card/Card.vue +1 -19
  230. package/rancher-components/Form/Checkbox/Checkbox.vue +1 -1
  231. package/rancher-components/Form/Radio/RadioButton.vue +1 -1
  232. package/rancher-components/Form/Radio/RadioGroup.vue +1 -1
  233. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -11
  234. package/rancher-components/Pill/RcCounterBadge/RcCounterBadge.test.ts +53 -0
  235. package/rancher-components/Pill/RcCounterBadge/RcCounterBadge.vue +65 -0
  236. package/rancher-components/Pill/RcCounterBadge/index.ts +1 -0
  237. package/rancher-components/Pill/RcCounterBadge/types.ts +7 -0
  238. package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.test.ts +15 -0
  239. package/rancher-components/Pill/RcStatusBadge/RcStatusBadge.vue +65 -0
  240. package/rancher-components/Pill/RcStatusBadge/index.ts +2 -0
  241. package/rancher-components/Pill/RcStatusBadge/types.ts +5 -0
  242. package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.test.ts +33 -0
  243. package/rancher-components/Pill/RcStatusIndicator/RcStatusIndicator.vue +75 -0
  244. package/rancher-components/Pill/RcStatusIndicator/index.ts +2 -0
  245. package/rancher-components/Pill/RcStatusIndicator/types.ts +7 -0
  246. package/rancher-components/Pill/RcTag/RcTag.test.ts +64 -0
  247. package/rancher-components/Pill/RcTag/RcTag.vue +94 -0
  248. package/rancher-components/Pill/RcTag/index.ts +1 -0
  249. package/rancher-components/Pill/RcTag/types.ts +9 -0
  250. package/rancher-components/Pill/types.ts +3 -0
  251. package/rancher-components/RcButton/RcButton.vue +1 -1
  252. package/rancher-components/RcDropdown/RcDropdown.test.ts +98 -0
  253. package/rancher-components/RcDropdown/RcDropdown.vue +5 -0
  254. package/rancher-components/RcDropdown/RcDropdownItem.vue +7 -1
  255. package/rancher-components/RcDropdown/RcDropdownItemCheckbox.vue +2 -1
  256. package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +2 -1
  257. package/rancher-components/RcDropdown/useDropdownContext.ts +21 -0
  258. package/rancher-components/RcDropdown/useDropdownItem.ts +30 -1
  259. package/rancher-components/RcItemCard/RcItemCard.test.ts +20 -0
  260. package/rancher-components/RcItemCard/RcItemCard.vue +41 -6
  261. package/rancher-components/RcItemCard/RcItemCardAction.vue +12 -0
  262. package/store/__tests__/catalog.test.ts +156 -1
  263. package/store/aws.js +19 -8
  264. package/store/catalog.js +10 -5
  265. package/store/type-map.js +3 -15
  266. package/types/extension-manager.ts +26 -0
  267. package/types/resources/settings.d.ts +1 -1
  268. package/types/shell/index.d.ts +149 -44
  269. package/types/uiplugins.ts +73 -0
  270. package/utils/__tests__/back-off.test.ts +354 -0
  271. package/utils/__tests__/kontainer.test.ts +19 -0
  272. package/utils/__tests__/product.test.ts +129 -0
  273. package/utils/__tests__/resource.test.ts +87 -0
  274. package/utils/__tests__/uiplugins.test.ts +84 -0
  275. package/utils/alertmanagerconfig.js +2 -2
  276. package/utils/auth.js +3 -76
  277. package/utils/back-off.ts +176 -0
  278. package/utils/dynamic-importer.js +8 -0
  279. package/utils/kontainer.ts +3 -5
  280. package/utils/product.ts +39 -0
  281. package/utils/resource.ts +35 -0
  282. package/utils/select.js +0 -24
  283. package/utils/style.ts +3 -0
  284. package/utils/uiplugins.ts +29 -2
  285. package/utils/validators/__tests__/setting.test.js +92 -0
  286. package/utils/validators/formRules/__tests__/index.test.ts +91 -7
  287. package/utils/validators/formRules/index.ts +84 -8
  288. package/utils/validators/setting.js +17 -0
  289. package/vue.config.js +1 -1
  290. package/cloud-credential/__tests__/harvester.test.ts +0 -18
  291. package/components/Resource/Detail/Metadata/Rectangle.vue +0 -34
  292. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +0 -24
  293. package/components/ResourceDetail/Masthead/__tests__/legacy.test.ts +0 -65
  294. package/components/ResourceDetail/__tests__/index.test.ts +0 -135
  295. package/components/ResourceDetail/legacy.vue +0 -562
  296. package/components/formatter/CloudCredExpired.vue +0 -69
  297. package/pages/explorer/resource/detail/configmap.vue +0 -42
  298. package/pages/explorer/resource/detail/projectsecret.vue +0 -9
  299. package/pages/explorer/resource/detail/secret.vue +0 -63
  300. package/utils/aws.js +0 -0
  301. /package/components/{ForceDirectedTreeChart.vue → ForceDirectedTreeChart/index.vue} +0 -0
@@ -41,7 +41,7 @@ export default class PVC extends SteveModel {
41
41
  insertAt(out, 0, {
42
42
  action: 'goToEditVolumeSize',
43
43
  enabled: this.expandable && this.bound,
44
- icon: 'icon icon-fw icon-plus',
44
+ icon: 'icon icon-plus',
45
45
  label: this.t('persistentVolumeClaim.expand.label'),
46
46
  });
47
47
 
package/models/pod.js CHANGED
@@ -61,7 +61,7 @@ export default class Pod extends WorkloadService {
61
61
  return {
62
62
  action: 'openShell',
63
63
  enabled: !!this.links.view && this.isRunning,
64
- icon: 'icon icon-fw icon-chevron-right',
64
+ icon: 'icon-chevron-right',
65
65
  label: 'Execute Shell',
66
66
  total: 1,
67
67
  };
@@ -71,7 +71,7 @@ export default class Pod extends WorkloadService {
71
71
  return {
72
72
  action: 'openLogs',
73
73
  enabled: !!this.links.view,
74
- icon: 'icon icon-fw icon-chevron-right',
74
+ icon: 'icon icon-chevron-right',
75
75
  label: 'View Logs',
76
76
  total: 1,
77
77
  };
@@ -74,15 +74,17 @@ export default class ProvCluster extends SteveModel {
74
74
  return super.creationTimestamp;
75
75
  }
76
76
 
77
- // Models can specify a single action that will be shown as a button in the details masthead
78
- get detailsAction() {
79
- const canExplore = this.mgmt?.isReady && !this.hasError;
80
-
81
- return {
82
- action: 'explore',
83
- label: this.$rootGetters['i18n/t']('cluster.explore'),
84
- enabled: canExplore,
85
- };
77
+ get canExplore() {
78
+ return this.mgmt?.isReady && !this.hasError;
79
+ }
80
+
81
+ get canEdit() {
82
+ // If the cluster is a KEV1 cluster or Harvester cluster then prevent edit
83
+ if (this.isKev1 || this.isHarvester) {
84
+ return false;
85
+ }
86
+
87
+ return super.canEdit;
86
88
  }
87
89
 
88
90
  get _availableActions() {
@@ -134,7 +136,7 @@ export default class ProvCluster extends SteveModel {
134
136
  }, {
135
137
  action: 'restoreSnapshotAction',
136
138
  label: this.$rootGetters['i18n/t']('nav.restoreSnapshot'),
137
- icon: 'icon icon-fw icon-backup-restore',
139
+ icon: 'icon icon-backup-restore',
138
140
  enabled: canSnapshot,
139
141
  }, {
140
142
  action: 'rotateCertificates',
@@ -148,19 +150,6 @@ export default class ProvCluster extends SteveModel {
148
150
  enabled: canEditRKE2cluster
149
151
  }, { divider: true }];
150
152
 
151
- // Harvester Cluster 1:1 Harvester Cloud Cred
152
- if (this.cloudCredential?.canRenew || this.cloudCredential?.canBulkRenew) {
153
- out.splice(0, 0, { divider: true });
154
- out.splice(0, 0, {
155
- action: 'renew',
156
- enabled: this.cloudCredential?.canRenew,
157
- bulkable: this.cloudCredential?.canBulkRenew,
158
- bulkAction: 'renewBulk',
159
- icon: 'icon icon-fw icon-refresh',
160
- label: this.$rootGetters['i18n/t']('cluster.cloudCredentials.renew'),
161
- });
162
- }
163
-
164
153
  const all = actions.concat(out);
165
154
 
166
155
  // If the cluster is a KEV1 cluster or Harvester cluster then prevent edit
@@ -1018,24 +1007,11 @@ export default class ProvCluster extends SteveModel {
1018
1007
  return super.description || this.mgmt?.description;
1019
1008
  }
1020
1009
 
1021
- renew() {
1022
- return this.cloudCredential?.renew();
1023
- }
1024
-
1025
- renewBulk(clusters = []) {
1026
- // In theory we don't need to filter by cloudCred, but do so for safety
1027
- const cloudCredentials = clusters.filter((c) => c.cloudCredential).map((c) => c.cloudCredential);
1028
-
1029
- return this.cloudCredential?.renewBulk(cloudCredentials);
1010
+ get disableResourceDetailDrawerConfigTab() {
1011
+ return !!this.isHarvester;
1030
1012
  }
1031
1013
 
1032
- get cloudCredential() {
1033
- return this.$rootGetters['rancher/all'](NORMAN.CLOUD_CREDENTIAL).find((cc) => cc.id === this.spec.cloudCredentialSecretName);
1034
- }
1035
-
1036
- get cloudCredentialWarning() {
1037
- const expireData = this.cloudCredential?.expireData;
1038
-
1039
- return expireData?.expired || expireData?.expiring;
1014
+ get fullDetailPageOverride() {
1015
+ return true;
1040
1016
  }
1041
1017
  }
@@ -17,7 +17,7 @@ export default class EtcdBackup extends NormanModel {
17
17
  return [{
18
18
  action: 'promptRestore',
19
19
  enabled,
20
- icon: 'icon icon-fw icon-backup-restore',
20
+ icon: 'icon icon-backup-restore',
21
21
  label: 'Restore'
22
22
  }];
23
23
  }
package/models/secret.js CHANGED
@@ -625,4 +625,8 @@ export default class Secret extends SteveModel {
625
625
 
626
626
  return this.t('resourceTable.groupLabel.project', { name: escapeHtml(this?.project?.nameDisplay || '') }, true);
627
627
  }
628
+
629
+ get fullDetailPageOverride() {
630
+ return true;
631
+ }
628
632
  }
@@ -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-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-checkmark',
152
152
  label: this.t('storageClass.actions.setAsDefault'),
153
153
  });
154
154
  }
@@ -1,7 +1,7 @@
1
1
  import { findBy, insertAt } from '@shell/utils/array';
2
2
  import { CATTLE_PUBLIC_ENDPOINTS } from '@shell/config/labels-annotations';
3
3
  import { WORKLOAD_TYPES, SERVICE, POD } from '@shell/config/types';
4
- import { get, set } from '@shell/utils/object';
4
+ import { set } from '@shell/utils/object';
5
5
  import day from 'dayjs';
6
6
  import { convertSelectorObj, parse } from '@shell/utils/selector';
7
7
  import { SEPARATOR } from '@shell/config/workload';
@@ -76,7 +76,7 @@ export default class Workload extends WorkloadService {
76
76
  insertAt(out, 0, {
77
77
  action: 'openShell',
78
78
  enabled: !!this.links.view,
79
- icon: 'icon icon-fw icon-chevron-right',
79
+ icon: 'icon icon-chevron-right',
80
80
  label: this.t('action.openShell'),
81
81
  total: 1,
82
82
  });
@@ -595,6 +595,9 @@ export default class Workload extends WorkloadService {
595
595
  return selector;
596
596
  }
597
597
 
598
+ /**
599
+ * Match Expression version of the podSelector
600
+ */
598
601
  get podMatchExpression() {
599
602
  return this.podSelector ? parse(this.podSelector) : null;
600
603
  }
@@ -632,7 +635,7 @@ export default class Workload extends WorkloadService {
632
635
  return undefined;
633
636
  }
634
637
 
635
- return (get(this, 'metadata.relationships') || []).filter((relationship) => relationship.toType === WORKLOAD_TYPES.JOB);
638
+ return this.metadata?.relationships?.filter((relationship) => relationship.toType === WORKLOAD_TYPES.JOB) || [];
636
639
  }
637
640
 
638
641
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rancher/shell",
3
- "version": "3.0.5-rc.7",
3
+ "version": "3.0.5-rc.9",
4
4
  "description": "Rancher Dashboard Shell",
5
5
  "repository": "https://github.com/rancherlabs/dashboard",
6
6
  "license": "Apache-2.0",
@@ -27,17 +27,18 @@
27
27
  "e2e:dev": "start-server-and-test dev https://localhost:8005 cy:open"
28
28
  },
29
29
  "dependencies": {
30
- "@aws-sdk/client-ec2": "3.658.1",
31
- "@aws-sdk/client-eks": "3.1.0",
32
- "@aws-sdk/client-iam": "3.658.1",
33
- "@aws-sdk/client-kms": "3.8.1",
30
+ "@aws-sdk/client-ec2": "3.863.0",
31
+ "@aws-sdk/client-eks": "3.879.0",
32
+ "@aws-sdk/client-iam": "3.863.0",
33
+ "@aws-sdk/client-kms": "3.863.0",
34
+ "@smithy/fetch-http-handler": "5.1.1",
34
35
  "@babel/plugin-proposal-optional-chaining": "7.21.0",
35
36
  "@babel/plugin-proposal-private-methods": "7.18.6",
36
37
  "@babel/plugin-proposal-private-property-in-object": "7.14.5",
37
38
  "@babel/preset-typescript": "7.16.7",
38
39
  "@novnc/novnc": "1.2.0",
39
40
  "@popperjs/core": "2.11.8",
40
- "@rancher/icons": "2.0.37",
41
+ "@rancher/icons": "2.0.38",
41
42
  "@types/is-url": "1.2.30",
42
43
  "@types/node": "20.10.8",
43
44
  "@types/semver": "^7.5.8",
@@ -51,7 +52,7 @@
51
52
  "add": "2.0.6",
52
53
  "ansi_up": "5.0.0",
53
54
  "axios-retry": "3.1.9",
54
- "axios": "1.8.4",
55
+ "axios": "1.12.2",
55
56
  "babel-eslint": "10.1.0",
56
57
  "babel-plugin-module-resolver": "4.0.0",
57
58
  "babel-preset-vue": "2.0.2",
@@ -63,17 +64,17 @@
63
64
  "color": "4.2.3",
64
65
  "cookie-universal": "2.2.2",
65
66
  "cookie": "0.7.0",
66
- "core-js": "3.40.0",
67
- "cron-validator": "1.3.1",
67
+ "core-js": "3.45.0",
68
+ "cron-validator": "1.4.0",
68
69
  "cronstrue": "2.53.0",
69
70
  "cross-env": "7.0.3",
70
71
  "css-loader": "6.7.3",
71
72
  "csv-loader": "3.0.3",
72
73
  "custom-event-polyfill": "^1.0.7",
73
74
  "cypress": "11.1.0",
74
- "d3-selection": "1.4.1",
75
+ "d3-selection": "3.0.0",
75
76
  "d3": "7.3.0",
76
- "dayjs": "1.8.29",
77
+ "dayjs": "1.11.18",
77
78
  "defu": "5.0.1",
78
79
  "diff2html": "3.4.24",
79
80
  "dompurify": "3.2.5",
@@ -83,7 +84,7 @@
83
84
  "eslint-import-resolver-node": "0.3.9",
84
85
  "eslint-module-utils": "2.6.1",
85
86
  "eslint-plugin-cypress": "2.12.1",
86
- "eslint-plugin-import": "2.31.0",
87
+ "eslint-plugin-import": "2.32.0",
87
88
  "eslint-plugin-jest": "24.4.0",
88
89
  "eslint-plugin-n": "15.2.0",
89
90
  "eslint-plugin-vue": "9.32.0",
@@ -108,7 +109,7 @@
108
109
  "jsdiff": "1.1.1",
109
110
  "jsonpath-plus": "10.3.0",
110
111
  "jsrsasign": "11.0.0",
111
- "jszip": "3.8.0",
112
+ "jszip": "3.10.1",
112
113
  "lodash": "4.17.21",
113
114
  "marked": "4.0.17",
114
115
  "node-polyfill-webpack-plugin": "3.0.0",
@@ -117,7 +118,7 @@
117
118
  "papaparse": "5.3.0",
118
119
  "portal-vue": "~3.0.0",
119
120
  "sass-loader": "12.6.0",
120
- "sass": "1.83.1",
121
+ "sass": "1.89.2",
121
122
  "serve-static": "1.14.1",
122
123
  "set-cookie-parser": "2.4.6",
123
124
  "shell-quote": "1.7.3",
@@ -129,15 +130,15 @@
129
130
  "ufo": "0.7.11",
130
131
  "unfetch": "4.2.0",
131
132
  "url-parse": "1.5.10",
132
- "vue-router": "4.5.0",
133
+ "vue-router": "4.5.1",
133
134
  "vue-select": "4.0.0-beta.6",
134
135
  "vue-server-renderer": "2.7.16",
135
- "vue": "^3.2.13",
136
+ "vue": "3.5.18",
136
137
  "vue3-resize": "0.2.0",
137
138
  "vue3-virtual-scroll-list": "0.2.1",
138
139
  "vuedraggable": "4.1.0",
139
140
  "vuex": "4.1.0",
140
- "webpack-bundle-analyzer": "4.5.0",
141
+ "webpack-bundle-analyzer": "4.10.2",
141
142
  "webpack-virtual-modules": "0.4.3",
142
143
  "worker-loader": "3.0.8",
143
144
  "xterm-addon-canvas": "0.5.0",
@@ -171,4 +172,4 @@
171
172
  ".vue"
172
173
  ]
173
174
  }
174
- }
175
+ }
@@ -5,12 +5,15 @@ interface FooterItem {
5
5
  icon?: string;
6
6
  iconTooltip?: Record<{key?: string, text?: string}>;
7
7
  labels: string[];
8
+ labelTooltip?: string;
9
+ type?: string;
8
10
  }
9
11
 
10
12
  const emit = defineEmits<{(e: 'click:item', type: string, label: string): void; }>();
11
13
 
12
14
  defineProps<{
13
15
  items: FooterItem[];
16
+ clickable?: boolean;
14
17
  }>();
15
18
 
16
19
  function onClickItem(type: string, label: string) {
@@ -32,19 +35,32 @@ function onClickItem(type: string, label: string) {
32
35
  v-clean-tooltip="t(footerItem.iconTooltip?.key)"
33
36
  :class="['icon', 'app-chart-card-footer-item-icon', footerItem.icon]"
34
37
  />
35
- <rc-item-card-action
38
+ <template
36
39
  v-for="(label, j) in footerItem.labels"
37
40
  :key="j"
38
- class="app-chart-card-footer-item-text secondary-text-link"
39
- data-testid="app-chart-card-footer-item-text"
40
- tabindex="0"
41
- :aria-label="t('catalog.charts.appChartCard.footerItem.ariaLabel')"
42
- @click="onClickItem(footerItem.type, label)"
43
- @keydown.enter="onClickItem(footerItem.type, label)"
44
- @keydown.space.prevent="onClickItem(footerItem.type, label)"
45
41
  >
46
- {{ label }}<span v-if="footerItem.labels.length > 1 && j !== footerItem.labels.length - 1">, </span>
47
- </rc-item-card-action>
42
+ <rc-item-card-action
43
+ v-if="clickable && footerItem.type"
44
+ v-clean-tooltip="footerItem.labelTooltip"
45
+ class="app-chart-card-footer-item-text secondary-text-link"
46
+ data-testid="app-chart-card-footer-item-text"
47
+ tabindex="0"
48
+ :aria-label="t('catalog.charts.appChartCard.footerItem.ariaLabel')"
49
+ @click="onClickItem(footerItem.type, label)"
50
+ >
51
+ {{ label }}
52
+ <span v-if="footerItem.labels.length > 1 && j !== footerItem.labels.length - 1">, </span>
53
+ </rc-item-card-action>
54
+ <span
55
+ v-else
56
+ v-clean-tooltip="footerItem.labelTooltip"
57
+ class="app-chart-card-footer-item-text"
58
+ data-testid="app-chart-card-footer-item-text"
59
+ >
60
+ {{ label }}
61
+ <span v-if="footerItem.labels.length > 1 && j !== footerItem.labels.length - 1">, </span>
62
+ </span>
63
+ </template>
48
64
  </div>
49
65
  </div>
50
66
  </template>
@@ -4,6 +4,7 @@ interface SubHeaderItem {
4
4
  icon: string;
5
5
  iconTooltip?: Record<{key?: string, text?: string}>;
6
6
  label: string;
7
+ labelTooltip?: string;
7
8
  }
8
9
 
9
10
  defineProps<{
@@ -24,7 +25,9 @@ defineProps<{
24
25
  v-clean-tooltip="t(subHeaderItem.iconTooltip.key)"
25
26
  :class="['icon', 'app-chart-card-sub-header-item-icon', subHeaderItem.icon]"
26
27
  />
27
- <p>{{ subHeaderItem.label }}</p>
28
+ <p v-clean-tooltip="subHeaderItem.labelTooltip">
29
+ {{ subHeaderItem.label }}
30
+ </p>
28
31
  </div>
29
32
  </div>
30
33
  </template>
@@ -0,0 +1,41 @@
1
+ import { shallowMount } from '@vue/test-utils';
2
+ import AppChartCardFooter from '../AppChartCardFooter.vue';
3
+ import { REPO } from '@shell/config/query-params';
4
+
5
+ describe('component: AppChartCardFooter', () => {
6
+ it('should render', () => {
7
+ const wrapper = shallowMount(AppChartCardFooter, {
8
+ propsData: { items: [] },
9
+ stubs: { 'rc-item-card-action': true },
10
+ });
11
+
12
+ expect(wrapper.exists()).toBe(true);
13
+ });
14
+
15
+ it('should apply tooltips to labels', () => {
16
+ const tooltipContent = 'my tooltip';
17
+ const items = [
18
+ {
19
+ type: REPO,
20
+ labels: ['label1', 'label2'],
21
+ labelTooltip: tooltipContent,
22
+ },
23
+ ];
24
+
25
+ const wrapper = shallowMount(AppChartCardFooter, {
26
+ propsData: { items },
27
+ stubs: { 'rc-item-card-action': true },
28
+ directives: {
29
+ 'clean-tooltip': (el, binding) => {
30
+ el.setAttribute('data-tooltip-value', binding.value);
31
+ },
32
+ },
33
+ });
34
+
35
+ const actions = wrapper.findAll('[data-tooltip-value]');
36
+
37
+ expect(actions).toHaveLength(2);
38
+ expect(actions.at(0).attributes('data-tooltip-value')).toBe(tooltipContent);
39
+ expect(actions.at(1).attributes('data-tooltip-value')).toBe(tooltipContent);
40
+ });
41
+ });