@rancher/shell 3.0.5-rc.3 → 3.0.5-rc.6

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 (424) hide show
  1. package/assets/data/aws-regions.json +1 -0
  2. package/assets/images/icons/document.svg +3 -0
  3. package/assets/images/key.svg +17 -0
  4. package/assets/images/vendor/cognito.svg +1 -0
  5. package/assets/styles/app.scss +1 -0
  6. package/assets/styles/base/_basic.scss +10 -0
  7. package/assets/styles/base/_spacing.scss +29 -0
  8. package/assets/styles/global/_form.scss +1 -1
  9. package/assets/styles/global/_labeled-input.scss +1 -1
  10. package/assets/styles/global/_layout.scss +1 -1
  11. package/assets/styles/themes/_dark.scss +28 -0
  12. package/assets/styles/themes/_light.scss +68 -0
  13. package/assets/styles/vendor/vue-select.scss +1 -1
  14. package/assets/translations/en-us.yaml +721 -83
  15. package/assets/translations/zh-hans.yaml +11 -9
  16. package/cloud-credential/gcp.vue +9 -1
  17. package/components/AppModal.vue +2 -0
  18. package/components/Certificates.vue +5 -0
  19. package/components/CodeMirror.vue +1 -1
  20. package/components/ConfigMapSettings/Settings.vue +377 -0
  21. package/components/ConfigMapSettings/index.vue +354 -0
  22. package/components/CruResource.vue +1 -2
  23. package/components/DetailText.vue +61 -11
  24. package/components/Drawer/Chrome.vue +116 -0
  25. package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
  26. package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
  27. package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
  28. package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
  29. package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +82 -0
  30. package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
  31. package/components/Drawer/ResourceDetailDrawer/composables.ts +50 -0
  32. package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
  33. package/components/Drawer/ResourceDetailDrawer/index.vue +110 -0
  34. package/components/FilterPanel.vue +156 -0
  35. package/components/{fleet/ForceDirectedTreeChart/index.vue → ForceDirectedTreeChart.vue} +47 -41
  36. package/components/GrowlManager.vue +16 -15
  37. package/components/IconOrSvg.vue +19 -35
  38. package/components/KeyValueView.vue +1 -1
  39. package/components/LocaleSelector.vue +9 -1
  40. package/components/ProgressBarMulti.vue +1 -0
  41. package/components/PromptModal.vue +6 -1
  42. package/components/PromptRemove.vue +5 -1
  43. package/components/RelatedResources.vue +4 -12
  44. package/components/Resource/Detail/Additional.vue +46 -0
  45. package/components/Resource/Detail/Card/PodsCard/Bubble.vue +13 -0
  46. package/components/Resource/Detail/Card/PodsCard/composable.ts +30 -0
  47. package/components/Resource/Detail/Card/PodsCard/index.vue +118 -0
  48. package/components/Resource/Detail/Card/ResourceUsageCard/composable.ts +51 -0
  49. package/components/Resource/Detail/Card/ResourceUsageCard/index.vue +79 -0
  50. package/components/Resource/Detail/Card/Scaler.vue +89 -0
  51. package/components/Resource/Detail/Card/StateCard/composables.ts +112 -0
  52. package/components/Resource/Detail/Card/StateCard/index.vue +39 -0
  53. package/components/Resource/Detail/Card/VerticalGap.vue +11 -0
  54. package/components/Resource/Detail/Card/__tests__/Card.test.ts +36 -0
  55. package/components/Resource/Detail/Card/__tests__/PodsCard.test.ts +84 -0
  56. package/components/Resource/Detail/Card/__tests__/ResourceUsageCard.test.ts +72 -0
  57. package/components/Resource/Detail/Card/__tests__/Scaler.test.ts +87 -0
  58. package/components/Resource/Detail/Card/__tests__/StateCard.test.ts +53 -0
  59. package/components/Resource/Detail/Card/__tests__/VerticalGap.test.ts +14 -0
  60. package/components/Resource/Detail/Card/__tests__/index.test.ts +36 -0
  61. package/components/Resource/Detail/Card/index.vue +56 -0
  62. package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +19 -0
  63. package/components/Resource/Detail/Metadata/Annotations/composable.ts +12 -0
  64. package/components/Resource/Detail/Metadata/Annotations/index.vue +31 -0
  65. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
  66. package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/index.test.ts +103 -0
  67. package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +64 -0
  68. package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +298 -0
  69. package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +133 -0
  70. package/components/Resource/Detail/Metadata/KeyValue.vue +138 -0
  71. package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +18 -0
  72. package/components/Resource/Detail/Metadata/Labels/composable.ts +12 -0
  73. package/components/Resource/Detail/Metadata/Labels/index.vue +31 -0
  74. package/components/Resource/Detail/Metadata/Rectangle.vue +32 -0
  75. package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +107 -0
  76. package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +24 -0
  77. package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
  78. package/components/Resource/Detail/Metadata/__tests__/index.test.ts +91 -0
  79. package/components/Resource/Detail/Metadata/composables.ts +78 -0
  80. package/components/Resource/Detail/Metadata/index.vue +73 -0
  81. package/components/Resource/Detail/Page.vue +37 -0
  82. package/components/Resource/Detail/PercentageBar.vue +40 -0
  83. package/components/Resource/Detail/ResourceRow.vue +138 -0
  84. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
  85. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
  86. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
  87. package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
  88. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
  89. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
  90. package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
  91. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
  92. package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
  93. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
  94. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
  95. package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
  96. package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
  97. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
  98. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
  99. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
  100. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
  101. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
  102. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
  103. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
  104. package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
  105. package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
  106. package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
  107. package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
  108. package/components/Resource/Detail/SpacedRow.vue +14 -0
  109. package/components/Resource/Detail/StatusBar.vue +59 -0
  110. package/components/Resource/Detail/StatusRow.vue +61 -0
  111. package/components/Resource/Detail/TitleBar/Title.vue +14 -0
  112. package/components/Resource/Detail/TitleBar/Top.vue +14 -0
  113. package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +17 -0
  114. package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +17 -0
  115. package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
  116. package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +142 -0
  117. package/components/Resource/Detail/TitleBar/composables.ts +44 -0
  118. package/components/Resource/Detail/TitleBar/index.vue +196 -0
  119. package/components/Resource/Detail/Top/index.vue +34 -0
  120. package/components/Resource/Detail/__tests__/Page.test.ts +32 -0
  121. package/components/Resource/Detail/composables.ts +45 -0
  122. package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
  123. package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
  124. package/components/ResourceDetail/Masthead/index.vue +65 -0
  125. package/components/ResourceDetail/Masthead/latest.vue +44 -0
  126. package/components/ResourceDetail/__tests__/index.test.ts +135 -0
  127. package/components/ResourceDetail/index.vue +73 -557
  128. package/components/ResourceDetail/legacy.vue +562 -0
  129. package/components/ResourceList/Masthead.vue +6 -0
  130. package/components/ResourceTable.vue +41 -7
  131. package/components/ResourceYaml.vue +14 -1
  132. package/components/SlideInPanelManager.vue +117 -10
  133. package/components/SortableTable/index.vue +13 -2
  134. package/components/SortableTable/selection.js +21 -8
  135. package/components/StateDot/index.vue +28 -0
  136. package/components/StatusBadge.vue +6 -4
  137. package/components/SubtleLink.vue +25 -0
  138. package/components/Tabbed/index.vue +11 -15
  139. package/components/Wizard.vue +16 -3
  140. package/components/YamlEditor.vue +1 -1
  141. package/components/__tests__/ConfigMapSettings.test.ts +376 -0
  142. package/components/__tests__/FilterPanel.test.ts +81 -0
  143. package/components/__tests__/GrowlManager.test.ts +0 -25
  144. package/components/auth/AuthBanner.vue +2 -3
  145. package/components/auth/RoleDetailEdit.vue +45 -3
  146. package/components/auth/login/ldap.vue +1 -1
  147. package/components/auth/login/oidc.vue +6 -1
  148. package/components/fleet/FleetApplications.vue +174 -0
  149. package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
  150. package/components/fleet/FleetClusterTargets/index.vue +455 -0
  151. package/components/fleet/FleetClusters.vue +25 -6
  152. package/components/fleet/FleetGitRepoPaths.vue +476 -0
  153. package/components/fleet/FleetHelmOps.vue +123 -0
  154. package/components/fleet/FleetIntro.vue +58 -28
  155. package/components/fleet/FleetNoWorkspaces.vue +5 -1
  156. package/components/fleet/FleetOCIStorageSecret.vue +171 -0
  157. package/components/fleet/FleetRepos.vue +37 -80
  158. package/components/fleet/FleetResources.vue +53 -26
  159. package/components/fleet/FleetSummary.vue +26 -51
  160. package/components/fleet/FleetValuesFrom.vue +295 -0
  161. package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
  162. package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
  163. package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +213 -0
  164. package/components/fleet/__tests__/FleetSummary.test.ts +39 -39
  165. package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
  166. package/components/fleet/dashboard/Empty.vue +73 -0
  167. package/components/fleet/dashboard/ResourceCard.vue +184 -0
  168. package/components/fleet/dashboard/ResourceCardSummary.vue +195 -0
  169. package/components/fleet/dashboard/ResourceDetails.vue +194 -0
  170. package/components/fleet/dashboard/ResourcePanel.vue +383 -0
  171. package/components/form/ArrayList.vue +19 -2
  172. package/components/form/ChangePassword.vue +3 -1
  173. package/components/form/Footer.vue +10 -4
  174. package/components/form/KeyValue.vue +81 -43
  175. package/components/form/LabeledSelect.vue +56 -16
  176. package/components/form/Labels.vue +90 -17
  177. package/components/form/MatchExpressions.vue +46 -5
  178. package/components/form/NameNsDescription.vue +1 -1
  179. package/components/form/ResourceSelector.vue +1 -0
  180. package/components/form/ResourceTabs/index.vue +5 -0
  181. package/components/form/SecretSelector.vue +9 -2
  182. package/components/form/Select.vue +57 -19
  183. package/components/form/SimpleSecretSelector.vue +17 -4
  184. package/components/form/Taints.vue +21 -2
  185. package/components/form/UnitInput.vue +8 -0
  186. package/components/form/ValueFromResource.vue +31 -19
  187. package/components/form/__tests__/LabeledSelect.test.ts +8 -4
  188. package/components/form/__tests__/Labels.test.ts +360 -0
  189. package/components/form/__tests__/MatchExpressions.test.ts +16 -13
  190. package/components/form/__tests__/Select.test.ts +5 -2
  191. package/components/formatter/FleetApplicationClustersReady.vue +77 -0
  192. package/components/formatter/FleetApplicationSource.vue +71 -0
  193. package/components/formatter/FleetSummaryGraph.vue +7 -0
  194. package/components/formatter/WorkloadHealthScale.vue +1 -1
  195. package/components/google/AccountAccess.vue +211 -0
  196. package/components/google/types/gcp.d.ts +136 -0
  197. package/components/google/types/index.d.ts +101 -0
  198. package/components/google/util/__mocks__/gcp.ts +465 -0
  199. package/components/google/util/formatter.ts +82 -0
  200. package/components/google/util/gcp.ts +134 -0
  201. package/components/google/util/index.d.ts +11 -0
  202. package/components/nav/Favorite.vue +1 -1
  203. package/components/nav/Group.vue +70 -47
  204. package/components/nav/Header.vue +13 -8
  205. package/components/nav/NamespaceFilter.vue +13 -1
  206. package/components/nav/NotificationCenter/Notification.vue +510 -0
  207. package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
  208. package/components/nav/NotificationCenter/index.vue +148 -0
  209. package/components/nav/TopLevelMenu.helper.ts +55 -34
  210. package/components/nav/TopLevelMenu.vue +11 -0
  211. package/components/nav/Type.vue +4 -1
  212. package/composables/drawer.ts +26 -0
  213. package/composables/resources.test.ts +63 -0
  214. package/composables/resources.ts +38 -0
  215. package/composables/useI18n.ts +12 -11
  216. package/composables/useIsNewDetailPageEnabled.ts +17 -0
  217. package/config/labels-annotations.js +20 -11
  218. package/config/product/auth.js +17 -1
  219. package/config/product/{cis.js → compliance.js} +23 -26
  220. package/config/product/explorer.js +5 -1
  221. package/config/product/fleet.js +77 -17
  222. package/config/product/settings.js +22 -11
  223. package/config/query-params.js +6 -1
  224. package/config/roles.ts +2 -1
  225. package/config/router/navigation-guards/authentication.js +51 -2
  226. package/config/router/routes.js +45 -31
  227. package/config/secret.ts +15 -0
  228. package/config/settings.ts +24 -5
  229. package/config/store.js +2 -0
  230. package/config/system-namespaces.js +1 -1
  231. package/config/table-headers.js +53 -23
  232. package/config/types.js +17 -6
  233. package/core/plugin-helpers.ts +3 -2
  234. package/core/plugin.ts +32 -7
  235. package/core/types.ts +18 -1
  236. package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
  237. package/detail/fleet.cattle.io.cluster.vue +28 -15
  238. package/detail/fleet.cattle.io.gitrepo.vue +10 -1
  239. package/detail/fleet.cattle.io.helmop.vue +157 -0
  240. package/detail/management.cattle.io.fleetworkspace.vue +18 -27
  241. package/detail/management.cattle.io.oidcclient.vue +369 -0
  242. package/detail/node.vue +2 -2
  243. package/detail/pod.vue +2 -2
  244. package/detail/service.vue +10 -1
  245. package/detail/workload/index.vue +8 -2
  246. package/dialog/ExtensionCatalogUninstallDialog.vue +7 -4
  247. package/dialog/GenericPrompt.vue +1 -1
  248. package/dialog/HelmOpForceUpdateDialog.vue +132 -0
  249. package/dialog/ImportDialog.vue +8 -8
  250. package/dialog/OidcClientSecretDialog.vue +117 -0
  251. package/dialog/RedeployWorkloadDialog.vue +164 -0
  252. package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
  253. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +60 -68
  254. package/edit/auth/oidc.vue +159 -93
  255. package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
  256. package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
  257. package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
  258. package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
  259. package/edit/configmap.vue +4 -1
  260. package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
  261. package/edit/fleet.cattle.io.gitrepo.vue +70 -255
  262. package/edit/fleet.cattle.io.helmop.vue +772 -0
  263. package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
  264. package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
  265. package/edit/logging-flow/index.vue +1 -0
  266. package/edit/logging.banzaicloud.io.output/index.vue +1 -0
  267. package/edit/management.cattle.io.fleetworkspace.vue +44 -10
  268. package/edit/management.cattle.io.oidcclient.vue +162 -0
  269. package/edit/management.cattle.io.project.vue +4 -1
  270. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
  271. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
  272. package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
  273. package/edit/monitoring.coreos.com.receiver/auth.vue +30 -30
  274. package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
  275. package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
  276. package/edit/monitoring.coreos.com.route.vue +1 -0
  277. package/edit/namespace.vue +1 -0
  278. package/edit/networking.istio.io.destinationrule/index.vue +4 -1
  279. package/edit/networking.k8s.io.ingress/index.vue +4 -1
  280. package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +7 -2
  281. package/edit/networking.k8s.io.networkpolicy/index.vue +6 -2
  282. package/edit/node.vue +1 -0
  283. package/edit/persistentvolume/index.vue +4 -1
  284. package/edit/provisioning.cattle.io.cluster/rke2.vue +418 -382
  285. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +27 -27
  286. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
  287. package/edit/resources.cattle.io.restore.vue +1 -1
  288. package/edit/secret/index.vue +1 -0
  289. package/edit/service.vue +4 -1
  290. package/edit/serviceaccount.vue +4 -1
  291. package/edit/storage.k8s.io.storageclass/index.vue +4 -1
  292. package/edit/workload/index.vue +5 -0
  293. package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
  294. package/list/fleet.cattle.io.gitrepo.vue +1 -1
  295. package/list/fleet.cattle.io.helmop.vue +108 -0
  296. package/list/management.cattle.io.oidcclient.vue +108 -0
  297. package/list/namespace.vue +5 -2
  298. package/list/node.vue +2 -0
  299. package/machine-config/amazonec2.vue +3 -24
  300. package/machine-config/components/GCEImage.vue +374 -0
  301. package/machine-config/google.vue +617 -0
  302. package/mixins/__tests__/brand.spec.ts +170 -0
  303. package/mixins/auth-config.js +8 -1
  304. package/mixins/brand.js +16 -17
  305. package/mixins/create-edit-view/index.js +5 -0
  306. package/mixins/preset.js +100 -0
  307. package/mixins/resource-fetch-api-pagination.js +18 -0
  308. package/mixins/resource-fetch.js +1 -1
  309. package/mixins/resource-table-watch.js +45 -0
  310. package/mixins/vue-select-overrides.js +1 -0
  311. package/models/__tests__/chart.test.ts +273 -0
  312. package/models/__tests__/fleet.cattle.io.gitrepo.test.ts +1 -1
  313. package/models/chart.js +144 -2
  314. package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
  315. package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
  316. package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
  317. package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
  318. package/models/fleet-application.js +314 -0
  319. package/models/fleet.cattle.io.bundle.js +9 -8
  320. package/models/fleet.cattle.io.cluster.js +11 -0
  321. package/models/fleet.cattle.io.gitrepo.js +41 -365
  322. package/models/fleet.cattle.io.helmop.js +198 -0
  323. package/models/management.cattle.io.authconfig.js +1 -0
  324. package/models/management.cattle.io.fleetworkspace.js +14 -1
  325. package/models/management.cattle.io.oidcclient.js +18 -0
  326. package/models/management.cattle.io.registration.js +3 -0
  327. package/models/provisioning.cattle.io.cluster.js +5 -5
  328. package/models/service.js +4 -0
  329. package/models/workload.js +19 -18
  330. package/package.json +2 -1
  331. package/pages/about.vue +4 -58
  332. package/pages/auth/login.vue +1 -1
  333. package/pages/auth/verify.vue +13 -1
  334. package/pages/c/_cluster/apps/charts/AddRepoLink.vue +36 -0
  335. package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +80 -0
  336. package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +54 -0
  337. package/pages/c/_cluster/apps/charts/StatusLabel.vue +33 -0
  338. package/pages/c/_cluster/apps/charts/index.vue +487 -465
  339. package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
  340. package/pages/c/_cluster/explorer/EventsTable.vue +1 -1
  341. package/pages/c/_cluster/explorer/index.vue +3 -3
  342. package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
  343. package/pages/c/_cluster/fleet/__tests__/index.test.ts +426 -0
  344. package/pages/c/_cluster/fleet/application/_resource/_id.vue +14 -0
  345. package/pages/c/_cluster/fleet/application/_resource/create.vue +14 -0
  346. package/pages/c/_cluster/fleet/application/create.vue +341 -0
  347. package/pages/c/_cluster/fleet/application/index.vue +139 -0
  348. package/pages/c/_cluster/fleet/graph/config.js +277 -0
  349. package/pages/c/_cluster/fleet/index.vue +809 -329
  350. package/pages/c/_cluster/fleet/settings/index.vue +229 -0
  351. package/pages/c/_cluster/longhorn/index.vue +5 -2
  352. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
  353. package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
  354. package/pages/explorer/resource/detail/configmap.vue +42 -0
  355. package/pages/explorer/resource/detail/secret.vue +50 -0
  356. package/pages/home.vue +9 -55
  357. package/pages/support/index.vue +4 -6
  358. package/plugins/dashboard-store/actions.js +50 -14
  359. package/plugins/dashboard-store/getters.js +38 -21
  360. package/plugins/dashboard-store/mutations.js +51 -7
  361. package/plugins/dashboard-store/resource-class.js +30 -4
  362. package/plugins/steve/__tests__/subscribe.spec.ts +66 -1
  363. package/plugins/steve/actions.js +3 -0
  364. package/plugins/steve/steve-pagination-utils.ts +17 -8
  365. package/plugins/steve/subscribe.js +235 -43
  366. package/rancher-components/BadgeState/BadgeState.vue +3 -1
  367. package/rancher-components/Banner/Banner.vue +13 -0
  368. package/rancher-components/Form/Checkbox/Checkbox.vue +11 -6
  369. package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
  370. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
  371. package/rancher-components/RcItemCard/RcItemCard.test.ts +189 -0
  372. package/rancher-components/RcItemCard/RcItemCard.vue +430 -0
  373. package/rancher-components/RcItemCard/RcItemCardAction.vue +24 -0
  374. package/rancher-components/RcItemCard/index.ts +2 -0
  375. package/store/auth.js +3 -0
  376. package/store/catalog.js +85 -25
  377. package/store/growl.js +97 -8
  378. package/store/index.js +39 -14
  379. package/store/notifications.ts +426 -0
  380. package/store/prefs.js +0 -1
  381. package/store/slideInPanel.ts +6 -0
  382. package/store/type-map.js +19 -15
  383. package/store/uiplugins.ts +15 -1
  384. package/types/fleet.d.ts +59 -0
  385. package/types/notifications/index.ts +74 -0
  386. package/types/resources/settings.d.ts +19 -1
  387. package/types/shell/index.d.ts +388 -307
  388. package/types/store/dashboard-store.types.ts +33 -3
  389. package/types/store/pagination.types.ts +6 -1
  390. package/types/store/subscribe.types.ts +50 -0
  391. package/utils/__tests__/fleet.test.ts +148 -0
  392. package/utils/__tests__/object.test.ts +54 -1
  393. package/utils/__tests__/string.test.ts +273 -1
  394. package/utils/__tests__/time.test.ts +31 -0
  395. package/utils/auth.js +41 -5
  396. package/utils/crypto/encryption.ts +103 -0
  397. package/utils/cspAdaptor.ts +51 -0
  398. package/utils/fleet-types.ts +0 -0
  399. package/utils/fleet.ts +190 -2
  400. package/utils/object.js +36 -0
  401. package/utils/pagination-utils.ts +27 -2
  402. package/utils/pagination-wrapper.ts +132 -50
  403. package/utils/release-notes.ts +48 -0
  404. package/utils/selector-typed.ts +7 -2
  405. package/utils/settings.ts +4 -1
  406. package/utils/string.js +24 -0
  407. package/utils/style.ts +39 -0
  408. package/utils/{time.js → time.ts} +25 -6
  409. package/utils/uiplugins.ts +22 -0
  410. package/utils/validators/formRules/__tests__/index.test.ts +36 -3
  411. package/utils/validators/formRules/index.ts +13 -3
  412. package/utils/window.js +11 -7
  413. package/components/__tests__/ApplicationCard.test.ts +0 -27
  414. package/components/cards/ApplicationCard.vue +0 -145
  415. package/components/fleet/ForceDirectedTreeChart/chartIcons.js +0 -17
  416. package/config/product/legacy.js +0 -62
  417. package/config/secret.js +0 -14
  418. package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +0 -249
  419. package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
  420. package/pages/c/_cluster/legacy/project/_page.vue +0 -57
  421. package/pages/c/_cluster/legacy/project/index.vue +0 -32
  422. package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
  423. /package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +0 -0
  424. /package/{components/form/SSHKnownHosts → dialog}/__tests__/KnownHostsEditDialog.test.ts +0 -0
@@ -8,7 +8,7 @@ import { convert, simplify } from '@shell/utils/selector';
8
8
  import LabeledSelect from '@shell/components/form/LabeledSelect';
9
9
 
10
10
  export default {
11
- emits: ['update:value', 'remove'],
11
+ emits: ['update:value', 'add', 'remove'],
12
12
 
13
13
  components: { Select, LabeledSelect },
14
14
  props: {
@@ -54,6 +54,26 @@ export default {
54
54
  default: true
55
55
  },
56
56
 
57
+ labelKey: {
58
+ type: String,
59
+ default: '',
60
+ },
61
+
62
+ addLabel: {
63
+ type: String,
64
+ default: '',
65
+ },
66
+
67
+ addIcon: {
68
+ type: String,
69
+ default: '',
70
+ },
71
+
72
+ addClass: {
73
+ type: String,
74
+ default: '',
75
+ },
76
+
57
77
  // whether or not to show remove rule button right side of the rule
58
78
  showRemoveButton: {
59
79
  type: Boolean,
@@ -146,6 +166,10 @@ export default {
146
166
  return this.mode === 'view';
147
167
  },
148
168
 
169
+ _addLabel() {
170
+ return this.addLabel || this.t('workload.scheduling.affinity.matchExpressions.addRule');
171
+ },
172
+
149
173
  node() {
150
174
  return NODE;
151
175
  },
@@ -212,6 +236,12 @@ export default {
212
236
  }
213
237
 
214
238
  this.rules.push(newRule);
239
+
240
+ this.$nextTick(() => {
241
+ this.focus(this.rules.length - 1);
242
+
243
+ this.$emit('add');
244
+ });
215
245
  },
216
246
 
217
247
  update() {
@@ -245,6 +275,10 @@ export default {
245
275
  this.$emit('update:value', simplify(out));
246
276
  }
247
277
  });
278
+ },
279
+
280
+ focus(index = 0) {
281
+ this.$refs[`input-match-expression-key-${ index }`]?.[0]?.focus();
248
282
  }
249
283
  }
250
284
  };
@@ -274,7 +308,7 @@ export default {
274
308
  {{ t('workload.scheduling.affinity.matchExpressions.matchType') }}
275
309
  </label>
276
310
  <label>
277
- {{ t('workload.scheduling.affinity.matchExpressions.key') }}
311
+ {{ labelKey || t('workload.scheduling.affinity.matchExpressions.key') }}
278
312
  </label>
279
313
  <label>
280
314
  {{ t('workload.scheduling.affinity.matchExpressions.operator') }}
@@ -315,6 +349,7 @@ export default {
315
349
  </div>
316
350
  <input
317
351
  v-else-if="!hasKeySelectOptions"
352
+ :ref="`input-match-expression-key-${index}`"
318
353
  v-model="row.key"
319
354
  :mode="mode"
320
355
  :data-testid="`input-match-expression-key-control-${index}`"
@@ -322,6 +357,7 @@ export default {
322
357
  >
323
358
  <LabeledSelect
324
359
  v-else
360
+ :ref="`input-match-expression-key-${index}`"
325
361
  v-model:value="row.key"
326
362
  :mode="mode"
327
363
  :options="keysSelectOptions"
@@ -389,15 +425,20 @@ export default {
389
425
  </div>
390
426
  <div
391
427
  v-if="!isView && showAddButton"
392
- class="mt-20"
428
+ class="mmt-4"
393
429
  >
394
430
  <button
395
431
  type="button"
396
432
  class="btn role-tertiary add"
397
- :data-testid="`input-match-expression-add-rule`"
433
+ :class="[addClass]"
434
+ data-testid="input-match-expression-add-rule"
398
435
  @click="addRule"
399
436
  >
400
- <t k="workload.scheduling.affinity.matchExpressions.addRule" />
437
+ <i
438
+ v-if="addIcon"
439
+ class="mr-5 icon"
440
+ :class="[addIcon]"
441
+ /> {{ _addLabel }}
401
442
  </button>
402
443
  </div>
403
444
  </div>
@@ -319,7 +319,7 @@ export default {
319
319
  }
320
320
 
321
321
  if (props.descriptionKey) {
322
- description.value = get(v, props.descriptionKey);
322
+ description.value = get(v.value, props.descriptionKey);
323
323
  } else {
324
324
  description.value = metadata?.annotations?.[DESCRIPTION];
325
325
  }
@@ -103,6 +103,7 @@ export default {
103
103
  $store: this.$store,
104
104
  inScopeCount: this.allResourcesInScope,
105
105
  namespace: this.namespace,
106
+ transient: true,
106
107
  });
107
108
  }, 250, { leading: true }),
108
109
  }
@@ -68,6 +68,10 @@ export default {
68
68
  extensionParams: {
69
69
  type: Object,
70
70
  default: null
71
+ },
72
+ useHash: {
73
+ type: Boolean,
74
+ default: true
71
75
  }
72
76
  },
73
77
 
@@ -233,6 +237,7 @@ export default {
233
237
  v-bind="$attrs"
234
238
  :default-tab="defaultTab"
235
239
  :resource="value"
240
+ :use-hash="useHash"
236
241
  @changed="tabChange"
237
242
  >
238
243
  <slot />
@@ -173,11 +173,18 @@ export default {
173
173
  paginatePageOptions(opts) {
174
174
  const { opts: { filter } } = opts;
175
175
 
176
- const filters = !!filter ? [PaginationParamFilter.createSingleField({ field: 'metadata.name', value: filter })] : [];
176
+ const filters = !!filter ? [PaginationParamFilter.createSingleField({
177
+ field: 'metadata.name', value: filter, exact: false, equals: true
178
+ })] : [];
177
179
 
178
180
  filters.push(
179
181
  PaginationParamFilter.createSingleField({ field: 'metadata.namespace', value: this.namespace }),
180
- PaginationParamFilter.createSingleField({ field: 'metadata.fields.1', value: this.types.join(',') })
182
+ PaginationParamFilter.createMultipleFields(this.types.map((t) => ({
183
+ field: 'metadata.fields.1',
184
+ equals: true,
185
+ exact: true,
186
+ value: t
187
+ })))
181
188
  );
182
189
 
183
190
  return {
@@ -5,6 +5,9 @@ import VueSelectOverrides from '@shell/mixins/vue-select-overrides';
5
5
  import { generateRandomAlphaString } from '@shell/utils/string';
6
6
  import { LabeledTooltip } from '@components/LabeledTooltip';
7
7
  import { onClickOption, calculatePosition } from '@shell/utils/select';
8
+ import { _VIEW } from '@shell/config/query-params';
9
+ import { useClickOutside } from '@shell/composables/useClickOutside';
10
+ import { ref } from 'vue';
8
11
 
9
12
  export default {
10
13
  emits: ['update:value', 'createdListItem', 'on-open', 'on-close'],
@@ -81,7 +84,7 @@ export default {
81
84
  },
82
85
  closeOnSelect: {
83
86
  type: Boolean,
84
- default: true
87
+ default: true,
85
88
  },
86
89
 
87
90
  compact: {
@@ -93,11 +96,18 @@ export default {
93
96
  default: false
94
97
  }
95
98
  },
99
+ setup() {
100
+ const select = ref(null);
101
+ const isOpen = ref(false);
102
+
103
+ useClickOutside(select, () => {
104
+ isOpen.value = false;
105
+ });
106
+
107
+ return { isOpen, select };
108
+ },
96
109
  data() {
97
- return {
98
- isOpen: false,
99
- generatedUid: `s-uid-${ generateRandomAlphaString(12) }`
100
- };
110
+ return { generatedUid: `s-uid-${ generateRandomAlphaString(12) }` };
101
111
  },
102
112
  methods: {
103
113
  // resizeHandler = in mixin
@@ -124,16 +134,20 @@ export default {
124
134
  calculatePosition(dropdownList, component, width, this.placement);
125
135
  },
126
136
 
127
- focusSearch(ev) {
128
- const searchBox = document.querySelector('.vs__search');
129
-
130
- // added to mitigate https://github.com/rancher/dashboard/issues/14361
131
- if (!this.isSearchable || (searchBox && document.activeElement && !searchBox.contains(document.activeElement))) {
132
- ev.preventDefault();
137
+ // Ensure we only focus on open, otherwise we re-open on close
138
+ clickSelect(ev) {
139
+ if (this.mode === _VIEW || this.loading === true || this.disabled === true) {
140
+ return;
133
141
  }
134
142
 
135
- this.$refs['select-input'].open = true;
143
+ this.isOpen = !this.isOpen;
136
144
 
145
+ if (this.isOpen) {
146
+ this.focusSearch(ev);
147
+ }
148
+ },
149
+
150
+ focusSearch() {
137
151
  this.$nextTick(() => {
138
152
  const el = this.$refs['select-input']?.searchEl;
139
153
 
@@ -143,6 +157,10 @@ export default {
143
157
  });
144
158
  },
145
159
 
160
+ focusWrapper() {
161
+ this.$refs.select.focus();
162
+ },
163
+
146
164
  get,
147
165
 
148
166
  onClickOption(option, event) {
@@ -195,19 +213,36 @@ export default {
195
213
  },
196
214
 
197
215
  handleDropdownOpen(args) {
216
+ if (!this.isOpen) {
217
+ return false;
218
+ }
219
+
198
220
  // function that prevents the "opening dropdown on focus"
199
221
  // default behaviour of v-select
200
222
  return args.noDrop || args.disabled ? false : args.open;
201
223
  },
202
224
  onOpen() {
203
- this.isOpen = true;
225
+ this.focusSearch();
204
226
  this.$emit('on-open');
205
227
  this.resizeHandler();
206
228
  },
207
229
 
208
- onClose() {
230
+ closeOnSelecting() {
231
+ if (!this.closeOnSelect) {
232
+ return;
233
+ }
234
+
235
+ this.close();
236
+ },
237
+
238
+ close() {
209
239
  this.isOpen = false;
240
+ this.onClose();
241
+ },
242
+
243
+ onClose() {
210
244
  this.$emit('on-close');
245
+ this.focusWrapper();
211
246
  },
212
247
  },
213
248
  computed: {
@@ -272,11 +307,12 @@ export default {
272
307
  role="combobox"
273
308
  :aria-expanded="isOpen"
274
309
  :aria-label="$attrs['aria-label'] || undefined"
310
+ :aria-labelledby="$attrs['aria-labelledby'] || undefined"
275
311
  :aria-describedby="$attrs['aria-describedby'] || undefined"
276
- @click="focusSearch"
277
- @keydown.enter="focusSearch"
278
- @keydown.down.prevent="focusSearch"
279
- @keydown.space="focusSearch"
312
+ @click="clickSelect"
313
+ @keydown.self.enter="clickSelect"
314
+ @keydown.self.down.prevent="clickSelect"
315
+ @keydown.self.space.prevent="clickSelect"
280
316
  >
281
317
  <v-select
282
318
  ref="select-input"
@@ -291,7 +327,7 @@ export default {
291
327
  :get-option-label="(opt) => getOptionLabel(opt)"
292
328
  :label="optionLabel"
293
329
  :options="options"
294
- :close-on-select="closeOnSelect"
330
+ :close-on-select="false"
295
331
  :map-keydown="mappedKeys"
296
332
  :placeholder="placeholder"
297
333
  :reduce="(x) => reduce(x)"
@@ -309,6 +345,8 @@ export default {
309
345
  @open="onOpen"
310
346
  @close="onClose"
311
347
  @option:created="(e) => $emit('createdListItem', e)"
348
+ @option:selecting="closeOnSelecting"
349
+ @option:selected="closeOnSelect && close"
312
350
  @keydown.enter.stop
313
351
  >
314
352
  <template
@@ -75,8 +75,11 @@ export default {
75
75
  key: props.initialKey,
76
76
  none: NONE,
77
77
  SECRET,
78
+ /**
79
+ * Of type @ResourceLabeledSelectSettings
80
+ */
78
81
  allSecretsSettings: {
79
- mapResult: (secrets) => {
82
+ updateResources: (secrets) => {
80
83
  const allSecretsInNamespace = secrets.filter((secret) => this.types.includes(secret._type) && secret.namespace === this.namespace);
81
84
  const mappedSecrets = this.mapSecrets(allSecretsInNamespace.sort((a, b) => a.name.localeCompare(b.name)));
82
85
 
@@ -85,9 +88,12 @@ export default {
85
88
  return mappedSecrets;
86
89
  }
87
90
  },
91
+ /**
92
+ * Of type @ResourceLabeledSelectPaginateSettings
93
+ */
88
94
  paginateSecretsSetting: {
89
95
  requestSettings: this.paginatePageOptions,
90
- mapResult: (secrets) => {
96
+ updateResources: (secrets) => {
91
97
  const mappedSecrets = this.mapSecrets(secrets);
92
98
 
93
99
  this.secrets = secrets; // We need the key from the selected secret. When paginating we won't touch the store, so just pass back here
@@ -150,11 +156,18 @@ export default {
150
156
  paginatePageOptions(opts) {
151
157
  const { opts: { filter } } = opts;
152
158
 
153
- const filters = !!filter ? [PaginationParamFilter.createSingleField({ field: 'metadata.name', value: filter })] : [];
159
+ const filters = !!filter ? [PaginationParamFilter.createSingleField({
160
+ field: 'metadata.name', value: filter, exact: false, equals: true
161
+ })] : [];
154
162
 
155
163
  filters.push(
156
164
  PaginationParamFilter.createSingleField({ field: 'metadata.namespace', value: this.namespace }),
157
- PaginationParamFilter.createSingleField({ field: 'metadata.fields.1', value: this.types.join(',') })
165
+ PaginationParamFilter.createMultipleFields(this.types.map((t) => ({
166
+ field: 'metadata.fields.1',
167
+ equals: true,
168
+ exact: true,
169
+ value: t
170
+ })))
158
171
  );
159
172
 
160
173
  return {
@@ -30,7 +30,19 @@ export default {
30
30
  effectValues: {
31
31
  type: Object,
32
32
  default: () => DEFAULT_EFFECT_VALUES
33
- }
33
+ },
34
+ title: {
35
+ type: String,
36
+ default: ''
37
+ },
38
+ addIcon: {
39
+ type: String,
40
+ default: '',
41
+ },
42
+ addClass: {
43
+ type: String,
44
+ default: '',
45
+ },
34
46
  },
35
47
 
36
48
  data() {
@@ -38,6 +50,10 @@ export default {
38
50
  },
39
51
 
40
52
  computed: {
53
+ _title() {
54
+ return this.title || this.t('tableHeaders.taints');
55
+ },
56
+
41
57
  localValue: {
42
58
  get() {
43
59
  return this.value;
@@ -60,7 +76,7 @@ export default {
60
76
  <KeyValue
61
77
  :value="value"
62
78
  data-testid="taints-keyvalue"
63
- :title="t('tableHeaders.taints')"
79
+ :title="_title"
64
80
  :mode="mode"
65
81
  :as-map="false"
66
82
  :read-allowed="false"
@@ -70,6 +86,8 @@ export default {
70
86
  :extra-columns="['effect']"
71
87
  :preserve-keys="['effect']"
72
88
  :add-label="t('labels.addTaint')"
89
+ :add-icon="addIcon"
90
+ :add-class="addClass"
73
91
  :disabled="disabled"
74
92
  @update:value="(e) => $emit('update:value', e)"
75
93
  >
@@ -82,6 +100,7 @@ export default {
82
100
  v-model:value="row.effect"
83
101
  :data-testid="`taints-effect-row-${i}`"
84
102
  :options="effectOptions"
103
+ :mode="mode"
85
104
  :disabled="disabled"
86
105
  class="compact-select"
87
106
  @update:value="queueUpdate"
@@ -140,6 +140,13 @@ export default {
140
140
  type: Boolean,
141
141
  default: false,
142
142
  },
143
+ /**
144
+ * The sub-label for the Labeled Input.
145
+ */
146
+ subLabel: {
147
+ type: String,
148
+ default: null
149
+ }
143
150
  },
144
151
 
145
152
  data() {
@@ -247,6 +254,7 @@ export default {
247
254
  :placeholder="placeholder"
248
255
  :hide-arrows="hideArrows"
249
256
  :aria-describedby="displayUnit ? describedById : undefined"
257
+ :sub-label="subLabel"
250
258
  @update:value="update"
251
259
  @blur="update($event.target.value)"
252
260
  >
@@ -25,6 +25,20 @@ export default {
25
25
  return { valueFrom: {} };
26
26
  }
27
27
  },
28
+ options: {
29
+ type: Array,
30
+ default: () => {
31
+ return [
32
+ { value: 'simple', label: 'Key/Value Pair' },
33
+ { value: 'resourceFieldRef', label: 'Resource' },
34
+ { value: 'configMapKeyRef', label: 'ConfigMap Key' },
35
+ { value: 'secretKeyRef', label: 'Secret Key' },
36
+ { value: 'fieldRef', label: 'Pod Field' },
37
+ { value: 'secretRef', label: 'Secret' },
38
+ { value: 'configMapRef', label: 'ConfigMap' },
39
+ ];
40
+ },
41
+ },
28
42
  allConfigMaps: {
29
43
  type: Array,
30
44
  default: () => []
@@ -46,15 +60,6 @@ export default {
46
60
 
47
61
  data() {
48
62
  return {
49
- typeOpts: [
50
- { value: 'simple', label: 'Key/Value Pair' },
51
- { value: 'resourceFieldRef', label: 'Resource' },
52
- { value: 'configMapKeyRef', label: 'ConfigMap Key' },
53
- { value: 'secretKeyRef', label: 'Secret key' },
54
- { value: 'fieldRef', label: 'Pod Field' },
55
- { value: 'secretRef', label: 'Secret' },
56
- { value: 'configMapRef', label: 'ConfigMap' },
57
- ],
58
63
  secrets: this.allSecrets,
59
64
  resourceKeyOpts: ['limits.cpu', 'limits.ephemeral-storage', 'limits.memory', 'requests.cpu', 'requests.ephemeral-storage', 'requests.memory'],
60
65
  };
@@ -70,7 +75,7 @@ export default {
70
75
  } else if (props.value.value) {
71
76
  type.value = 'simple';
72
77
  } else if (props.value.valueFrom) {
73
- type.value = Object.keys((props.value.valueFrom))[0] || 'simple';
78
+ type.value = Object.keys((props.value.valueFrom))[0] || props.options[0].value || 'simple';
74
79
  }
75
80
 
76
81
  const refName = ref('');
@@ -84,13 +89,13 @@ export default {
84
89
  switch (type.value) {
85
90
  case 'resourceFieldRef':
86
91
  name.value = props.value.name;
87
- refName.value = props.value.valueFrom[type.value].containerName;
88
- key.value = props.value.valueFrom[type.value].resource || '';
92
+ refName.value = props.value.valueFrom?.[type.value]?.containerName;
93
+ key.value = props.value.valueFrom?.[type.value]?.resource || '';
89
94
  break;
90
95
  case 'configMapKeyRef':
91
96
  name.value = props.value.name;
92
- key.value = props.value.valueFrom[type.value].key || '';
93
- refName.value = props.value.valueFrom[type.value].name;
97
+ key.value = props.value.valueFrom?.[type.value]?.key || '';
98
+ refName.value = props.value.valueFrom?.[type.value]?.name;
94
99
  referenced.value = props.allConfigMaps.filter((resource) => {
95
100
  return resource.metadata.name === refName.value;
96
101
  })[0];
@@ -101,12 +106,12 @@ export default {
101
106
  case 'secretRef':
102
107
  case 'configMapRef':
103
108
  name.value = props.value.prefix;
104
- refName.value = props.value[type.value].name;
109
+ refName.value = props.value[type.value]?.name;
105
110
  break;
106
111
  case 'secretKeyRef':
107
112
  name.value = props.value.name;
108
- key.value = props.value.valueFrom[type.value].key || '';
109
- refName.value = props.value.valueFrom[type.value].name;
113
+ key.value = props.value.valueFrom?.[type.value]?.key || '';
114
+ refName.value = props.value.valueFrom?.[type.value]?.name;
110
115
  referenced.value = props.allSecrets.filter((resource) => {
111
116
  return resource.metadata.name === refName.value;
112
117
  })[0];
@@ -269,6 +274,10 @@ export default {
269
274
  extraColumn() {
270
275
  return ['resourceFieldRef', 'configMapKeyRef', 'secretKeyRef'].includes(this.type);
271
276
  },
277
+
278
+ hideVariableName() {
279
+ return this.options?.find((opt) => opt.value === this.type)?.hideVariableName || false;
280
+ }
272
281
  },
273
282
  };
274
283
  </script>
@@ -280,7 +289,7 @@ export default {
280
289
  v-model:value="type"
281
290
  :mode="mode"
282
291
  :multiple="false"
283
- :options="typeOpts"
292
+ :options="options"
284
293
  option-label="label"
285
294
  :searchable="false"
286
295
  :reduce="e=>e.value"
@@ -289,7 +298,10 @@ export default {
289
298
  />
290
299
  </div>
291
300
 
292
- <div class="name">
301
+ <div
302
+ v-if="!hideVariableName"
303
+ class="name"
304
+ >
293
305
  <LabeledInput
294
306
  v-model:value="name"
295
307
  :label="nameLabel"
@@ -168,9 +168,9 @@ describe('component: LabeledSelect', () => {
168
168
 
169
169
  await wrapper.trigger('click');
170
170
 
171
- const dropdownOpen = wrapper.find('.vs--open');
171
+ const dropdownOpen = wrapper.vm.isOpen;
172
172
 
173
- expect(dropdownOpen.exists()).toBe(isOpen);
173
+ expect(dropdownOpen).toBe(isOpen);
174
174
  });
175
175
  });
176
176
 
@@ -208,6 +208,7 @@ describe('component: LabeledSelect', () => {
208
208
  const wrapper = mount(ParentComponent);
209
209
 
210
210
  // https://test-utils.vuejs.org/guide/essentials/event-handling#Asserting-the-arguments-of-the-event
211
+ await wrapper.trigger('click');
211
212
  await wrapper.find('input').trigger('focus');
212
213
  await wrapper.find('.vs__dropdown-option').trigger('click');
213
214
 
@@ -267,7 +268,8 @@ describe('component: LabeledSelect', () => {
267
268
  value,
268
269
  label: 'some-label',
269
270
  options,
270
- searchable: true
271
+ searchable: true,
272
+ loading: false,
271
273
  }
272
274
  });
273
275
 
@@ -281,7 +283,9 @@ describe('component: LabeledSelect', () => {
281
283
  await input.trigger('keydown.enter');
282
284
 
283
285
  // mimic pressing space on search box inside v-select
284
- await input.trigger('keydown.space', mockEvent);
286
+ const search = input.find('input');
287
+
288
+ await search.trigger('keydown.space', mockEvent);
285
289
 
286
290
  // eslint-disable-next-line
287
291
  expect(spyFocus).toHaveBeenCalled();