@rancher/shell 0.2.5 → 0.3.1

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 (635) hide show
  1. package/assets/styles/global/_button.scss +5 -1
  2. package/assets/styles/global/_columns.scss +4 -0
  3. package/assets/styles/global/_layout.scss +1 -2
  4. package/assets/styles/global/_select.scss +1 -4
  5. package/assets/styles/themes/_dark.scss +8 -4
  6. package/assets/styles/themes/_light.scss +9 -3
  7. package/assets/styles/themes/_suse.scss +1 -1
  8. package/assets/styles/vendor/vue-select.scss +4 -3
  9. package/assets/translations/en-us.yaml +682 -74
  10. package/assets/translations/zh-hans.yaml +554 -170
  11. package/chart/istio.vue +1 -1
  12. package/chart/monitoring/grafana/index.vue +1 -1
  13. package/chart/monitoring/index.vue +1 -1
  14. package/chart/monitoring/prometheus/index.vue +4 -4
  15. package/chart/monitoring/steps/uninstall-v1.vue +2 -2
  16. package/cloud-credential/azure.vue +23 -0
  17. package/cloud-credential/harvester.vue +25 -62
  18. package/cloud-credential/pnap.vue +80 -0
  19. package/components/AdvancedSection.vue +9 -2
  20. package/components/Alert.vue +2 -2
  21. package/components/AlertTable.vue +1 -1
  22. package/components/AssignTo.vue +1 -1
  23. package/components/AsyncButton.vue +2 -2
  24. package/components/BrandImage.vue +1 -1
  25. package/components/ButtonDropdown.vue +0 -2
  26. package/components/ButtonGroup.vue +2 -1
  27. package/components/ClusterProviderIcon.vue +2 -2
  28. package/components/Collapse.vue +6 -2
  29. package/components/CollapsibleCard.vue +2 -3
  30. package/components/ConsumptionGauge.vue +4 -4
  31. package/components/ContainerResourceLimit.vue +1 -1
  32. package/components/CountBox.vue +1 -1
  33. package/components/CountGauge.vue +1 -1
  34. package/components/CruResource.vue +43 -5
  35. package/components/DashboardMetrics.vue +2 -2
  36. package/components/DetailTop.vue +58 -3
  37. package/components/DisableAuthProviderModal.vue +106 -0
  38. package/components/DraggableZone.vue +181 -0
  39. package/components/ExplorerMembers.vue +253 -30
  40. package/components/ExplorerProjectsNamespaces.vue +82 -38
  41. package/components/FixedBanner.vue +6 -6
  42. package/components/GlobalRoleBindings.vue +6 -6
  43. package/components/GradientBox.vue +2 -2
  44. package/components/GrowlManager.vue +3 -3
  45. package/components/IconMessage.vue +4 -4
  46. package/components/IconOrSvg.vue +149 -0
  47. package/components/Import.vue +5 -5
  48. package/components/InputOrDisplay.vue +1 -1
  49. package/components/KeyValueView.vue +1 -1
  50. package/components/LabelValue.vue +1 -1
  51. package/components/LogItem.vue +69 -0
  52. package/components/ModalWithCard.vue +1 -1
  53. package/components/MoveModal.vue +1 -1
  54. package/components/PercentageBar.vue +2 -2
  55. package/components/PodSecurityAdmission.vue +302 -0
  56. package/components/PromptChangePassword.vue +1 -1
  57. package/components/PromptModal.vue +2 -1
  58. package/components/PromptRemove.vue +2 -2
  59. package/components/PromptRestore.vue +13 -13
  60. package/components/Questions/Question.js +1 -1
  61. package/components/ResourceCancelModal.vue +3 -3
  62. package/components/ResourceDetail/Masthead.vue +55 -3
  63. package/components/ResourceDetail/index.vue +12 -5
  64. package/components/ResourceList/Masthead.vue +12 -2
  65. package/components/ResourceList/ResourceLoadingIndicator.vue +12 -2
  66. package/components/ResourceList/index.vue +53 -12
  67. package/components/ResourceList/resource-list.config.js +7 -0
  68. package/components/ResourceSummary.vue +4 -4
  69. package/components/ResourceTable.vue +31 -6
  70. package/components/RoleBindings.vue +19 -19
  71. package/components/SimpleBox.vue +6 -2
  72. package/components/SingleClusterInfo.vue +5 -5
  73. package/components/SortableTable/THead.vue +20 -6
  74. package/components/SortableTable/actions.js +4 -2
  75. package/components/SortableTable/index.vue +30 -19
  76. package/components/SortableTable/selection.js +2 -2
  77. package/components/Tabbed/index.vue +20 -15
  78. package/components/TableSparkLine.vue +1 -1
  79. package/components/TypeDescription.vue +1 -1
  80. package/components/Wizard.vue +1 -1
  81. package/components/YamlEditor.vue +6 -6
  82. package/components/__tests__/ApplicationCard.test.ts +27 -0
  83. package/components/__tests__/AsyncButton.test.ts +140 -0
  84. package/components/__tests__/BackLink.test.ts +33 -0
  85. package/components/__tests__/ButtonGroup.test.ts +124 -0
  86. package/components/__tests__/ClusterBadge.test.ts +32 -0
  87. package/components/__tests__/Collapse.spec.ts +44 -0
  88. package/components/__tests__/CollapsibleCard.test.ts +64 -0
  89. package/components/__tests__/ConsumptionGauge.test.ts +88 -0
  90. package/components/__tests__/CruResource.test.ts +6 -5
  91. package/components/__tests__/FixedBanner.test.ts +129 -0
  92. package/components/__tests__/GrowlManager.test.ts +147 -0
  93. package/components/__tests__/NamespaceFilter.test.ts +221 -0
  94. package/components/__tests__/PercentageBar.test.ts +32 -0
  95. package/components/__tests__/PodSecurityAdmission.test.ts +398 -0
  96. package/components/__tests__/SimpleBox.spec.ts +28 -0
  97. package/components/auth/AuthBanner.vue +20 -10
  98. package/components/auth/RoleDetailEdit.vue +41 -30
  99. package/components/auth/SelectPrincipal.vue +45 -5
  100. package/components/auth/login/ldap.vue +3 -0
  101. package/components/cards/ApplicationCard.vue +10 -5
  102. package/components/fleet/FleetBundleResources.vue +8 -8
  103. package/components/fleet/FleetClusters.vue +10 -10
  104. package/components/fleet/FleetRepos.vue +5 -5
  105. package/components/fleet/FleetResources.vue +6 -6
  106. package/components/fleet/FleetSummary.vue +5 -5
  107. package/components/fleet/ResourcesSummary.vue +1 -1
  108. package/components/form/ArrayList.vue +3 -35
  109. package/components/form/ArrayListGrouped.vue +14 -5
  110. package/components/form/ArrayListSelect.vue +8 -8
  111. package/components/form/BannerSettings.vue +6 -6
  112. package/components/form/ChangePassword.vue +3 -3
  113. package/components/form/Error.vue +10 -2
  114. package/components/form/FileSelector.vue +3 -3
  115. package/components/form/Footer.vue +1 -1
  116. package/components/form/GithubPicker.vue +4 -4
  117. package/components/form/KeyValue.vue +41 -9
  118. package/components/form/LabeledSelect.vue +5 -2
  119. package/components/form/Labels.vue +46 -16
  120. package/components/form/MatchExpressions.vue +1 -1
  121. package/components/form/Members/ClusterPermissionsEditor.vue +28 -28
  122. package/components/form/Members/MembershipEditor.vue +14 -14
  123. package/components/form/NameNsDescription.vue +1 -1
  124. package/components/form/NodeAffinity.vue +1 -1
  125. package/components/form/NodeScheduling.vue +1 -1
  126. package/components/form/Password.vue +3 -3
  127. package/components/form/PodAffinity.vue +1 -1
  128. package/components/form/Probe.vue +3 -3
  129. package/components/form/ProjectMemberEditor.vue +1 -1
  130. package/components/form/ResourceQuota/Project.vue +6 -6
  131. package/components/form/ResourceQuota/shared.js +12 -12
  132. package/components/form/ResourceTabs/index.vue +1 -6
  133. package/components/form/SecretSelector.vue +1 -1
  134. package/components/form/Security.vue +8 -7
  135. package/components/form/Select.vue +7 -2
  136. package/components/form/SelectOrCreateAuthSecret.vue +22 -29
  137. package/components/form/ServicePorts.vue +8 -0
  138. package/components/form/SimpleSecretSelector.vue +1 -1
  139. package/components/form/Taints.vue +1 -1
  140. package/components/form/UnitInput.vue +7 -7
  141. package/components/form/ValueFromResource.vue +1 -1
  142. package/components/form/WorkloadPorts.vue +8 -2
  143. package/components/form/__tests__/ArrayList.test.ts +74 -0
  144. package/components/form/__tests__/ArrayListGrouped.test.ts +6 -4
  145. package/components/formatter/AppSummaryGraph.vue +4 -4
  146. package/components/formatter/BadgeStateFormatter.vue +2 -2
  147. package/components/formatter/Checked.vue +2 -2
  148. package/components/formatter/ClusterLink.vue +8 -3
  149. package/components/formatter/Date.vue +1 -1
  150. package/components/formatter/DelayedValue.vue +1 -1
  151. package/components/formatter/Endpoints.vue +1 -1
  152. package/components/formatter/FleetSummaryGraph.vue +4 -4
  153. package/components/formatter/IconIsDefault.vue +3 -3
  154. package/components/formatter/IconText.vue +4 -4
  155. package/components/formatter/ImagePercentageBar.vue +4 -4
  156. package/components/formatter/IngressFullPath.vue +1 -1
  157. package/components/formatter/InternalExternalIP.vue +11 -8
  158. package/components/formatter/LinkDetail.vue +3 -3
  159. package/components/formatter/List.vue +1 -1
  160. package/components/formatter/ListLink.vue +1 -1
  161. package/components/formatter/ListLinkDetail.vue +1 -1
  162. package/components/formatter/LiveDate.vue +3 -3
  163. package/components/formatter/LiveDuration.vue +78 -0
  164. package/components/formatter/LivePodRestarts.vue +1 -1
  165. package/components/formatter/Number.vue +1 -1
  166. package/components/formatter/Percentage.vue +2 -2
  167. package/components/formatter/PercentageBar.vue +3 -3
  168. package/components/formatter/PodImages.vue +1 -1
  169. package/components/formatter/Principal.vue +1 -1
  170. package/components/formatter/PrincipalGroupBindings.vue +2 -2
  171. package/components/formatter/QualityText.vue +1 -1
  172. package/components/formatter/ReceiverIcons.vue +2 -2
  173. package/components/formatter/Scale.vue +1 -1
  174. package/components/formatter/ScanResult.vue +1 -1
  175. package/components/formatter/SecretData.vue +1 -1
  176. package/components/formatter/ServiceType.vue +1 -1
  177. package/components/formatter/Shortened.vue +1 -1
  178. package/components/formatter/VerticalScroll.vue +2 -2
  179. package/components/formatter/VirtualServiceGateways.vue +3 -3
  180. package/components/formatter/Weight.vue +2 -2
  181. package/components/formatter/WorkloadDetailEndpoints.vue +1 -1
  182. package/components/formatter/WorkloadHealthScale.vue +7 -5
  183. package/components/formatter/__tests__/Date.test.ts +60 -0
  184. package/components/formatter/__tests__/LinkDetail.test.ts +72 -0
  185. package/components/formatter/__tests__/LiveDate.test.ts +84 -0
  186. package/components/formatter/__tests__/Si.test.ts +35 -0
  187. package/components/graph/LinePlot.vue +1 -1
  188. package/components/graph/ProgressArc.vue +5 -5
  189. package/components/nav/GlobalLoading.vue +1 -1
  190. package/components/nav/Header.vue +6 -4
  191. package/components/nav/Jump.vue +3 -3
  192. package/components/nav/NamespaceFilter.vue +200 -68
  193. package/components/nav/TopLevelMenu.vue +24 -21
  194. package/components/nav/Type.vue +1 -1
  195. package/components/nav/WindowManager/ChartReadme.vue +1 -1
  196. package/components/nav/WindowManager/ContainerLogs.vue +84 -127
  197. package/components/nav/WindowManager/ContainerShell.vue +28 -7
  198. package/components/nav/WindowManager/KubectlShell.vue +6 -6
  199. package/components/nav/WindowManager/MachineSsh.vue +1 -1
  200. package/components/nav/WindowManager/Window.vue +2 -0
  201. package/components/nav/WindowManager/index.vue +206 -25
  202. package/config/elemental-types.js +9 -0
  203. package/config/features.js +2 -0
  204. package/config/home-links.js +4 -1
  205. package/config/labels-annotations.js +19 -19
  206. package/config/pod-security-admission.ts +82 -0
  207. package/config/product/apps.js +5 -5
  208. package/config/product/auth.js +22 -21
  209. package/config/product/cis.js +24 -24
  210. package/config/product/explorer.js +25 -24
  211. package/config/product/fleet.js +7 -7
  212. package/config/product/gatekeeper.js +7 -7
  213. package/config/product/istio.js +7 -7
  214. package/config/product/legacy.js +21 -21
  215. package/config/product/logging.js +90 -90
  216. package/config/product/manager.js +19 -15
  217. package/config/product/monitoring.js +36 -36
  218. package/config/product/multi-cluster-apps.js +24 -24
  219. package/config/product/settings.js +42 -42
  220. package/config/secret.js +0 -1
  221. package/config/settings.ts +39 -22
  222. package/config/table-headers.js +70 -52
  223. package/config/types.js +11 -8
  224. package/config/uiplugins.js +4 -4
  225. package/content/docs/zh-hans/getting-started.md +113 -137
  226. package/content/docs/zh-hans/whats-new.md +8 -46
  227. package/creators/app/app.package.json +4 -1
  228. package/creators/app/{.eslintignore → files/.eslintignore} +0 -0
  229. package/creators/app/{.eslintrc.js → files/.eslintrc.js} +0 -0
  230. package/creators/app/{.vscode → files/.vscode}/settings.json +0 -0
  231. package/creators/app/{babel.config.js → files/babel.config.js} +0 -0
  232. package/creators/app/{nuxt.config.js → files/nuxt.config.js} +0 -0
  233. package/creators/app/{tsconfig.json → files/tsconfig.json} +2 -1
  234. package/creators/app/init +16 -17
  235. package/creators/app/package.json +7 -1
  236. package/creators/pkg/{babel.config.js → files/babel.config.js} +0 -0
  237. package/creators/pkg/{index.ts → files/index.ts} +0 -0
  238. package/creators/pkg/{tsconfig.json → files/tsconfig.json} +13 -12
  239. package/creators/pkg/{vue.config.js → files/vue.config.js} +0 -0
  240. package/creators/pkg/init +1 -1
  241. package/creators/pkg/package.json +2 -2
  242. package/creators/update/init +56 -0
  243. package/creators/update/package.json +20 -0
  244. package/creators/update/upgrade +56 -0
  245. package/detail/catalog.cattle.io.app.vue +1 -1
  246. package/detail/cis.cattle.io.clusterscan.vue +6 -6
  247. package/detail/configmap.vue +1 -1
  248. package/detail/constraints.gatekeeper.sh.constraint.vue +1 -1
  249. package/detail/fleet.cattle.io.bundle.vue +5 -5
  250. package/detail/fleet.cattle.io.gitrepo.vue +5 -5
  251. package/detail/helm.cattle.io.projecthelmchart.vue +1 -1
  252. package/detail/management.cattle.io.user.vue +3 -3
  253. package/detail/namespace.vue +13 -13
  254. package/detail/node.vue +2 -2
  255. package/detail/pod.vue +2 -2
  256. package/detail/provisioning.cattle.io.cluster.vue +47 -10
  257. package/detail/secret.vue +2 -2
  258. package/detail/service.vue +2 -9
  259. package/detail/workload/index.vue +1 -2
  260. package/dialog/AddClusterMemberDialog.vue +23 -29
  261. package/dialog/AddCustomBadgeDialog.vue +4 -4
  262. package/dialog/AddProjectMemberDialog.vue +81 -30
  263. package/dialog/AddonConfigConfirmationDialog.vue +1 -1
  264. package/dialog/DiagnosticTimingsDialog.vue +9 -8
  265. package/dialog/DrainNode.vue +56 -60
  266. package/dialog/ForceMachineRemoveDialog.vue +6 -8
  267. package/dialog/GenericPrompt.vue +16 -21
  268. package/dialog/RollbackWorkloadDialog.vue +22 -53
  269. package/dialog/RotateCertificatesDialog.vue +9 -11
  270. package/dialog/RotateEncryptionKeyDialog.vue +6 -10
  271. package/dialog/SaveAsRKETemplateDialog.vue +6 -14
  272. package/dialog/ScaleMachineDownDialog.vue +2 -2
  273. package/dialog/ScalePoolDownDialog.vue +121 -0
  274. package/edit/__tests__/management.cattle.io.setting.test.ts +4 -4
  275. package/edit/auth/azuread.vue +18 -18
  276. package/edit/auth/github.vue +10 -2
  277. package/edit/auth/googleoauth.vue +10 -1
  278. package/edit/auth/ldap/index.vue +14 -4
  279. package/edit/auth/oidc.vue +13 -3
  280. package/edit/auth/saml.vue +14 -4
  281. package/edit/autoscaling.horizontalpodautoscaler/external-metric.vue +2 -2
  282. package/edit/autoscaling.horizontalpodautoscaler/index.vue +1 -1
  283. package/edit/autoscaling.horizontalpodautoscaler/metric-object-reference.vue +1 -1
  284. package/edit/autoscaling.horizontalpodautoscaler/object-metric.vue +2 -2
  285. package/edit/autoscaling.horizontalpodautoscaler/pod-metric.vue +2 -2
  286. package/edit/cis.cattle.io.clusterscan.vue +2 -2
  287. package/edit/cloudcredential.vue +3 -7
  288. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -1
  289. package/edit/fleet.cattle.io.clustergroup.vue +3 -3
  290. package/edit/fleet.cattle.io.gitrepo.vue +9 -9
  291. package/edit/group.principal.vue +2 -2
  292. package/edit/helm.cattle.io.projecthelmchart.vue +3 -3
  293. package/edit/logging-flow/Match.vue +39 -8
  294. package/edit/logging-flow/index.vue +28 -5
  295. package/edit/logging.banzaicloud.io.output/providers/datadog.vue +1 -1
  296. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +1 -1
  297. package/edit/logging.banzaicloud.io.output/providers/gcs.vue +1 -1
  298. package/edit/logging.banzaicloud.io.output/providers/gelf.vue +1 -1
  299. package/edit/logging.banzaicloud.io.output/providers/kafka.vue +1 -1
  300. package/edit/logging.banzaicloud.io.output/providers/logz.vue +1 -1
  301. package/edit/logging.banzaicloud.io.output/providers/loki.vue +1 -1
  302. package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +213 -0
  303. package/edit/logging.banzaicloud.io.output/providers/redis.vue +142 -0
  304. package/edit/logging.banzaicloud.io.output/providers/s3.vue +1 -1
  305. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +1 -1
  306. package/edit/logging.banzaicloud.io.output/providers/syslog.vue +1 -1
  307. package/edit/management.cattle.io.fleetworkspace.vue +1 -1
  308. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +107 -0
  309. package/edit/management.cattle.io.project.vue +11 -4
  310. package/edit/management.cattle.io.projectroletemplatebinding.vue +5 -5
  311. package/edit/management.cattle.io.setting.vue +6 -3
  312. package/edit/management.cattle.io.user.vue +11 -5
  313. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +33 -17
  314. package/edit/monitoring.coreos.com.alertmanagerconfig/tls.vue +1 -1
  315. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +6 -6
  316. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +5 -5
  317. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +3 -3
  318. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +3 -3
  319. package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +4 -4
  320. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +14 -6
  321. package/edit/monitoring.coreos.com.receiver/auth.vue +2 -2
  322. package/edit/monitoring.coreos.com.receiver/index.vue +1 -1
  323. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  324. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +1 -1
  325. package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +1 -1
  326. package/edit/monitoring.coreos.com.receiver/types/webhook.vue +1 -1
  327. package/edit/monitoring.coreos.com.route.vue +1 -1
  328. package/edit/namespace.vue +18 -4
  329. package/edit/networking.istio.io.destinationrule/LoadBalancer.vue +1 -1
  330. package/edit/networking.k8s.io.ingress/Certificate.vue +1 -0
  331. package/edit/networking.k8s.io.ingress/Certificates.vue +3 -3
  332. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  333. package/edit/networking.k8s.io.ingress/IngressClass.vue +9 -7
  334. package/edit/networking.k8s.io.ingress/Rule.vue +1 -1
  335. package/edit/networking.k8s.io.ingress/RulePath.vue +17 -11
  336. package/edit/networking.k8s.io.ingress/Rules.vue +7 -7
  337. package/edit/networking.k8s.io.ingress/index.vue +8 -6
  338. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -1
  339. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +3 -3
  340. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +1 -1
  341. package/edit/networking.k8s.io.networkpolicy/index.vue +5 -5
  342. package/edit/persistentvolume/index.vue +30 -27
  343. package/edit/persistentvolume/plugins/awsElasticBlockStore.vue +1 -1
  344. package/edit/persistentvolume/plugins/azureDisk.vue +1 -1
  345. package/edit/persistentvolume/plugins/azureFile.vue +1 -1
  346. package/edit/persistentvolume/plugins/cephfs.vue +31 -31
  347. package/edit/persistentvolume/plugins/cinder.vue +1 -1
  348. package/edit/persistentvolume/plugins/csi.vue +104 -64
  349. package/edit/persistentvolume/plugins/fc.vue +21 -21
  350. package/edit/persistentvolume/plugins/flexVolume.vue +2 -2
  351. package/edit/persistentvolume/plugins/flocker.vue +1 -1
  352. package/edit/persistentvolume/plugins/gcePersistentDisk.vue +1 -1
  353. package/edit/persistentvolume/plugins/glusterfs.vue +1 -1
  354. package/edit/persistentvolume/plugins/hostPath.vue +1 -1
  355. package/edit/persistentvolume/plugins/iscsi.vue +47 -47
  356. package/edit/persistentvolume/plugins/local.vue +1 -1
  357. package/edit/persistentvolume/plugins/longhorn.vue +2 -2
  358. package/edit/persistentvolume/plugins/nfs.vue +1 -1
  359. package/edit/persistentvolume/plugins/photonPersistentDisk.vue +1 -1
  360. package/edit/persistentvolume/plugins/portworxVolume.vue +1 -1
  361. package/edit/persistentvolume/plugins/quobyte.vue +1 -1
  362. package/edit/persistentvolume/plugins/rbd.vue +41 -41
  363. package/edit/persistentvolume/plugins/scaleIO.vue +1 -1
  364. package/edit/persistentvolume/plugins/storageos.vue +1 -1
  365. package/edit/persistentvolume/plugins/vsphereVolume.vue +1 -1
  366. package/edit/persistentvolumeclaim.vue +78 -75
  367. package/edit/provisioning.cattle.io.cluster/DrainOptions.vue +1 -1
  368. package/edit/provisioning.cattle.io.cluster/MachinePool.vue +12 -8
  369. package/edit/provisioning.cattle.io.cluster/RegistryConfigs.vue +10 -1
  370. package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +87 -27
  371. package/edit/provisioning.cattle.io.cluster/S3Config.vue +1 -1
  372. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +3 -6
  373. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.tests.ts +1 -1
  374. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +93 -0
  375. package/edit/provisioning.cattle.io.cluster/import.vue +3 -3
  376. package/edit/provisioning.cattle.io.cluster/index.vue +31 -8
  377. package/edit/provisioning.cattle.io.cluster/rke2.vue +458 -164
  378. package/edit/resources.cattle.io.backup.vue +2 -2
  379. package/edit/secret/generic.vue +1 -0
  380. package/edit/secret/index.vue +3 -7
  381. package/edit/service.vue +3 -1
  382. package/edit/storage.k8s.io.storageclass/index.vue +101 -17
  383. package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +114 -0
  384. package/edit/storage.k8s.io.storageclass/provisioners/kubernetes.io/no-provisioner.vue +1 -1
  385. package/edit/token.vue +1 -1
  386. package/edit/ui.cattle.io.navlink.vue +8 -8
  387. package/edit/workload/Job.vue +3 -3
  388. package/edit/workload/Upgrading.vue +1 -1
  389. package/edit/workload/VolumeClaimTemplate.vue +1 -1
  390. package/edit/workload/__tests__/index.test.ts +98 -0
  391. package/edit/workload/index.vue +61 -11
  392. package/edit/workload/mixins/workload.js +128 -91
  393. package/edit/workload/storage/ContainerMountPaths.vue +1 -11
  394. package/edit/workload/storage/Mount.vue +1 -1
  395. package/edit/workload/storage/azureDisk.vue +1 -1
  396. package/edit/workload/storage/azureFile.vue +1 -1
  397. package/edit/workload/storage/csi/index.vue +1 -1
  398. package/edit/workload/storage/emptyDir.vue +88 -0
  399. package/edit/workload/storage/ephemeralVolume/index.vue +2 -2
  400. package/edit/workload/storage/gcePersistentDisk.vue +1 -1
  401. package/edit/workload/storage/hostPath.vue +1 -1
  402. package/edit/workload/storage/index.vue +8 -0
  403. package/edit/workload/storage/nfs.vue +1 -1
  404. package/edit/workload/storage/persistentVolumeClaim/index.vue +2 -2
  405. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +1 -1
  406. package/edit/workload/storage/secret.vue +1 -1
  407. package/edit/workload/storage/vsphereVolume.vue +1 -1
  408. package/layouts/default.vue +132 -58
  409. package/list/__tests__/workload.test.ts +53 -0
  410. package/list/catalog.cattle.io.app.vue +1 -0
  411. package/list/cis.cattle.io.clusterscan.vue +1 -0
  412. package/list/fleet.cattle.io.bundle.vue +5 -6
  413. package/list/fleet.cattle.io.cluster.vue +6 -3
  414. package/list/fleet.cattle.io.clusterregistrationtoken.vue +5 -6
  415. package/list/fleet.cattle.io.gitrepo.vue +5 -10
  416. package/list/group.principal.vue +8 -8
  417. package/list/helm.cattle.io.projecthelmchart.vue +2 -6
  418. package/list/logging.banzaicloud.io.clusterflow.vue +4 -1
  419. package/list/logging.banzaicloud.io.flow.vue +6 -5
  420. package/list/management.cattle.io.cluster.vue +1 -0
  421. package/list/management.cattle.io.feature.vue +4 -5
  422. package/list/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +47 -0
  423. package/list/management.cattle.io.setting.vue +2 -2
  424. package/list/management.cattle.io.user.vue +4 -10
  425. package/list/monitoring.coreos.com.alertmanagerconfig.vue +2 -7
  426. package/list/node.vue +9 -6
  427. package/list/persistentvolume.vue +3 -3
  428. package/list/persistentvolumeclaim.vue +3 -4
  429. package/list/provisioning.cattle.io.cluster.vue +21 -22
  430. package/list/service.vue +6 -14
  431. package/list/workload.vue +43 -38
  432. package/machine-config/amazonec2.vue +1 -1
  433. package/machine-config/azure.vue +429 -60
  434. package/machine-config/pnap.vue +288 -0
  435. package/mixins/__tests__/create-edit-view.test.ts +1 -1
  436. package/mixins/auth-config.js +1 -3
  437. package/mixins/browser-tab-visibility.js +8 -14
  438. package/mixins/chart.js +15 -15
  439. package/mixins/create-edit-view/impl.js +4 -0
  440. package/mixins/create-edit-view/index.js +9 -7
  441. package/mixins/form-validation.js +1 -1
  442. package/mixins/labeled-form-element.ts +6 -6
  443. package/mixins/resource-fetch-namespaced.js +98 -0
  444. package/mixins/resource-fetch.js +82 -48
  445. package/mixins/resource-manager.js +2 -24
  446. package/models/apps.controllerrevision.js +7 -0
  447. package/models/apps.daemonset.js +18 -0
  448. package/models/apps.deployment.js +44 -0
  449. package/models/apps.replicaset.js +7 -0
  450. package/models/apps.statefulset.js +18 -0
  451. package/models/autoscaling.horizontalpodautoscaler.js +5 -5
  452. package/models/batch.cronjob.js +15 -15
  453. package/models/batch.job.js +15 -0
  454. package/models/catalog.cattle.io.app.js +6 -6
  455. package/models/catalog.cattle.io.clusterrepo.js +7 -7
  456. package/models/catalog.cattle.io.operation.js +5 -5
  457. package/models/chart.js +4 -4
  458. package/models/cis.cattle.io.clusterscan.js +10 -10
  459. package/models/cluster/node.js +46 -38
  460. package/models/cluster.x-k8s.io.machine.js +39 -17
  461. package/models/cluster.x-k8s.io.machinedeployment.js +12 -2
  462. package/models/constraints.gatekeeper.sh.constraint.js +1 -1
  463. package/models/etcdbackup.js +4 -4
  464. package/models/event.js +7 -0
  465. package/models/fleet.cattle.io.cluster.js +15 -15
  466. package/models/fleet.cattle.io.clustergroup.js +1 -1
  467. package/models/fleet.cattle.io.gitrepo.js +15 -15
  468. package/models/group.principal.js +1 -1
  469. package/models/logging.banzaicloud.io.clusterflow.js +2 -2
  470. package/models/logging.banzaicloud.io.flow.js +6 -2
  471. package/models/logging.banzaicloud.io.output.js +15 -3
  472. package/models/management.cattle.io.authconfig.js +4 -4
  473. package/models/management.cattle.io.cluster.js +10 -10
  474. package/models/management.cattle.io.clusterroletemplatebinding.js +9 -9
  475. package/models/management.cattle.io.globalrole.js +26 -5
  476. package/models/management.cattle.io.node.js +46 -11
  477. package/models/management.cattle.io.nodepool.js +3 -3
  478. package/models/management.cattle.io.nodetemplate.js +21 -21
  479. package/models/management.cattle.io.podsecurityadmissionconfigurationtemplate.ts +4 -0
  480. package/models/management.cattle.io.project.js +32 -13
  481. package/models/management.cattle.io.projectroletemplatebinding.js +6 -6
  482. package/models/management.cattle.io.roletemplate.js +54 -31
  483. package/models/management.cattle.io.setting.js +1 -1
  484. package/models/management.cattle.io.user.js +41 -5
  485. package/models/monitoring.coreos.com.alertmanagerconfig.js +4 -4
  486. package/models/monitoring.coreos.com.receiver.js +7 -7
  487. package/models/monitoring.coreos.com.route.js +2 -2
  488. package/models/namespace.js +55 -5
  489. package/models/persistentvolume.js +14 -2
  490. package/models/persistentvolumeclaim.js +4 -4
  491. package/models/pod.js +25 -10
  492. package/models/projectroletemplatebinding.js +7 -0
  493. package/models/provisioning.cattle.io.cluster.js +89 -38
  494. package/models/rbac.authorization.k8s.io.role.js +4 -4
  495. package/models/rke-machine.cattle.io.pnapmachinetemplate.js +15 -0
  496. package/models/rke.cattle.io.etcdsnapshot.js +4 -4
  497. package/models/service.js +29 -28
  498. package/models/storage.k8s.io.storageclass.js +41 -26
  499. package/models/workload.js +66 -35
  500. package/nuxt.config.js +59 -34
  501. package/package.json +7 -7
  502. package/pages/about.vue +15 -3
  503. package/pages/account/index.vue +1 -1
  504. package/pages/auth/login.vue +37 -7
  505. package/pages/auth/setup.vue +11 -11
  506. package/pages/c/_cluster/_product/_resource/_id.vue +2 -2
  507. package/pages/c/_cluster/apps/charts/chart.vue +4 -4
  508. package/pages/c/_cluster/apps/charts/index.vue +21 -20
  509. package/pages/c/_cluster/apps/charts/install.vue +73 -36
  510. package/pages/c/_cluster/auth/config/_id.vue +8 -2
  511. package/pages/c/_cluster/auth/config/index.vue +8 -6
  512. package/pages/c/_cluster/auth/group.principal/assign-edit.vue +1 -1
  513. package/pages/c/_cluster/auth/roles/_resource/_id.vue +2 -2
  514. package/pages/c/_cluster/auth/roles/index.vue +5 -7
  515. package/pages/c/_cluster/explorer/EventsTable.vue +8 -8
  516. package/pages/c/_cluster/explorer/index.vue +26 -20
  517. package/pages/c/_cluster/explorer/tools/index.vue +4 -4
  518. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +2 -2
  519. package/pages/c/_cluster/fleet/index.vue +10 -10
  520. package/pages/c/_cluster/gatekeeper/index.vue +1 -1
  521. package/pages/c/_cluster/legacy/index.vue +1 -1
  522. package/pages/c/_cluster/longhorn/index.vue +2 -2
  523. package/pages/c/_cluster/mcapps/index.vue +1 -1
  524. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +15 -4
  525. package/pages/c/_cluster/monitoring/index.vue +1 -1
  526. package/pages/c/_cluster/navlinks/_group.vue +1 -1
  527. package/pages/c/_cluster/neuvector/index.vue +2 -2
  528. package/pages/c/_cluster/settings/banners.vue +30 -30
  529. package/pages/c/_cluster/settings/brand.vue +9 -9
  530. package/pages/c/_cluster/settings/links.vue +6 -6
  531. package/pages/c/_cluster/settings/performance.vue +48 -2
  532. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +1 -1
  533. package/pages/c/_cluster/uiplugins/InstallDialog.vue +1 -1
  534. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +59 -9
  535. package/pages/c/_cluster/uiplugins/index.vue +30 -4
  536. package/pages/diagnostic.vue +5 -4
  537. package/pages/home.vue +105 -30
  538. package/pages/prefs.vue +23 -12
  539. package/pages/rio/mesh.vue +5 -5
  540. package/pages/support/index.vue +7 -7
  541. package/pkg/dynamic-importer.lib.js +8 -0
  542. package/pkg/vue.config.js +14 -1
  543. package/plugins/dashboard-store/__tests__/mutations.spec.js +406 -0
  544. package/plugins/dashboard-store/actions.js +32 -25
  545. package/plugins/dashboard-store/getters.js +50 -33
  546. package/plugins/dashboard-store/mutations.js +134 -28
  547. package/plugins/dashboard-store/normalize.js +1 -1
  548. package/plugins/dashboard-store/resource-class.js +121 -141
  549. package/plugins/steve/actions.js +30 -0
  550. package/plugins/steve/caches/resourceCache.js +60 -0
  551. package/plugins/steve/getters.js +44 -1
  552. package/plugins/steve/mutations.js +97 -36
  553. package/plugins/steve/resourceWatcher.js +277 -0
  554. package/plugins/steve/schema.utils.js +25 -0
  555. package/plugins/steve/subscribe.js +292 -119
  556. package/plugins/steve/worker/index.js +17 -0
  557. package/plugins/steve/worker/web-worker.advanced.js +302 -0
  558. package/plugins/steve/{web-worker.steve-sub-worker.js → worker/web-worker.basic.js} +6 -47
  559. package/promptRemove/management.cattle.io.project.vue +1 -1
  560. package/promptRemove/mixin/roleDeletionCheck.js +7 -7
  561. package/promptRemove/pod.vue +2 -2
  562. package/rancher-components/components/BadgeState/BadgeState.spec.ts +12 -0
  563. package/rancher-components/components/BadgeState/BadgeState.vue +111 -0
  564. package/rancher-components/components/BadgeState/index.ts +1 -0
  565. package/rancher-components/components/Banner/Banner.test.ts +57 -0
  566. package/rancher-components/components/Banner/Banner.vue +242 -0
  567. package/rancher-components/components/Banner/index.ts +1 -0
  568. package/rancher-components/components/Card/Card.test.ts +37 -0
  569. package/rancher-components/components/Card/Card.vue +166 -0
  570. package/rancher-components/components/Card/index.ts +1 -0
  571. package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +68 -0
  572. package/rancher-components/components/Form/Checkbox/Checkbox.vue +418 -0
  573. package/rancher-components/components/Form/Checkbox/index.ts +1 -0
  574. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +23 -0
  575. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +355 -0
  576. package/rancher-components/components/Form/LabeledInput/index.ts +1 -0
  577. package/rancher-components/components/Form/Radio/RadioButton.vue +276 -0
  578. package/rancher-components/components/Form/Radio/RadioGroup.vue +253 -0
  579. package/rancher-components/components/Form/Radio/index.ts +2 -0
  580. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +169 -0
  581. package/rancher-components/components/Form/TextArea/index.ts +1 -0
  582. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +94 -0
  583. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +149 -0
  584. package/rancher-components/components/Form/ToggleSwitch/index.ts +1 -0
  585. package/rancher-components/components/Form/index.ts +5 -0
  586. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +151 -0
  587. package/rancher-components/components/LabeledTooltip/index.ts +1 -0
  588. package/rancher-components/components/StringList/StringList.test.ts +483 -0
  589. package/rancher-components/components/StringList/StringList.vue +611 -0
  590. package/rancher-components/components/StringList/index.ts +1 -0
  591. package/scripts/publish-shell.sh +38 -5
  592. package/scripts/record-deps.js +37 -0
  593. package/scripts/test-plugins-build.sh +19 -7
  594. package/scripts/typegen.sh +84 -0
  595. package/static/loading-indicator.html +1 -1
  596. package/store/action-menu.js +3 -3
  597. package/store/auth.js +4 -4
  598. package/store/aws.js +4 -4
  599. package/store/catalog.js +22 -22
  600. package/store/index.js +58 -7
  601. package/store/plugins.js +2 -19
  602. package/store/pnap.js +128 -0
  603. package/store/prefs.js +13 -3
  604. package/store/type-map.js +101 -44
  605. package/store/uiplugins.ts +2 -2
  606. package/store/wm.js +10 -0
  607. package/types/pod-security-admission.ts +36 -0
  608. package/types/shell/index.d.ts +3159 -0
  609. package/types/vue-shim.d +20 -0
  610. package/utils/__tests__/object.test.ts +17 -1
  611. package/utils/__tests__/pod-security-admission.test.ts +61 -0
  612. package/utils/alertmanagerconfig.js +6 -6
  613. package/utils/async.ts +36 -0
  614. package/utils/color.js +45 -0
  615. package/utils/crypto/browserHashUtils.js +18 -0
  616. package/utils/dynamic-importer.js +8 -0
  617. package/utils/gc/gc-types.ts +1 -1
  618. package/utils/install-redirect.js +1 -1
  619. package/utils/object.js +26 -2
  620. package/utils/parse-externalid.js +5 -5
  621. package/utils/pod-security-admission.ts +39 -0
  622. package/utils/socket.js +61 -24
  623. package/utils/string.js +2 -0
  624. package/utils/svg-filter.js +301 -0
  625. package/utils/time.js +55 -0
  626. package/utils/validators/cidr.js +4 -0
  627. package/utils/validators/formRules/__tests__/index.test.ts +26 -6
  628. package/utils/validators/formRules/index.ts +14 -0
  629. package/config/product/harvester-manager.js +0 -162
  630. package/creators/pkg/nuxt.config.js +0 -6
  631. package/edit/harvesterhci.io.management.cluster.vue +0 -153
  632. package/list/harvesterhci.io.management.cluster.vue +0 -241
  633. package/machine-config/harvester.vue +0 -693
  634. package/models/harvesterhci.io.management.cluster.js +0 -228
  635. package/pages/c/_cluster/harvesterManager/index.vue +0 -24
@@ -8,7 +8,7 @@ export default {
8
8
  },
9
9
 
10
10
  mode: {
11
- type: String,
11
+ type: String,
12
12
  default: _EDIT,
13
13
  },
14
14
 
@@ -1,12 +1,12 @@
1
1
  <script>
2
2
  export default {
3
- props: {
3
+ props: {
4
4
  isCancelModal: {
5
- type: Boolean,
5
+ type: Boolean,
6
6
  default: false
7
7
  },
8
8
  isForm: {
9
- type: Boolean,
9
+ type: Boolean,
10
10
  default: false
11
11
  },
12
12
  },
@@ -23,7 +23,7 @@ export default {
23
23
  components: {
24
24
  BadgeState, Banner, ButtonGroup
25
25
  },
26
- props: {
26
+ props: {
27
27
  value: {
28
28
  type: Object,
29
29
  default: () => {
@@ -82,6 +82,10 @@ export default {
82
82
  },
83
83
  },
84
84
 
85
+ data() {
86
+ return { DETAIL_VIEW: _DETAIL };
87
+ },
88
+
85
89
  computed: {
86
90
  schema() {
87
91
  const inStore = this.storeOverride || this.$store.getters['currentStore'](this.resource);
@@ -125,6 +129,10 @@ export default {
125
129
  return null;
126
130
  },
127
131
 
132
+ detailsAction() {
133
+ return this.value?.detailsAction;
134
+ },
135
+
128
136
  shouldHifenize() {
129
137
  return (this.mode === 'view' || this.mode === 'edit') && this.resourceSubtype?.length && this.value?.nameDisplay?.length;
130
138
  },
@@ -354,6 +362,10 @@ export default {
354
362
 
355
363
  return parent?.location;
356
364
  },
365
+
366
+ hideNamespaceLocation() {
367
+ return this.$store.getters['currentProduct'].hideNamespaceLocation;
368
+ },
357
369
  },
358
370
 
359
371
  methods: {
@@ -368,6 +380,18 @@ export default {
368
380
 
369
381
  toggleSensitiveData(e) {
370
382
  this.$store.dispatch('prefs/set', { key: HIDE_SENSITIVE, value: !!e });
383
+ },
384
+
385
+ invokeDetailsAction() {
386
+ const action = this.detailsAction;
387
+
388
+ if (action) {
389
+ const fn = this.value[action.action];
390
+
391
+ if (fn) {
392
+ fn.apply(this.value, []);
393
+ }
394
+ }
371
395
  }
372
396
  }
373
397
  };
@@ -375,7 +399,7 @@ export default {
375
399
 
376
400
  <template>
377
401
  <div class="masthead">
378
- <header class="header-layout">
402
+ <header>
379
403
  <div class="title">
380
404
  <div class="primaryheader">
381
405
  <h1>
@@ -407,7 +431,18 @@ export default {
407
431
  >
408
432
  <span v-if="isNamespace && project">{{ t("resourceDetail.masthead.project") }}: <nuxt-link :to="project.detailLocation">{{ project.nameDisplay }}</nuxt-link></span>
409
433
  <span v-else-if="isWorkspace">{{ t("resourceDetail.masthead.workspace") }}: <nuxt-link :to="workspaceLocation">{{ namespace }}</nuxt-link></span>
410
- <span v-else-if="namespace && !hasMultipleNamespaces">{{ t("resourceDetail.masthead.namespace") }}: <nuxt-link :to="namespaceLocation">{{ namespace }}</nuxt-link></span>
434
+ <span v-else-if="namespace && !hasMultipleNamespaces">
435
+ {{ t("resourceDetail.masthead.namespace") }}:
436
+ <nuxt-link
437
+ v-if="!hideNamespaceLocation"
438
+ :to="namespaceLocation"
439
+ >
440
+ {{ namespace }}
441
+ </nuxt-link>
442
+ <span v-else>
443
+ {{ namespace }}
444
+ </span>
445
+ </span>
411
446
  <span v-if="parent.showAge">{{ t("resourceDetail.masthead.age") }}: <LiveDate
412
447
  class="live-date"
413
448
  :value="value.creationTimestamp"
@@ -418,11 +453,21 @@ export default {
418
453
  <slot name="right">
419
454
  <div class="actions-container">
420
455
  <div class="actions">
456
+ <button
457
+ v-if="detailsAction && currentView === DETAIL_VIEW && isView"
458
+ type="button"
459
+ class="btn role-primary actions mr-10"
460
+ :disabled="!detailsAction.enabled"
461
+ @click="invokeDetailsAction"
462
+ >
463
+ {{ detailsAction.label }}
464
+ </button>
421
465
  <ButtonGroup
422
466
  v-if="showSensitiveToggle"
423
467
  :value="!!hideSensitiveData"
424
468
  icon-size="lg"
425
469
  :options="sensitiveOptions"
470
+ class="mr-10"
426
471
  @input="toggleSensitiveData"
427
472
  />
428
473
 
@@ -430,6 +475,7 @@ export default {
430
475
  v-if="viewOptions && isView"
431
476
  v-model="currentView"
432
477
  :options="viewOptions"
478
+ class="mr-10"
433
479
  />
434
480
 
435
481
  <button
@@ -522,4 +568,10 @@ export default {
522
568
  }
523
569
  }
524
570
 
571
+ div.actions-container > div.actions {
572
+ display: flex;
573
+ flex-direction: row;
574
+ justify-content: flex-end;
575
+ }
576
+
525
577
  </style>
@@ -26,7 +26,8 @@ function modeFor(route) {
26
26
  }
27
27
  }
28
28
 
29
- async function getYaml(model) {
29
+ async function getYaml(store, model) {
30
+ const inStore = store.getters['currentStore'](model.type);
30
31
  let yaml;
31
32
  const opt = { headers: { accept: 'application/yaml' } };
32
33
 
@@ -34,7 +35,9 @@ async function getYaml(model) {
34
35
  yaml = (await model.followLink('view', opt)).data;
35
36
  }
36
37
 
37
- return yaml;
38
+ const cleanedYaml = await store.dispatch(`${ inStore }/cleanForDownload`, yaml);
39
+
40
+ return cleanedYaml;
38
41
  }
39
42
 
40
43
  export default {
@@ -146,6 +149,11 @@ export default {
146
149
  initialModel = await store.dispatch(`${ inStore }/clone`, { resource: liveModel });
147
150
  model = await store.dispatch(`${ inStore }/clone`, { resource: liveModel });
148
151
 
152
+ if (model.forceYaml === true) {
153
+ as = _YAML;
154
+ this.as = as;
155
+ }
156
+
149
157
  if ( as === _YAML ) {
150
158
  yaml = createYaml(schemas, resource, data);
151
159
  }
@@ -182,7 +190,7 @@ export default {
182
190
  initialModel = await store.dispatch(`${ inStore }/clone`, { resource: liveModel });
183
191
 
184
192
  if ( as === _YAML ) {
185
- yaml = await getYaml(liveModel);
193
+ yaml = await getYaml(this.$store, liveModel);
186
194
  }
187
195
 
188
196
  if ( as === _GRAPH ) {
@@ -222,7 +230,6 @@ export default {
222
230
  this.value.applyDefaults(this, realMode);
223
231
  }
224
232
  },
225
-
226
233
  data() {
227
234
  return {
228
235
  chartData: null,
@@ -306,7 +313,7 @@ export default {
306
313
  // Auto refresh YAML when the model changes
307
314
  async 'value.metadata.resourceVersion'(a, b) {
308
315
  if ( this.mode === _VIEW && this.as === _YAML && a && b && a !== b) {
309
- this.yaml = await getYaml(this.liveModel);
316
+ this.yaml = await getYaml(this.$store, this.liveModel);
310
317
  }
311
318
  }
312
319
  },
@@ -24,7 +24,7 @@ export default {
24
24
  required: true,
25
25
  },
26
26
  favoriteResource: {
27
- type: String,
27
+ type: String,
28
28
  default: null
29
29
  },
30
30
  schema: {
@@ -65,6 +65,11 @@ export default {
65
65
  default: false
66
66
  },
67
67
 
68
+ loadNamespace: {
69
+ type: String,
70
+ default: null
71
+ },
72
+
68
73
  showIncrementalLoadingIndicator: {
69
74
  type: Boolean,
70
75
  default: false
@@ -163,7 +168,7 @@ export default {
163
168
  </script>
164
169
 
165
170
  <template>
166
- <header class="header-layout">
171
+ <header>
167
172
  <slot name="typeDescription">
168
173
  <TypeDescription :resource="resource" />
169
174
  </slot>
@@ -178,6 +183,7 @@ export default {
178
183
  v-if="showIncrementalLoadingIndicator"
179
184
  :resources="loadResources"
180
185
  :indeterminate="loadIndeterminate"
186
+ :namespace="loadNamespace"
181
187
  />
182
188
  </div>
183
189
  <div class="actions-container">
@@ -217,4 +223,8 @@ export default {
217
223
  margin: 0;
218
224
  }
219
225
  }
226
+
227
+ header {
228
+ margin-bottom: 20px;
229
+ }
220
230
  </style>
@@ -16,7 +16,11 @@ export default {
16
16
  indeterminate: {
17
17
  type: Boolean,
18
18
  default: false,
19
- }
19
+ },
20
+ namespace: {
21
+ type: String,
22
+ default: undefined
23
+ },
20
24
  },
21
25
 
22
26
  data() {
@@ -40,6 +44,10 @@ export default {
40
44
  // Have we loaded all resources for the types that are needed
41
45
  haveAll() {
42
46
  return this.resources.reduce((acc, r) => {
47
+ if (this.namespace) {
48
+ return acc && this.$store.getters[`${ this.inStore }/haveAllNamespace`](r, this.namespace);
49
+ }
50
+
43
51
  return acc && this.$store.getters[`${ this.inStore }/haveAll`](r);
44
52
  }, true);
45
53
  },
@@ -49,7 +57,9 @@ export default {
49
57
  const clusterCounts = this.$store.getters[`${ this.inStore }/all`](COUNT);
50
58
 
51
59
  return this.resources.reduce((acc, r) => {
52
- const count = clusterCounts?.[0]?.counts?.[r]?.summary?.count || 0;
60
+ const resourceCounts = clusterCounts?.[0]?.counts?.[r];
61
+ const resourceCount = this.namespace ? resourceCounts?.namespaces?.[this.namespace]?.count : resourceCounts?.summary?.count;
62
+ const count = resourceCount || 0;
53
63
 
54
64
  return acc + count;
55
65
  }, 0);
@@ -4,13 +4,18 @@ import Loading from '@shell/components/Loading';
4
4
  import Masthead from './Masthead';
5
5
  import ResourceLoadingIndicator from './ResourceLoadingIndicator';
6
6
  import ResourceFetch from '@shell/mixins/resource-fetch';
7
+ import IconMessage from '@shell/components/IconMessage.vue';
8
+ import { ResourceListComponentName } from './resource-list.config';
7
9
 
8
10
  export default {
11
+ name: ResourceListComponentName,
12
+
9
13
  components: {
10
14
  Loading,
11
15
  ResourceTable,
12
16
  Masthead,
13
- ResourceLoadingIndicator
17
+ ResourceLoadingIndicator,
18
+ IconMessage
14
19
  },
15
20
  mixins: [ResourceFetch],
16
21
 
@@ -28,19 +33,16 @@ export default {
28
33
  default: false
29
34
  },
30
35
  },
36
+
31
37
  async fetch() {
32
38
  const store = this.$store;
33
39
  const resource = this.resource;
34
40
 
35
- let hasFetch = false;
36
-
37
- const inStore = store.getters['currentStore'](resource);
38
-
39
- const schema = store.getters[`${ inStore }/schemaFor`](resource);
41
+ const schema = this.schema;
40
42
 
41
43
  if ( this.hasListComponent ) {
42
44
  // If you provide your own list then call its asyncData
43
- const importer = store.getters['type-map/importList'](resource);
45
+ const importer = this.listComponent;
44
46
  const component = (await importer())?.default;
45
47
 
46
48
  if ( component?.typeDisplay ) {
@@ -49,7 +51,7 @@ export default {
49
51
 
50
52
  // If your list page has a fetch then it's responsible for populating rows itself
51
53
  if ( component?.fetch ) {
52
- hasFetch = true;
54
+ this.hasFetch = true;
53
55
  }
54
56
 
55
57
  // If the custom component supports it, ask it what resources it loads, so we can
@@ -62,14 +64,17 @@ export default {
62
64
  }
63
65
  }
64
66
 
65
- if ( !hasFetch ) {
67
+ if ( !this.hasFetch ) {
66
68
  if ( !schema ) {
67
69
  store.dispatch('loadingError', new Error(`Type ${ resource } not found, unable to display list`));
68
70
 
69
71
  return;
70
72
  }
71
73
 
72
- await this.$fetchType(resource);
74
+ // See comment for `namespaceFilterRequired` watcher, skip fetch if we don't have a valid NS
75
+ if (!this.namespaceFilterRequired) {
76
+ await this.$fetchType(resource);
77
+ }
73
78
  }
74
79
  },
75
80
 
@@ -91,6 +96,8 @@ export default {
91
96
  hasListComponent,
92
97
  showMasthead: showMasthead === undefined ? true : showMasthead,
93
98
  resource,
99
+ loadResources: [resource], // List of resources that will be loaded, this could be many (`Workloads`)
100
+ hasFetch: false,
94
101
  // manual refresh
95
102
  manualRefreshInit: false,
96
103
  watch: false,
@@ -98,7 +105,6 @@ export default {
98
105
  // Provided by fetch later
99
106
  customTypeDisplay: null,
100
107
  // incremental loading
101
- loadResources: [resource],
102
108
  loadIndeterminate: false,
103
109
  // query param for simple filtering
104
110
  useQueryParamsForSimpleFiltering: true
@@ -124,6 +130,23 @@ export default {
124
130
  }
125
131
  },
126
132
 
133
+ watch: {
134
+ /**
135
+ * When a NS filter is required and the user selects a different one, kick off a new set of API requests
136
+ *
137
+ * ResourceList has two modes
138
+ * 1) ResourceList component handles API request to fetch resources
139
+ * 2) Custom list component handles API request to fetch resources
140
+ *
141
+ * This covers case 1
142
+ */
143
+ namespaceFilter(neu) {
144
+ if (neu && !this.hasFetch) {
145
+ this.$fetchType(this.resource);
146
+ }
147
+ }
148
+ },
149
+
127
150
  created() {
128
151
  let listComponent = false;
129
152
 
@@ -140,7 +163,20 @@ export default {
140
163
  </script>
141
164
 
142
165
  <template>
143
- <div>
166
+ <IconMessage
167
+ v-if="namespaceFilterRequired"
168
+ :vertical="true"
169
+ :subtle="false"
170
+ icon="icon-filter_alt"
171
+ >
172
+ <template #message>
173
+ <span
174
+ class="filter"
175
+ v-html="t('resourceList.nsFiltering', { resource: $store.getters['type-map/labelFor'](schema, 2) || customTypeDisplay }, true)"
176
+ />
177
+ </template>
178
+ </IconMessage>
179
+ <div v-else>
144
180
  <Masthead
145
181
  v-if="showMasthead"
146
182
  :type-display="customTypeDisplay"
@@ -149,6 +185,7 @@ export default {
149
185
  :show-incremental-loading-indicator="showIncrementalLoadingIndicator"
150
186
  :load-resources="loadResources"
151
187
  :load-indeterminate="loadIndeterminate"
188
+ :load-namespace="namespaceFilter"
152
189
  >
153
190
  <template slot="extraActions">
154
191
  <slot name="extraActions" />
@@ -173,6 +210,7 @@ export default {
173
210
  :adv-filter-hide-labels-as-cols="advFilterHideLabelsAsCols"
174
211
  :adv-filter-prevent-filtering-labels="advFilterPreventFilteringLabels"
175
212
  :use-query-params-for-simple-filtering="useQueryParamsForSimpleFiltering"
213
+ :force-update-live-and-delayed="forceUpdateLiveAndDelayed"
176
214
  />
177
215
  </div>
178
216
  </template>
@@ -185,6 +223,9 @@ export default {
185
223
  position: relative;
186
224
  margin: 0 0 20px 0;
187
225
  }
226
+ .filter{
227
+ line-height: 45px;
228
+ }
188
229
  .right-action {
189
230
  position: absolute;
190
231
  top: 10px;
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Component name of the `ResourceList`
3
+ *
4
+ * This needs to be a in separate file to avoid circular dependency of
5
+ * index.vue --> resource-fetch mixin --> resource-fetch-namespaced mixin --> index.vue
6
+ */
7
+ export const ResourceListComponentName = 'ResourceList';
@@ -42,9 +42,9 @@ export function resourceCounts(store, resource) {
42
42
  export default {
43
43
  components: { SimpleBox },
44
44
 
45
- props: {
45
+ props: {
46
46
  resource: {
47
- type: String,
47
+ type: String,
48
48
  default: ''
49
49
  },
50
50
 
@@ -74,8 +74,8 @@ export default {
74
74
  }
75
75
 
76
76
  const route = {
77
- name: 'c-cluster-product-resource',
78
- params: {
77
+ name: 'c-cluster-product-resource',
78
+ params: {
79
79
  product: this.$store.getters['currentProduct'].name,
80
80
  resource: this.resource,
81
81
  }
@@ -140,9 +140,30 @@ export default {
140
140
  useQueryParamsForSimpleFiltering: {
141
141
  type: Boolean,
142
142
  default: false
143
+ },
144
+ /**
145
+ * Manaul force the update of live and delayed cells. Change this number to kick off the update
146
+ */
147
+ forceUpdateLiveAndDelayed: {
148
+ type: Number,
149
+ default: 0
143
150
  }
144
151
  },
145
152
 
153
+ mounted() {
154
+ /**
155
+ * v-shortkey prevents the event's propagation:
156
+ * https://github.com/fgr-araujo/vue-shortkey/blob/55d802ea305cadcc2ea970b55a3b8b86c7b44c05/src/index.js#L156-L157
157
+ *
158
+ * 'Enter' key press is handled via event listener in order to allow the event propagation
159
+ */
160
+ window.addEventListener('keyup', this.handleEnterKeyPress);
161
+ },
162
+
163
+ beforeDestroy() {
164
+ window.removeEventListener('keyup', this.handleEnterKeyPress);
165
+ },
166
+
146
167
  data() {
147
168
  const options = this.$store.getters[`type-map/optionsFor`](this.schema);
148
169
  const listGroups = options?.listGroups || [];
@@ -232,11 +253,16 @@ export default {
232
253
  return [];
233
254
  }
234
255
 
256
+ const haveAllNamespace = this.$store.getters['haveAllNamespace'];
257
+
235
258
  return this.rows.filter((row) => {
236
259
  if (this.currentProduct?.hideSystemResources && this.isNamespaced) {
237
260
  return !!includedNamespaces[row.metadata.namespace] && !row.isSystemResource;
238
261
  } else if (!this.isNamespaced) {
239
262
  return true;
263
+ } else if (haveAllNamespace) {
264
+ // `rows` only contains resource from a single namespace
265
+ return true;
240
266
  } else {
241
267
  return !!includedNamespaces[row.metadata.namespace];
242
268
  }
@@ -375,8 +401,11 @@ export default {
375
401
 
376
402
  handleActionButtonClick(event) {
377
403
  this.$emit('clickedActionButton', event);
378
- }
404
+ },
379
405
 
406
+ handleEnterKeyPress(event) {
407
+ this.keyAction('detail');
408
+ }
380
409
  }
381
410
  };
382
411
  </script>
@@ -406,6 +435,7 @@ export default {
406
435
  key-field="_key"
407
436
  :sort-generation-fn="safeSortGenerationFn"
408
437
  :use-query-params-for-simple-filtering="useQueryParamsForSimpleFiltering"
438
+ :force-update-live-and-delayed="forceUpdateLiveAndDelayed"
409
439
  @clickedActionButton="handleActionButtonClick"
410
440
  @group-value-change="group = $event"
411
441
  v-on="$listeners"
@@ -447,11 +477,6 @@ export default {
447
477
  </template>
448
478
 
449
479
  <template #shortkeys>
450
- <button
451
- v-shortkey.once="['enter']"
452
- class="hide detail"
453
- @shortkey="keyAction('detail')"
454
- />
455
480
  <button
456
481
  v-shortkey.once="['e']"
457
482
  class="hide"
@@ -131,18 +131,18 @@ export default {
131
131
  search: 'subjectKind',
132
132
  },
133
133
  {
134
- name: 'subject',
135
- labelKey: 'tableHeaders.subject',
136
- value: 'userObj.labelForSelect',
137
- sort: 'userObj.labelForSelect',
138
- search: 'userObj.labelForSelect',
134
+ name: 'subject',
135
+ labelKey: 'tableHeaders.subject',
136
+ value: 'userObj.labelForSelect',
137
+ sort: 'userObj.labelForSelect',
138
+ search: 'userObj.labelForSelect',
139
139
  },
140
140
  {
141
- name: 'role',
142
- labelKey: 'tableHeaders.role',
143
- value: 'roleObj.nameWithinProduct',
144
- sort: 'roleObj.nameWithinProduct',
145
- search: 'roleObj.nameWithinProduct',
141
+ name: 'role',
142
+ labelKey: 'tableHeaders.role',
143
+ value: 'roleObj.nameWithinProduct',
144
+ sort: 'roleObj.nameWithinProduct',
145
+ search: 'roleObj.nameWithinProduct',
146
146
  },
147
147
  ];
148
148
  },
@@ -219,15 +219,15 @@ export default {
219
219
  }
220
220
 
221
221
  return {
222
- subjectKind: subject.kind,
223
- subject: subject.name,
224
- userObj: findBy(this.allUsers, 'id', subject.name),
225
- roleKind: binding.roleRef.kind,
226
- role: binding.roleRef.name,
227
- roleObj: findBy(this.allRoles, 'id', binding.roleRef.name),
228
- existing: binding,
229
- existingIdx: i,
230
- remove: false,
222
+ subjectKind: subject.kind,
223
+ subject: subject.name,
224
+ userObj: findBy(this.allUsers, 'id', subject.name),
225
+ roleKind: binding.roleRef.kind,
226
+ role: binding.roleRef.name,
227
+ roleObj: findBy(this.allRoles, 'id', binding.roleRef.name),
228
+ existing: binding,
229
+ existingIdx: i,
230
+ remove: false,
231
231
  };
232
232
  }
233
233
  });
@@ -38,13 +38,17 @@ export default {
38
38
  class="top"
39
39
  >
40
40
  <slot name="title">
41
- <h2 v-if="title">
41
+ <h2
42
+ v-if="title"
43
+ data-testid="simple-box-title"
44
+ >
42
45
  {{ title }}
43
46
  </h2>
44
47
  </slot>
45
48
  <div
46
49
  v-if="canClose || pref"
47
50
  class="close-button"
51
+ data-testid="simple-box-close"
48
52
  @click="closeBox($event)"
49
53
  >
50
54
  <i class="icon icon-close" />
@@ -70,7 +74,7 @@ export default {
70
74
  justify-content: center;
71
75
  padding: 2px;
72
76
  > i {
73
- font-size: 20px;
77
+ font-size: 14px;
74
78
  opacity: 0.5;
75
79
  }
76
80
  &:hover {
@@ -42,11 +42,11 @@ export default {
42
42
 
43
43
  totalCountGaugeInput() {
44
44
  const totalInput = {
45
- name: this.t('clusterIndexPage.resourceGauge.totalResources'),
46
- total: 0,
47
- useful: 0,
48
- warningCount: 0,
49
- errorCount: 0
45
+ name: this.t('clusterIndexPage.resourceGauge.totalResources'),
46
+ total: 0,
47
+ useful: 0,
48
+ warningCount: 0,
49
+ errorCount: 0
50
50
  };
51
51
 
52
52
  this.accessibleResources.forEach((resource) => {