@rancher/shell 0.3.14 → 0.3.15

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 (397) hide show
  1. package/assets/images/providers/nutanix.svg +1 -0
  2. package/assets/translations/en-us.yaml +83 -2
  3. package/chart/gatekeeper.vue +2 -2
  4. package/chart/monitoring/alerting/index.vue +3 -3
  5. package/chart/monitoring/index.vue +2 -2
  6. package/chart/monitoring/prometheus/index.vue +1 -1
  7. package/chart/rancher-backup/index.vue +2 -2
  8. package/cloud-credential/harvester.vue +2 -2
  9. package/components/AssignTo.vue +1 -1
  10. package/components/AwsComplianceBanner.vue +1 -1
  11. package/components/BackLink.vue +7 -0
  12. package/components/BrandImage.vue +3 -3
  13. package/components/ClusterProviderIcon.vue +1 -1
  14. package/components/CommunityLinks.vue +2 -2
  15. package/components/ConsumptionGauge.vue +17 -2
  16. package/components/CruResource.vue +2 -1
  17. package/components/DashboardMetrics.vue +8 -0
  18. package/components/DetailTop.vue +1 -1
  19. package/components/ExplorerMembers.vue +8 -8
  20. package/components/ExplorerProjectsNamespaces.vue +9 -9
  21. package/components/FixedBanner.vue +1 -1
  22. package/components/GlobalRoleBindings.vue +11 -11
  23. package/components/GrafanaDashboard.vue +7 -1
  24. package/components/GrowlManager.vue +1 -1
  25. package/components/HarvesterServiceAddOnConfig.vue +4 -3
  26. package/components/IconOrSvg.vue +10 -3
  27. package/components/LandingPagePreference.vue +2 -2
  28. package/components/MoveModal.vue +1 -1
  29. package/components/PodSecurityAdmission.vue +3 -3
  30. package/components/ProgressBarMulti.vue +2 -2
  31. package/components/PromptRemove.vue +52 -28
  32. package/components/PromptRestore.vue +3 -3
  33. package/components/Questions/index.vue +5 -5
  34. package/components/RelatedWorkloadsTable.vue +1 -1
  35. package/components/ResourceList/Masthead.vue +1 -1
  36. package/components/ResourceTable.vue +3 -3
  37. package/components/ResourceYaml.vue +1 -1
  38. package/components/RoleBindings.vue +2 -2
  39. package/components/SingleClusterInfo.vue +1 -1
  40. package/components/SortableTable/actions.js +3 -3
  41. package/components/SortableTable/advanced-filtering.js +7 -7
  42. package/components/SortableTable/filtering.js +1 -1
  43. package/components/SortableTable/index.vue +9 -9
  44. package/components/SortableTable/selection.js +5 -5
  45. package/components/SortableTable/sorting.js +5 -5
  46. package/components/Tabbed/index.vue +7 -7
  47. package/components/TableSparkLine.vue +1 -1
  48. package/components/Wizard.vue +11 -23
  49. package/components/__tests__/Collapse.spec.ts +1 -1
  50. package/components/__tests__/CruResource.test.ts +74 -0
  51. package/components/__tests__/SimpleBox.spec.ts +1 -1
  52. package/components/auth/RoleDetailEdit.vue +7 -3
  53. package/components/auth/SelectPrincipal.vue +3 -3
  54. package/components/fleet/FleetResources.vue +1 -1
  55. package/components/fleet/FleetStatus.vue +4 -4
  56. package/components/fleet/FleetSummary.vue +1 -1
  57. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +1 -1
  58. package/components/fleet/ForceDirectedTreeChart/index.vue +1 -1
  59. package/components/form/ArrayList.vue +11 -3
  60. package/components/form/ArrayListSelect.vue +2 -2
  61. package/components/form/FileSelector.vue +6 -0
  62. package/components/form/GitPicker.vue +528 -0
  63. package/components/form/KeyValue.vue +82 -41
  64. package/components/form/LabeledSelect.vue +2 -2
  65. package/components/form/MatchExpressions.vue +2 -2
  66. package/components/form/Members/ClusterMembershipEditor.vue +1 -2
  67. package/components/form/Members/ClusterPermissionsEditor.vue +6 -5
  68. package/components/form/Members/MembershipEditor.vue +4 -4
  69. package/components/form/Members/ProjectMembershipEditor.vue +1 -2
  70. package/components/form/NameNsDescription.vue +13 -6
  71. package/components/form/Networking.vue +2 -2
  72. package/components/form/NodeScheduling.vue +1 -1
  73. package/components/form/PodAffinity.vue +1 -1
  74. package/components/form/ProjectMemberEditor.vue +4 -4
  75. package/components/form/ResourceQuota/Namespace.vue +2 -2
  76. package/components/form/ResourceQuota/NamespaceRow.vue +2 -2
  77. package/components/form/ResourceQuota/Project.vue +1 -1
  78. package/components/form/ResourceQuota/shared.js +2 -2
  79. package/components/form/ResourceSelector.vue +1 -1
  80. package/components/form/ResourceTabs/index.vue +1 -1
  81. package/components/form/RuleSelector.vue +1 -1
  82. package/components/form/SecretSelector.vue +4 -4
  83. package/components/form/Select.vue +2 -2
  84. package/components/form/SelectOrCreateAuthSecret.vue +3 -3
  85. package/components/form/ServiceNameSelect.vue +1 -1
  86. package/components/form/ServicePorts.vue +1 -1
  87. package/components/form/ShellInput.vue +1 -1
  88. package/components/form/SimpleSecretSelector.vue +4 -4
  89. package/components/form/Taints.vue +1 -1
  90. package/components/form/ValueFromResource.vue +3 -3
  91. package/components/form/WorkloadPorts.vue +8 -7
  92. package/components/form/__tests__/Error.test.ts +1 -1
  93. package/components/form/__tests__/KeyValue.test.ts +21 -0
  94. package/components/formatter/ClusterLink.vue +1 -1
  95. package/components/formatter/ClusterProvider.vue +13 -2
  96. package/components/formatter/Endpoints.vue +1 -1
  97. package/components/formatter/FleetSummaryGraph.vue +2 -2
  98. package/components/formatter/IngressTarget.vue +2 -2
  99. package/components/formatter/PodImages.vue +1 -1
  100. package/components/formatter/PrincipalGroupBindings.vue +1 -1
  101. package/components/formatter/ReceiverIcons.vue +3 -3
  102. package/components/formatter/ServiceType.vue +1 -1
  103. package/components/formatter/WorkloadDetailEndpoints.vue +1 -1
  104. package/components/formatter/WorkloadHealthScale.vue +1 -1
  105. package/components/formatter/__tests__/LiveDate.test.ts +1 -1
  106. package/components/graph/Bar.vue +1 -1
  107. package/components/graph/LinePlot.vue +3 -3
  108. package/components/nav/Group.vue +2 -2
  109. package/components/nav/Header.vue +5 -5
  110. package/components/nav/NamespaceFilter.vue +14 -14
  111. package/components/nav/TopLevelMenu.vue +76 -11
  112. package/components/nav/WindowManager/ContainerLogs.vue +2 -2
  113. package/components/nav/WindowManager/ContainerShell.vue +1 -1
  114. package/components/nav/WorkspaceSwitcher.vue +1 -1
  115. package/config/home-links.js +4 -4
  116. package/config/labels-annotations.js +8 -9
  117. package/config/pod-security-admission.ts +1 -1
  118. package/config/product/auth.js +4 -4
  119. package/config/product/explorer.js +14 -0
  120. package/config/router.js +5 -0
  121. package/config/store.js +2 -0
  122. package/config/table-headers.js +13 -13
  123. package/config/uiplugins.js +8 -1
  124. package/core/plugin-routes.ts +3 -2
  125. package/core/plugin.ts +3 -3
  126. package/core/plugins.js +7 -7
  127. package/creators/pkg/files/index.ts +1 -1
  128. package/detail/cis.cattle.io.clusterscan.vue +3 -3
  129. package/detail/fleet.cattle.io.bundle.vue +1 -1
  130. package/detail/helm.cattle.io.projecthelmchart.vue +16 -29
  131. package/detail/management.cattle.io.user.vue +12 -12
  132. package/detail/namespace.vue +4 -4
  133. package/detail/networking.k8s.io.ingress.vue +3 -3
  134. package/detail/node.vue +2 -2
  135. package/detail/provisioning.cattle.io.cluster.vue +9 -10
  136. package/detail/service.vue +1 -1
  137. package/detail/workload/index.vue +3 -3
  138. package/dialog/AddProjectMemberDialog.vue +2 -2
  139. package/dialog/DrainNode.vue +1 -1
  140. package/dialog/GenericPrompt.vue +9 -5
  141. package/dialog/RotateEncryptionKeyDialog.vue +2 -2
  142. package/dialog/ScaleMachineDownDialog.vue +2 -2
  143. package/edit/auth/azuread.vue +3 -3
  144. package/edit/autoscaling.horizontalpodautoscaler/index.vue +5 -5
  145. package/edit/cis.cattle.io.clusterscan.vue +5 -5
  146. package/edit/cloudcredential.vue +4 -4
  147. package/edit/constraints.gatekeeper.sh.constraint/NamespaceList.vue +1 -1
  148. package/edit/constraints.gatekeeper.sh.constraint/index.vue +4 -4
  149. package/edit/fleet.cattle.io.gitrepo.vue +6 -6
  150. package/edit/helm.cattle.io.projecthelmchart.vue +3 -3
  151. package/edit/logging-flow/index.vue +4 -4
  152. package/edit/logging.banzaicloud.io.output/index.vue +3 -3
  153. package/edit/logging.banzaicloud.io.output/providers/elasticsearch.vue +1 -1
  154. package/edit/logging.banzaicloud.io.output/providers/forward.vue +1 -1
  155. package/edit/logging.banzaicloud.io.output/providers/logz.vue +1 -1
  156. package/edit/logging.banzaicloud.io.output/providers/opensearch.vue +1 -1
  157. package/edit/logging.banzaicloud.io.output/providers/redis.vue +1 -1
  158. package/edit/logging.banzaicloud.io.output/providers/splunkHec.vue +1 -1
  159. package/edit/management.cattle.io.clusterroletemplatebinding.vue +1 -1
  160. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +1 -1
  161. package/edit/management.cattle.io.project.vue +3 -3
  162. package/edit/management.cattle.io.projectroletemplatebinding.vue +2 -2
  163. package/edit/management.cattle.io.setting.vue +1 -1
  164. package/edit/management.cattle.io.user.vue +2 -2
  165. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +2 -2
  166. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  167. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +1 -1
  168. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +3 -3
  169. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +5 -5
  170. package/edit/monitoring.coreos.com.prometheusrule/duration.js +1 -1
  171. package/edit/monitoring.coreos.com.receiver/auth.vue +2 -2
  172. package/edit/monitoring.coreos.com.receiver/tls.vue +3 -4
  173. package/edit/monitoring.coreos.com.receiver/types/__tests__/email.test.ts +53 -0
  174. package/edit/monitoring.coreos.com.receiver/types/email.vue +2 -0
  175. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +3 -3
  176. package/edit/monitoring.coreos.com.receiver/types/webhook.add.vue +1 -1
  177. package/edit/monitoring.coreos.com.route.vue +2 -2
  178. package/edit/namespace.vue +21 -13
  179. package/edit/networking.k8s.io.ingress/Certificate.vue +2 -2
  180. package/edit/networking.k8s.io.ingress/DefaultBackend.vue +2 -2
  181. package/edit/networking.k8s.io.ingress/RulePath.vue +2 -2
  182. package/edit/networking.k8s.io.ingress/Rules.vue +2 -2
  183. package/edit/networking.k8s.io.ingress/index.vue +4 -4
  184. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +3 -3
  185. package/edit/networking.k8s.io.networkpolicy/index.vue +1 -1
  186. package/edit/persistentvolume/index.vue +4 -4
  187. package/edit/persistentvolumeclaim.vue +3 -3
  188. package/edit/provisioning.cattle.io.cluster/RegistryMirrors.vue +1 -1
  189. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +2 -2
  190. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  191. package/edit/provisioning.cattle.io.cluster/index.vue +7 -7
  192. package/edit/provisioning.cattle.io.cluster/rke2.vue +28 -29
  193. package/edit/resources.cattle.io.backup.vue +2 -2
  194. package/edit/resources.cattle.io.restore.vue +3 -3
  195. package/edit/secret/generic.vue +1 -1
  196. package/edit/secret/index.vue +3 -3
  197. package/edit/service.vue +3 -21
  198. package/edit/serviceaccount.vue +2 -2
  199. package/edit/storage.k8s.io.storageclass/index.vue +4 -4
  200. package/edit/storage.k8s.io.storageclass/provisioners/driver.harvesterhci.io.vue +1 -1
  201. package/edit/token.vue +5 -5
  202. package/edit/workload/index.vue +1 -1
  203. package/edit/workload/mixins/workload.js +8 -8
  204. package/edit/workload/storage/ContainerMountPaths.vue +9 -9
  205. package/edit/workload/storage/Mount.vue +2 -2
  206. package/edit/workload/storage/csi/index.vue +1 -1
  207. package/edit/workload/storage/ephemeralVolume/index.vue +1 -1
  208. package/edit/workload/storage/index.vue +6 -6
  209. package/edit/workload/storage/persistentVolumeClaim/persistentvolumeclaim.vue +2 -2
  210. package/initialize/client.js +8 -8
  211. package/initialize/index.js +1 -4
  212. package/layouts/default.vue +38 -11
  213. package/list/catalog.cattle.io.clusterrepo.vue +9 -1
  214. package/list/cis.cattle.io.clusterscan.vue +1 -1
  215. package/list/fleet.cattle.io.cluster.vue +2 -2
  216. package/list/group.principal.vue +1 -1
  217. package/list/helm.cattle.io.projecthelmchart.vue +2 -2
  218. package/list/management.cattle.io.cluster.vue +1 -1
  219. package/list/management.cattle.io.feature.vue +1 -1
  220. package/list/management.cattle.io.user.vue +2 -2
  221. package/list/node.vue +5 -5
  222. package/list/provisioning.cattle.io.cluster.vue +4 -5
  223. package/machine-config/amazonec2.vue +2 -2
  224. package/machine-config/digitalocean.vue +4 -4
  225. package/machine-config/linode.vue +4 -4
  226. package/machine-config/vmwarevsphere.vue +12 -12
  227. package/middleware/authenticated.js +7 -6
  228. package/mixins/brand.js +1 -1
  229. package/mixins/chart.js +6 -6
  230. package/mixins/fetch.client.js +2 -2
  231. package/mixins/form-validation.js +7 -7
  232. package/mixins/resource-fetch-namespaced.js +1 -1
  233. package/mixins/resource-fetch.js +2 -2
  234. package/models/apps.statefulset.js +2 -2
  235. package/models/batch.cronjob.js +1 -1
  236. package/models/catalog.cattle.io.app.js +4 -4
  237. package/models/cis.cattle.io.clusterscan.js +1 -1
  238. package/models/cis.cattle.io.clusterscanbenchmark.js +1 -1
  239. package/models/cis.cattle.io.clusterscanreport.js +1 -1
  240. package/models/cloudcredential.js +1 -1
  241. package/models/cluster/node.js +5 -5
  242. package/models/cluster.x-k8s.io.machinedeployment.js +2 -2
  243. package/models/fleet.cattle.io.gitrepo.js +3 -3
  244. package/models/group.principal.js +4 -4
  245. package/models/helm.cattle.io.projecthelmchart.js +2 -2
  246. package/models/logging.banzaicloud.io.clusterflow.js +2 -2
  247. package/models/logging.banzaicloud.io.flow.js +5 -5
  248. package/models/logging.banzaicloud.io.output.js +2 -2
  249. package/models/management.cattle.io.cluster.js +10 -14
  250. package/models/management.cattle.io.globalrole.js +4 -4
  251. package/models/management.cattle.io.node.js +2 -2
  252. package/models/management.cattle.io.nodepool.js +3 -3
  253. package/models/management.cattle.io.nodetemplate.js +4 -4
  254. package/models/management.cattle.io.project.js +2 -2
  255. package/models/management.cattle.io.roletemplate.js +1 -1
  256. package/models/management.cattle.io.setting.js +1 -1
  257. package/models/management.cattle.io.user.js +5 -5
  258. package/models/monitoring.coreos.com.receiver.js +9 -9
  259. package/models/namespace.js +1 -1
  260. package/models/networking.k8s.io.ingress.js +5 -5
  261. package/models/persistentvolume.js +3 -3
  262. package/models/pod.js +3 -3
  263. package/models/provisioning.cattle.io.cluster.js +39 -27
  264. package/models/rbac.authorization.k8s.io.clusterrole.js +2 -2
  265. package/models/rbac.authorization.k8s.io.role.js +3 -3
  266. package/models/secret.js +1 -1
  267. package/models/service.js +2 -2
  268. package/models/storage.k8s.io.storageclass.js +2 -2
  269. package/models/token.js +1 -1
  270. package/models/workload.js +6 -6
  271. package/models/workload.service.js +5 -21
  272. package/package.json +2 -1
  273. package/pages/about.vue +9 -9
  274. package/pages/account/index.vue +2 -2
  275. package/pages/auth/login.vue +15 -12
  276. package/pages/auth/verify.vue +6 -0
  277. package/pages/c/_cluster/apps/charts/index.vue +4 -4
  278. package/pages/c/_cluster/apps/charts/install.vue +28 -20
  279. package/pages/c/_cluster/auth/roles/index.vue +9 -9
  280. package/pages/c/_cluster/explorer/index.vue +41 -16
  281. package/pages/c/_cluster/explorer/tools/index.vue +8 -8
  282. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +1 -1
  283. package/pages/c/_cluster/fleet/index.vue +11 -11
  284. package/pages/c/_cluster/monitoring/index.vue +1 -1
  285. package/pages/c/_cluster/settings/links.vue +3 -3
  286. package/pages/c/_cluster/settings/performance.vue +1 -1
  287. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +6 -6
  288. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +3 -3
  289. package/pages/c/_cluster/uiplugins/InstallDialog.vue +3 -3
  290. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +1 -1
  291. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +3 -3
  292. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +6 -6
  293. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +4 -4
  294. package/pages/c/_cluster/uiplugins/index.vue +22 -19
  295. package/pages/diagnostic.vue +6 -6
  296. package/pages/home.vue +3 -3
  297. package/pages/prefs.vue +2 -2
  298. package/pages/rio/mesh.vue +3 -3
  299. package/pages/support/index.vue +10 -1
  300. package/pkg/auto-import.js +1 -1
  301. package/pkg/tsconfig.json +1 -0
  302. package/pkg/vue.config.js +1 -1
  303. package/plugins/axios.js +1 -1
  304. package/plugins/clean-html-directive.js +1 -1
  305. package/plugins/dashboard-store/__tests__/mutations.spec.js +4 -4
  306. package/plugins/dashboard-store/actions.js +4 -4
  307. package/plugins/dashboard-store/getters.js +1 -1
  308. package/plugins/dashboard-store/index.js +1 -1
  309. package/plugins/dashboard-store/mutations.js +2 -2
  310. package/plugins/dashboard-store/resource-class.js +8 -8
  311. package/plugins/i18n.js +1 -1
  312. package/plugins/plugin.js +5 -1
  313. package/plugins/steve/actions.js +3 -3
  314. package/plugins/steve/getters.js +3 -3
  315. package/plugins/steve/hybrid-class.js +1 -1
  316. package/plugins/steve/mutations.js +1 -1
  317. package/plugins/steve/performanceTesting.js +1 -1
  318. package/plugins/steve/resourceWatcher.js +1 -1
  319. package/plugins/steve/subscribe.js +6 -6
  320. package/plugins/steve/worker/web-worker.basic.js +1 -1
  321. package/promptRemove/management.cattle.io.project.vue +3 -3
  322. package/promptRemove/mixin/roleDeletionCheck.js +4 -4
  323. package/promptRemove/pod.vue +1 -1
  324. package/rancher-components/StringList/StringList.vue +34 -50
  325. package/rancher-components/components/Form/Checkbox/Checkbox.test.ts +2 -2
  326. package/rancher-components/components/Form/Checkbox/Checkbox.vue +1 -1
  327. package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -1
  328. package/rancher-components/components/Form/Radio/RadioButton.vue +2 -2
  329. package/rancher-components/components/Form/Radio/RadioGroup.vue +2 -2
  330. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +1 -0
  331. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.test.ts +1 -1
  332. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -7
  333. package/rancher-components/components/StringList/StringList.test.ts +10 -9
  334. package/rancher-components/components/StringList/StringList.vue +5 -5
  335. package/scripts/extension/helm/charts/ui-plugin-server/Chart.yaml +1 -1
  336. package/store/action-menu.js +4 -4
  337. package/store/auth.js +40 -7
  338. package/store/aws.js +1 -1
  339. package/store/catalog.js +12 -11
  340. package/store/digitalocean.js +4 -4
  341. package/store/features.js +1 -0
  342. package/store/github.js +70 -213
  343. package/store/gitlab.js +159 -0
  344. package/store/growl.js +1 -1
  345. package/store/i18n.js +7 -7
  346. package/store/index.js +63 -22
  347. package/store/linode.js +1 -1
  348. package/store/plugins.js +5 -5
  349. package/store/pnap.js +1 -1
  350. package/store/prefs.js +6 -6
  351. package/store/resource-fetch.js +3 -3
  352. package/store/type-map.js +61 -42
  353. package/store/uiplugins.ts +2 -1
  354. package/store/wm.js +5 -4
  355. package/tsconfig.default.json +10 -0
  356. package/tsconfig.json +2 -9
  357. package/types/shell/index.d.ts +21 -13
  358. package/utils/__tests__/version.test.ts +28 -0
  359. package/utils/alertmanagerconfig.js +4 -4
  360. package/utils/array.ts +4 -4
  361. package/utils/async.ts +1 -1
  362. package/utils/auth.js +3 -3
  363. package/utils/axios.js +5 -5
  364. package/utils/cluster.js +4 -3
  365. package/utils/color.js +10 -0
  366. package/utils/create-yaml.js +4 -4
  367. package/utils/crypto/browserHashUtils.js +1 -1
  368. package/utils/crypto/browserMd5.js +1 -1
  369. package/utils/crypto/browserSha1.js +1 -1
  370. package/utils/crypto/browserSha256.js +1 -1
  371. package/utils/crypto/index.js +3 -3
  372. package/utils/favicon.js +2 -3
  373. package/utils/gatekeeper/util.js +3 -3
  374. package/utils/gc/gc.ts +2 -2
  375. package/utils/git.ts +92 -0
  376. package/utils/grafana.js +4 -4
  377. package/utils/monitoring.js +2 -2
  378. package/utils/nuxt.js +2 -2
  379. package/utils/object.js +5 -5
  380. package/utils/pod-security-admission.ts +1 -1
  381. package/utils/projectAndNamespaceFiltering.utils.ts +1 -1
  382. package/utils/select.js +2 -2
  383. package/utils/selector.js +2 -2
  384. package/utils/settings.ts +17 -2
  385. package/utils/socket.js +30 -6
  386. package/utils/sort.js +1 -1
  387. package/utils/string.js +1 -1
  388. package/utils/url.ts +1 -1
  389. package/utils/validators/formRules/index.ts +3 -3
  390. package/utils/validators/role-template.js +4 -4
  391. package/utils/version.js +14 -1
  392. package/vue.config.js +19 -13
  393. package/components/.DS_Store +0 -0
  394. package/components/__tests__/.DS_Store +0 -0
  395. package/components/form/GithubPicker.vue +0 -390
  396. package/creators/pkg/package-lock.json +0 -37
  397. package/yarn-error.log +0 -196
@@ -63,20 +63,20 @@ export default {
63
63
  selectedNamespaceQuestions() {
64
64
  const inStore = this.$store.getters['currentStore']();
65
65
 
66
- const configMapRelationship = this.currentNamespace?.metadata?.relationships.find(relationship => relationship?.toType === 'configmap');
66
+ const configMapRelationship = this.currentNamespace?.metadata?.relationships.find((relationship) => relationship?.toType === 'configmap');
67
67
 
68
68
  const questionsYaml = this.$store.getters[`${ inStore }/byId`](configMapRelationship?.toType, configMapRelationship?.toId)?.data?.['questions.yaml'];
69
69
 
70
70
  return jsyaml.load(questionsYaml)?.questions;
71
71
  },
72
72
  currentNamespace() {
73
- return this.namespaces.find(namespace => namespace.id === this.value?.metadata?.namespace);
73
+ return this.namespaces.find((namespace) => namespace.id === this.value?.metadata?.namespace);
74
74
  }
75
75
  },
76
76
 
77
77
  methods: {
78
78
  getNamespaceConfigMapId(namespace) {
79
- return this.currentNamespace?.metadata?.relationships.find(relationship => relationship?.toType === 'configmap')?.toId;
79
+ return this.currentNamespace?.metadata?.relationships.find((relationship) => relationship?.toType === 'configmap')?.toId;
80
80
  },
81
81
  async getConfigMap(id) {
82
82
  return await this.$store.dispatch('cluster/find', { type: CONFIG_MAP, id });
@@ -109,8 +109,8 @@ export default {
109
109
  matches.push(emptyMatch(true));
110
110
  }
111
111
 
112
- const globalOutputRefs = (this.value.spec.globalOutputRefs || []).map(ref => ({ label: ref, value: ref }));
113
- const localOutputRefs = (this.value.spec.localOutputRefs || []).map(ref => ({ label: ref, value: ref }));
112
+ const globalOutputRefs = (this.value.spec.globalOutputRefs || []).map((ref) => ({ label: ref, value: ref }));
113
+ const localOutputRefs = (this.value.spec.localOutputRefs || []).map((ref) => ({ label: ref, value: ref }));
114
114
 
115
115
  return {
116
116
  formSupported,
@@ -309,7 +309,7 @@ export default {
309
309
 
310
310
  const select = match.select || {};
311
311
  const exclude = match.exclude || {};
312
- const allValuesAreEmpty = o => Object.values(o).every(isEmpty);
312
+ const allValuesAreEmpty = (o) => Object.values(o).every(isEmpty);
313
313
 
314
314
  return allValuesAreEmpty(select) && allValuesAreEmpty(exclude);
315
315
  });
@@ -329,7 +329,7 @@ export default {
329
329
  cm.execCommand('unfold');
330
330
  },
331
331
  isTag(options, option) {
332
- return !options.find(o => o.value === option.value);
332
+ return !options.find((o) => o.value === option.value);
333
333
  }
334
334
  }
335
335
  };
@@ -37,7 +37,7 @@ export default {
37
37
 
38
38
  set(this.value, 'spec', this.value.spec || {});
39
39
 
40
- const providers = PROVIDERS.map(provider => ({
40
+ const providers = PROVIDERS.map((provider) => ({
41
41
  ...provider,
42
42
  value: provider.name,
43
43
  label: this.t(provider.labelKey)
@@ -89,7 +89,7 @@ export default {
89
89
  return EDITOR_MODES;
90
90
  },
91
91
  enabledProviders() {
92
- return this.providers.filter(p => p.enabled);
92
+ return this.providers.filter((p) => p.enabled);
93
93
  },
94
94
  isNamespaced() {
95
95
  return this.value.type !== LOGGING?.CLUSTER_OUTPUT;
@@ -114,7 +114,7 @@ export default {
114
114
  const t = this.$store.getters['i18n/t'];
115
115
 
116
116
  if (this.selectedProvider === 'loki') {
117
- const urlCheck = ['https://', 'http://'].some(checkValue => this.value.spec['loki'].url.toLowerCase().startsWith(checkValue));
117
+ const urlCheck = ['https://', 'http://'].some((checkValue) => this.value.spec['loki'].url.toLowerCase().startsWith(checkValue));
118
118
  const isLokiHttps = this.value.spec['loki'].url ? urlCheck : undefined;
119
119
 
120
120
  if (!isLokiHttps) {
@@ -60,7 +60,7 @@ export default {
60
60
  return this.value.port;
61
61
  },
62
62
  set(port) {
63
- updatePort(value => this.$set(this.value, 'port', value), port);
63
+ updatePort((value) => this.$set(this.value, 'port', value), port);
64
64
  }
65
65
  }
66
66
  }
@@ -31,7 +31,7 @@ export default {
31
31
  return this.value.servers[0].port;
32
32
  },
33
33
  set(port) {
34
- updatePort(value => this.$set(this.value.servers[0], 'port', value), port);
34
+ updatePort((value) => this.$set(this.value.servers[0], 'port', value), port);
35
35
  }
36
36
  }
37
37
  }
@@ -34,7 +34,7 @@ export default {
34
34
  return this.value.endpoint.port;
35
35
  },
36
36
  set(port) {
37
- updatePort(value => this.$set(this.value.endpoint, 'port', value), port);
37
+ updatePort((value) => this.$set(this.value.endpoint, 'port', value), port);
38
38
  }
39
39
  }
40
40
  }
@@ -60,7 +60,7 @@ export default {
60
60
  return this.value.port;
61
61
  },
62
62
  set(port) {
63
- updatePort(value => this.$set(this.value, 'port', value), port);
63
+ updatePort((value) => this.$set(this.value, 'port', value), port);
64
64
  }
65
65
  }
66
66
  }
@@ -41,7 +41,7 @@ export default {
41
41
  return this.value.port;
42
42
  },
43
43
  set(port) {
44
- updatePort(value => this.$set(this.value, 'port', value), port);
44
+ updatePort((value) => this.$set(this.value, 'port', value), port);
45
45
  }
46
46
  }
47
47
  }
@@ -40,7 +40,7 @@ export default {
40
40
  return this.value.hec_port;
41
41
  },
42
42
  set(port) {
43
- updatePort(value => this.$set(this.value, 'hec_port', value), port);
43
+ updatePort((value) => this.$set(this.value, 'hec_port', value), port);
44
44
  }
45
45
  }
46
46
  }
@@ -32,7 +32,7 @@ export default {
32
32
  async saveOverride(btnCb) {
33
33
  this.errors = [];
34
34
  try {
35
- await Promise.all(this.bindings.map(binding => binding.save()));
35
+ await Promise.all(this.bindings.map((binding) => binding.save()));
36
36
 
37
37
  btnCb(true);
38
38
  } catch (err) {
@@ -71,7 +71,7 @@ export default (Vue as VueConstructor<Vue & InstanceType<typeof CreateEditView>>
71
71
  if (!this.value.configuration) {
72
72
  this.value.configuration = {
73
73
  defaults: {},
74
- exemptions: Object.assign({}, ...PSADimensions.map(dimension => ({ [dimension]: [] }))),
74
+ exemptions: Object.assign({}, ...PSADimensions.map((dimension) => ({ [dimension]: [] }))),
75
75
  } as PSAConfig;
76
76
  }
77
77
  }
@@ -14,8 +14,8 @@ import NameNsDescription from '@shell/components/form/NameNsDescription';
14
14
  import { MANAGEMENT } from '@shell/config/types';
15
15
  import { NAME } from '@shell/config/product/explorer';
16
16
  import { PROJECT_ID, _VIEW, _CREATE, _EDIT } from '@shell/config/query-params';
17
- import ProjectMembershipEditor from '@shell/components/form/Members/ProjectMembershipEditor';
18
- import { canViewProjectMembershipEditor } from '@shell/components/form/Members/ProjectMembershipEditor.vue';
17
+ import ProjectMembershipEditor, { canViewProjectMembershipEditor } from '@shell/components/form/Members/ProjectMembershipEditor';
18
+
19
19
  import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
20
20
  import { Banner } from '@components/Banner';
21
21
 
@@ -109,7 +109,7 @@ export default {
109
109
 
110
110
  const cur = this.value.status?.podSecurityPolicyTemplateId;
111
111
 
112
- if ( cur && !out.find(x => x.value === cur) ) {
112
+ if ( cur && !out.find((x) => x.value === cur) ) {
113
113
  out.unshift({ label: this.t('project.psp.current', { value: cur }), value: cur });
114
114
  }
115
115
 
@@ -47,7 +47,7 @@ export default {
47
47
  this.$set(this, 'principalId', principalId);
48
48
  },
49
49
  async saveOverride() {
50
- const asyncBindings = this.binding.roleTemplateIds.map(roleTemplateId => this.$store.dispatch(`management/create`, {
50
+ const asyncBindings = this.binding.roleTemplateIds.map((roleTemplateId) => this.$store.dispatch(`management/create`, {
51
51
  type: MANAGEMENT.PROJECT_ROLE_TEMPLATE_BINDING,
52
52
  roleTemplateName: roleTemplateId,
53
53
  principalName: this.member.principalId,
@@ -56,7 +56,7 @@ export default {
56
56
 
57
57
  const bindings = await Promise.all(asyncBindings);
58
58
 
59
- await Promise.all(bindings.map(binding => binding.save()));
59
+ await Promise.all(bindings.map((binding) => binding.save()));
60
60
  await this.$store.dispatch(`management/findAll`, { type: MANAGEMENT.PROJECT_ROLE_TEMPLATE_BINDING, opt: { force: true } });
61
61
 
62
62
  this.$router.replace(this.doneLocationOverride);
@@ -39,7 +39,7 @@ export default {
39
39
 
40
40
  created() {
41
41
  this.value.value = this.value.value || this.value.default;
42
- this.enumOptions = this.setting?.kind === 'enum' ? this.setting.options.map(id => ({
42
+ this.enumOptions = this.setting?.kind === 'enum' ? this.setting.options.map((id) => ({
43
43
  label: `advancedSettings.enum.${ this.value.id }.${ id }`,
44
44
  value: id,
45
45
  })) : [];
@@ -120,7 +120,7 @@ export default {
120
120
  // Ensure username is unique (this does not happen in the backend)
121
121
  const users = await this.$store.dispatch('management/findAll', { type: MANAGEMENT.USER });
122
122
 
123
- if (users.find(u => u.username === this.form.username)) {
123
+ if (users.find((u) => u.username === this.form.username)) {
124
124
  throw new Error(this.t('user.edit.credentials.username.exists'));
125
125
  }
126
126
 
@@ -159,7 +159,7 @@ export default {
159
159
  // - Fetching the norman user again sometimes shows the correct value, sometimes not
160
160
  // - Even if the fetched norman user shows the correct value, it doesn't show up in the steve user
161
161
  // - Looks like we re-request the stale version via socket?
162
- await new Promise(resolve => setTimeout(resolve, 5000));
162
+ await new Promise((resolve) => setTimeout(resolve, 5000));
163
163
  }
164
164
 
165
165
  // Save user updates
@@ -39,9 +39,9 @@ export default {
39
39
  default: {},
40
40
  },
41
41
  ];
42
- const authTypes = authOptions.map(option => option.value);
42
+ const authTypes = authOptions.map((option) => option.value);
43
43
  const authType =
44
- authTypes.find(authType => !isEmpty(this.value[authType])) ||
44
+ authTypes.find((authType) => !isEmpty(this.value[authType])) ||
45
45
  authTypes[0];
46
46
 
47
47
  this.initializeType(authOptions, authType);
@@ -50,7 +50,7 @@ export default {
50
50
  const defaultReceiverValues = {};
51
51
  const receiverSchema = this.$store.getters['cluster/schemaFor'](MONITORING.SPOOFED.ALERTMANAGERCONFIG_RECEIVER_SPEC);
52
52
  const routeSchema = this.$store.getters['cluster/schemaFor'](MONITORING.SPOOFED.ALERTMANAGERCONFIG_ROUTE_SPEC);
53
- const receiverOptions = (this.value?.spec?.receivers || []).map(receiver => receiver.name);
53
+ const receiverOptions = (this.value?.spec?.receivers || []).map((receiver) => receiver.name);
54
54
 
55
55
  return {
56
56
  actionMenuTargetElement: null,
@@ -185,7 +185,7 @@ export default {
185
185
  return {
186
186
  duplicateName: () => {
187
187
  const receiversArray = this.alertmanagerConfigResource.spec.receivers;
188
- const receiverNamesArray = receiversArray.map(R => R.name);
188
+ const receiverNamesArray = receiversArray.map((R) => R.name);
189
189
  const receiversSet = new Set(receiverNamesArray);
190
190
 
191
191
  if (receiversArray.length !== receiversSet.size) {
@@ -65,7 +65,7 @@ export default {
65
65
  this.$set(this.value, 'responders', this.value.responders || []);
66
66
 
67
67
  const responders = this.value.responders.map((responder) => {
68
- const target = TARGETS.find(target => responder[target.value]);
68
+ const target = TARGETS.find((target) => responder[target.value]);
69
69
 
70
70
  return {
71
71
  type: responder.type,
@@ -118,10 +118,10 @@ export default {
118
118
  row.value = text;
119
119
  },
120
120
  typeLabel(type) {
121
- return TYPES.find(t => t.value === type).label;
121
+ return TYPES.find((t) => t.value === type).label;
122
122
  },
123
123
  targetLabel(target) {
124
- return TARGETS.find(t => t.value === target).label;
124
+ return TARGETS.find((t) => t.value === target).label;
125
125
  },
126
126
  updateApiKeySecretName(name) {
127
127
  const existingKey = this.value.apiKey?.key || '';
@@ -51,18 +51,18 @@ export default {
51
51
  recordingRules() {
52
52
  const { value: rules } = this;
53
53
 
54
- return rules.filter(rule => has(rule, 'record'));
54
+ return rules.filter((rule) => has(rule, 'record'));
55
55
  },
56
56
  alertingRules() {
57
57
  const { value: rules } = this;
58
58
 
59
- return rules.filter(rule => has(rule, 'alert'));
59
+ return rules.filter((rule) => has(rule, 'alert'));
60
60
  },
61
61
  customRules() {
62
62
  const { value: rules } = this;
63
63
 
64
64
  return rules.filter(
65
- rule => !has(rule, 'alert') && !has(rule, 'record')
65
+ (rule) => !has(rule, 'alert') && !has(rule, 'record')
66
66
  );
67
67
  },
68
68
  hideRecordingRulesOnView() {
@@ -77,12 +77,12 @@ export default {
77
77
  disableAddRecord() {
78
78
  const { value: rules } = this;
79
79
 
80
- return rules.find(rule => has(rule, 'alert'));
80
+ return rules.find((rule) => has(rule, 'alert'));
81
81
  },
82
82
  disableAddAlert() {
83
83
  const { value: rules } = this;
84
84
 
85
- return rules.find(rule => has(rule, 'record'));
85
+ return rules.find((rule) => has(rule, 'record'));
86
86
  },
87
87
  },
88
88
 
@@ -21,7 +21,7 @@ export function toMilliseconds(input) {
21
21
 
22
22
  if (d) {
23
23
  const properties = d.slice(1);
24
- const numberD = properties.map(value => ([null, undefined].includes(value) ? 0 : Number(value)));
24
+ const numberD = properties.map((value) => ([null, undefined].includes(value) ? 0 : Number(value)));
25
25
  const data = {};
26
26
 
27
27
  [
@@ -47,8 +47,8 @@ export default {
47
47
  default: ''
48
48
  }
49
49
  ];
50
- const authTypes = authOptions.map(option => option.value);
51
- const authType = authTypes.find(authType => !isEmpty(this.value[authType])) || authTypes[0];
50
+ const authTypes = authOptions.map((option) => option.value);
51
+ const authType = authTypes.find((authType) => !isEmpty(this.value[authType])) || authTypes[0];
52
52
 
53
53
  this.initializeType(authOptions, authType);
54
54
 
@@ -35,10 +35,9 @@ export default {
35
35
  <div class="row">
36
36
  <div class="col span-12">
37
37
  <h3>{{ t('monitoring.receiver.tls.label') }}</h3>
38
- <Banner
39
- v-clean-html="t('monitoring.receiver.tls.secretsBanner', {}, true)"
40
- color="info"
41
- />
38
+ <Banner color="info">
39
+ <span v-clean-html="t('monitoring.receiver.tls.secretsBanner', {}, true)" />
40
+ </Banner>
42
41
  </div>
43
42
  </div>
44
43
  <div class="row mb-20">
@@ -0,0 +1,53 @@
1
+ import { mount } from '@vue/test-utils';
2
+ import Email from '@shell/edit/monitoring.coreos.com.receiver/types/email.vue';
3
+
4
+ describe('page: Routes and Receivers', () => {
5
+ it('should have host field with a valid integer value under Email form', () => {
6
+ const wrapper = mount(Email, {
7
+ propsData: {
8
+ mode: 'create',
9
+ value: {}
10
+ },
11
+ mocks: {
12
+ t: (text: string) => text, // Mock i18n global function used as alternative to the getter
13
+ $store: {
14
+ getters: {
15
+ 'i18n/t': jest.fn(),
16
+ 'i18n/exists': jest.fn()
17
+ }
18
+ }
19
+ },
20
+ });
21
+
22
+ const host = wrapper.find('[data-testid="input-email-host"]');
23
+
24
+ host.setValue('10.2.300.3');
25
+
26
+ expect(host.exists()).toBe(true);
27
+ expect(host.element.value).toStrictEqual('10.2.300.3');
28
+ });
29
+ it('should have port field with a valid integer value under Email form', () => {
30
+ const wrapper = mount(Email, {
31
+ propsData: {
32
+ mode: 'create',
33
+ value: {}
34
+ },
35
+ mocks: {
36
+ t: (text: string) => text, // Mock i18n global function used as alternative to the getter
37
+ $store: {
38
+ getters: {
39
+ 'i18n/t': jest.fn(),
40
+ 'i18n/exists': jest.fn()
41
+ }
42
+ }
43
+ },
44
+ });
45
+
46
+ const port = wrapper.find('[data-testid="input-email-port"]');
47
+
48
+ port.setValue('8080');
49
+
50
+ expect(port.exists()).toBe(true);
51
+ expect(port.element.value).toStrictEqual('8080');
52
+ });
53
+ });
@@ -78,6 +78,7 @@ export default {
78
78
  v-model="value.host"
79
79
  :mode="mode"
80
80
  label="Host"
81
+ data-testid="input-email-host"
81
82
  placeholder="e.g. 192.168.1.121"
82
83
  />
83
84
  </div>
@@ -86,6 +87,7 @@ export default {
86
87
  v-model="value.port"
87
88
  :mode="mode"
88
89
  label="Port"
90
+ data-testid="input-email-port"
89
91
  placeholder="e.g. 80"
90
92
  />
91
93
  </div>
@@ -68,7 +68,7 @@ export default {
68
68
  this.$set(this.value, 'responders', this.value.responders || []);
69
69
 
70
70
  const responders = this.value.responders.map((responder) => {
71
- const target = TARGETS.find(target => responder[target.value]);
71
+ const target = TARGETS.find((target) => responder[target.value]);
72
72
 
73
73
  return {
74
74
  type: responder.type,
@@ -117,10 +117,10 @@ export default {
117
117
  row.value = text;
118
118
  },
119
119
  typeLabel(type) {
120
- return TYPES.find(t => t.value === type).label;
120
+ return TYPES.find((t) => t.value === type).label;
121
121
  },
122
122
  targetLabel(target) {
123
- return TARGETS.find(t => t.value === target).label;
123
+ return TARGETS.find((t) => t.value === target).label;
124
124
  }
125
125
  }
126
126
  };
@@ -34,7 +34,7 @@ export default {
34
34
  value: 'alibaba-cloud-sms'
35
35
  }
36
36
  ],
37
- webhookType: RECEIVERS_TYPES.find(type => type.name === 'webhook'),
37
+ webhookType: RECEIVERS_TYPES.find((type) => type.name === 'webhook'),
38
38
  isView: this.mode === _VIEW
39
39
  };
40
40
  },
@@ -39,10 +39,10 @@ export default {
39
39
  const receivers = this.$store.dispatch('cluster/findAll', { type: MONITORING.SPOOFED.RECEIVER });
40
40
  const routes = this.$store.dispatch('cluster/findAll', { type: MONITORING.SPOOFED.ROUTE });
41
41
 
42
- this.receiverOptions = (await receivers).map(receiver => receiver.spec.name);
42
+ this.receiverOptions = (await receivers).map((receiver) => receiver.spec.name);
43
43
 
44
44
  if (this.isCreate) {
45
- const nonRootRoutes = (await routes).filter(route => !route.isRoot);
45
+ const nonRootRoutes = (await routes).filter((route) => !route.isRoot);
46
46
 
47
47
  this.$set(this.value.spec, 'name', createDefaultRouteName(nonRootRoutes.length));
48
48
  }
@@ -39,7 +39,7 @@ export default {
39
39
  if (this.$store.getters['management/schemaFor'](MANAGEMENT.PROJECT)) {
40
40
  this.projects = await this.$store.dispatch('management/findAll', { type: MANAGEMENT.PROJECT });
41
41
 
42
- this.project = this.projects.find(p => p.id.includes(this.projectName));
42
+ this.project = this.projects.find((p) => p.id.includes(this.projectName));
43
43
  }
44
44
  },
45
45
 
@@ -65,22 +65,18 @@ export default {
65
65
  },
66
66
 
67
67
  computed: {
68
- ...mapGetters(['isSingleProduct']),
68
+ ...mapGetters(['isStandaloneHarvester']),
69
69
 
70
70
  isCreate() {
71
71
  return this.mode === _CREATE;
72
72
  },
73
73
 
74
- isSingleHarvester() {
75
- return this.$store.getters['currentProduct'].inStore === HARVESTER && this.isSingleProduct;
76
- },
77
-
78
74
  projectOpts() {
79
75
  const clusterId = this.$store.getters['currentCluster'].id;
80
76
  let projects = this.$store.getters['management/all'](MANAGEMENT.PROJECT);
81
77
 
82
78
  // Filter out projects not for the current cluster
83
- projects = projects.filter(c => c.spec?.clusterName === clusterId);
79
+ projects = projects.filter((c) => c.spec?.clusterName === clusterId);
84
80
  const out = projects.map((project) => {
85
81
  return {
86
82
  label: project.nameDisplay,
@@ -101,16 +97,24 @@ export default {
101
97
  },
102
98
 
103
99
  showResourceQuota() {
104
- return !this.isSingleHarvester && Object.keys(this.project?.spec?.resourceQuota?.limit || {}).length > 0;
100
+ return (!this.isStandaloneHarvester) && Object.keys(this.project?.spec?.resourceQuota?.limit || {}).length > 0;
105
101
  },
106
102
 
107
103
  showContainerResourceLimit() {
108
- return !this.isSingleHarvester;
104
+ return !this.isStandaloneHarvester;
109
105
  },
110
106
 
111
107
  flatView() {
112
108
  return (this.$route.query[FLAT_VIEW] || false);
113
- }
109
+ },
110
+
111
+ showPodSecurityAdmission() {
112
+ return !this.isStandaloneHarvester;
113
+ },
114
+
115
+ showHarvesterHelpText() {
116
+ return !this.isStandaloneHarvester && this.$store.getters['currentProduct'].inStore === HARVESTER;
117
+ },
114
118
  },
115
119
 
116
120
  watch: {
@@ -121,7 +125,7 @@ export default {
121
125
  },
122
126
 
123
127
  projectName(newProjectName) {
124
- this.$set(this, 'project', this.projects.find(p => p.id.includes(newProjectName)));
128
+ this.$set(this, 'project', this.projects.find((p) => p.id.includes(newProjectName)));
125
129
  }
126
130
  },
127
131
 
@@ -145,7 +149,7 @@ export default {
145
149
  }
146
150
 
147
151
  const projects = this.$store.getters['management/all'](MANAGEMENT.PROJECT);
148
- const project = projects.find(p => p.id.includes(projectName));
152
+ const project = projects.find((p) => p.id.includes(projectName));
149
153
 
150
154
  return project?.spec?.containerDefaultResourceLimit || {};
151
155
  }
@@ -205,6 +209,9 @@ export default {
205
209
  v-else
206
210
  k="resourceQuota.helpText"
207
211
  />
212
+ <span v-if="showHarvesterHelpText">
213
+ {{ t('resourceQuota.helpTextHarvester') }}
214
+ </span>
208
215
  </p>
209
216
  </div>
210
217
  </div>
@@ -212,7 +219,7 @@ export default {
212
219
  v-model="value"
213
220
  :mode="mode"
214
221
  :project="project"
215
- :types="isHarvester ? HARVESTER_TYPES : RANCHER_TYPES"
222
+ :types="isStandaloneHarvester ? HARVESTER_TYPES : RANCHER_TYPES"
216
223
  />
217
224
  </Tab>
218
225
  <Tab
@@ -242,6 +249,7 @@ export default {
242
249
  />
243
250
  </Tab>
244
251
  <Tab
252
+ v-if="showPodSecurityAdmission"
245
253
  name="pod-security-admission"
246
254
  label-key="podSecurityAdmission.name"
247
255
  :label="t('podSecurityAdmission.name')"
@@ -37,10 +37,10 @@ export default {
37
37
  },
38
38
  computed: {
39
39
  certsWithDefault() {
40
- return [this.defaultCert, ...this.certs.map(c => ({ label: c, value: c }))];
40
+ return [this.defaultCert, ...this.certs.map((c) => ({ label: c, value: c }))];
41
41
  },
42
42
  certificateStatus() {
43
- const isValueAnOption = !this.secretName || this.certsWithDefault.find(cert => this.secretName === cert.value);
43
+ const isValueAnOption = !this.secretName || this.certsWithDefault.find((cert) => this.secretName === cert.value);
44
44
 
45
45
  return isValueAnOption ? null : 'warning';
46
46
  },
@@ -44,12 +44,12 @@ export default {
44
44
  return this.mode === _VIEW;
45
45
  },
46
46
  portOptions() {
47
- const service = this.serviceTargets.find(s => s.label === this.serviceName);
47
+ const service = this.serviceTargets.find((s) => s.label === this.serviceName);
48
48
 
49
49
  return service?.ports || [];
50
50
  },
51
51
  serviceTargetStatus() {
52
- const isValueAnOption = !this.serviceName || this.serviceTargets.find(target => this.serviceName === target.value);
52
+ const isValueAnOption = !this.serviceName || this.serviceTargets.find((target) => this.serviceName === target.value);
53
53
 
54
54
  return isValueAnOption ? null : 'warning';
55
55
  },
@@ -55,13 +55,13 @@ export default {
55
55
  },
56
56
  computed: {
57
57
  portOptions() {
58
- const service = this.serviceTargets.find(s => s.label === this.serviceName);
58
+ const service = this.serviceTargets.find((s) => s.label === this.serviceName);
59
59
 
60
60
  return service?.ports || [];
61
61
  },
62
62
  serviceTargetStatus() {
63
63
  const serviceName = this.serviceName?.label || this.serviceName;
64
- const isValueAnOption = !serviceName || this.serviceTargets.find(target => serviceName === target.value);
64
+ const isValueAnOption = !serviceName || this.serviceTargets.find((target) => serviceName === target.value);
65
65
 
66
66
  return isValueAnOption ? null : 'warning';
67
67
  },
@@ -45,7 +45,7 @@ export default {
45
45
  },
46
46
 
47
47
  async fetch() {
48
- await Promise.all(Object.values(WORKLOAD_TYPES).map(type => this.$store.dispatch('cluster/findAll', { type })));
48
+ await Promise.all(Object.values(WORKLOAD_TYPES).map((type) => this.$store.dispatch('cluster/findAll', { type })));
49
49
  },
50
50
 
51
51
  beforeUpdate() {
@@ -58,7 +58,7 @@ export default {
58
58
 
59
59
  computed: {
60
60
  workloads() {
61
- return Object.values(WORKLOAD_TYPES).flatMap(type => this.$store.getters['cluster/all'](type));
61
+ return Object.values(WORKLOAD_TYPES).flatMap((type) => this.$store.getters['cluster/all'](type));
62
62
  },
63
63
  isView() {
64
64
  return this.mode === _VIEW;