dashboard-shell-shell 1.0.122 → 1.0.1000000081

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (372) hide show
  1. package/.DS_Store +0 -0
  2. package/assets/brand/harvester/favicon.png +0 -0
  3. package/assets/brand/suse/favicon.png +0 -0
  4. package/assets/icons/iconfont.css +19 -3
  5. package/assets/icons/iconfont.js +1 -1
  6. package/assets/icons/iconfont.json +28 -0
  7. package/assets/icons/iconfont.ttf +0 -0
  8. package/assets/icons/iconfont.woff +0 -0
  9. package/assets/icons/iconfont.woff2 +0 -0
  10. package/assets/images/pl/half-logo.svg +2 -23
  11. package/assets/styles/base/_functions.scss +0 -0
  12. package/assets/styles/base/_mixins.scss +0 -0
  13. package/assets/styles/base/_variables.scss +1 -1
  14. package/assets/styles/global/_labeled-input.scss +0 -1
  15. package/assets/styles/global/_layout.scss +1 -1
  16. package/assets/styles/global/_select.scss +4 -2
  17. package/assets/styles/global/_table.scss +5 -0
  18. package/assets/styles/vendor/vue-select.scss +2 -1
  19. package/assets/translations/en-us.yaml +1 -1
  20. package/assets/translations/zh-hans.yaml +25 -15
  21. package/chart/monitoring/index.vue +3 -1
  22. package/chart/monitoring/prometheus/index.vue +13 -10
  23. package/cloud-credential/aws.vue +2 -0
  24. package/components/ActionDropdown.vue +1 -1
  25. package/components/ActionDropdownShell.vue +71 -0
  26. package/components/ActionMenu.vue +2 -2
  27. package/components/ActionMenuShell.vue +3 -0
  28. package/components/AppModal.vue +84 -8
  29. package/components/AssignTo.vue +25 -11
  30. package/components/AsyncButton.vue +24 -7
  31. package/components/BannerGraphic.vue +1 -0
  32. package/components/ButtonDropdown.vue +26 -4
  33. package/components/ButtonGroup.vue +4 -0
  34. package/components/ButtonMultiAction.vue +1 -0
  35. package/components/CodeMirror.vue +19 -6
  36. package/components/CommunityLinks.vue +3 -3
  37. package/components/ConsumptionGauge.vue +24 -5
  38. package/components/CopyToClipboardText.vue +2 -1
  39. package/components/CruResource.vue +13 -7
  40. package/components/CruResourceFooter.vue +2 -2
  41. package/components/DashboardOptions.vue +29 -17
  42. package/components/DetailText.vue +5 -0
  43. package/components/DisableAuthProviderModal.vue +1 -0
  44. package/components/DotState.vue +84 -0
  45. package/components/ExplorerMembers.vue +1 -1
  46. package/components/ExplorerProjectsNamespaces.vue +89 -16
  47. package/components/FixedBanner.vue +19 -12
  48. package/components/GlobalRoleBindings.vue +5 -1
  49. package/components/GrafanaDashboard.vue +4 -4
  50. package/components/GrowlManager.vue +4 -1
  51. package/components/HardwareResourceGauge.vue +39 -3
  52. package/components/InfoBox.vue +3 -3
  53. package/components/InputOrDisplay.vue +28 -2
  54. package/components/LabelValue.vue +20 -1
  55. package/components/LandingPagePreference.vue +5 -3
  56. package/components/LocaleSelector.vue +39 -93
  57. package/components/ModalManager.vue +55 -0
  58. package/components/ModalWithCard.vue +13 -3
  59. package/components/MoveModal.vue +1 -0
  60. package/components/PodSecurityAdmission.vue +1 -1
  61. package/components/PromptChangePassword.vue +1 -1
  62. package/components/PromptModal.vue +16 -3
  63. package/components/PromptRemove.vue +29 -9
  64. package/components/PromptRestore.vue +1 -0
  65. package/components/ResourceCancelModal.vue +1 -0
  66. package/components/ResourceDetail/Masthead.vue +52 -17
  67. package/components/ResourceDetail/__tests__/Masthead.test.ts +5 -1
  68. package/components/ResourceDetail/index.vue +54 -16
  69. package/components/ResourceList/Masthead.vue +9 -4
  70. package/components/ResourceList/index.vue +4 -3
  71. package/components/ResourceTable.vue +1 -0
  72. package/components/SideNav.vue +20 -15
  73. package/components/SlideInPanelManager.vue +126 -0
  74. package/components/SortableTable/THead.vue +10 -4
  75. package/components/SortableTable/actions.js +1 -1
  76. package/components/SortableTable/index.vue +540 -553
  77. package/components/SortableTable/selection.js +2 -13
  78. package/components/StatusBadge.vue +77 -0
  79. package/components/Tabbed/Tab.vue +3 -3
  80. package/components/Tabbed/index.vue +47 -29
  81. package/components/Wizard.vue +2 -2
  82. package/components/YamlEditor.vue +1 -1
  83. package/components/__tests__/AsyncButton.test.ts +2 -2
  84. package/components/__tests__/FixedBanner.test.ts +3 -3
  85. package/components/__tests__/ModalManager.spec.ts +176 -0
  86. package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
  87. package/components/auth/Principal.vue +10 -3
  88. package/components/auth/RoleDetailEdit.vue +1 -1
  89. package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
  90. package/components/form/ArrayList.vue +123 -85
  91. package/components/form/ArrayListGrouped.vue +10 -2
  92. package/components/form/ArrayListSelect.vue +1 -1
  93. package/components/form/Command.vue +6 -15
  94. package/components/form/EnvVars.vue +16 -8
  95. package/components/form/Footer.vue +10 -7
  96. package/components/form/HealthCheck.vue +3 -3
  97. package/components/form/HookOption.vue +11 -16
  98. package/components/form/InputWithSelect.vue +6 -5
  99. package/components/form/KeyValue.vue +39 -10
  100. package/components/form/LabeledSelect.vue +73 -77
  101. package/components/form/Labels.vue +6 -3
  102. package/components/form/LifecycleHooks.vue +3 -3
  103. package/components/form/MatchExpressions.vue +42 -17
  104. package/components/form/NameNsDescription.vue +163 -116
  105. package/components/form/Networking.vue +20 -12
  106. package/components/form/NodeAffinity.vue +31 -23
  107. package/components/form/NodeScheduling.vue +13 -3
  108. package/components/form/Password.vue +11 -5
  109. package/components/form/PodAffinity.vue +47 -48
  110. package/components/form/Probe.vue +68 -66
  111. package/components/form/ResourceQuota/Namespace.vue +4 -4
  112. package/components/form/ResourceQuota/NamespaceRow.vue +5 -7
  113. package/components/form/ResourceQuota/Project.vue +9 -5
  114. package/components/form/ResourceQuota/ProjectRow.vue +4 -6
  115. package/components/form/ResourceSelector.vue +7 -9
  116. package/components/form/SSHKnownHosts/KnownHostsEditDialog.vue +6 -3
  117. package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +12 -1
  118. package/components/form/SSHKnownHosts/index.vue +16 -2
  119. package/components/form/Security.vue +54 -56
  120. package/components/form/Select.vue +44 -7
  121. package/components/form/ShellInput.vue +5 -1
  122. package/components/form/SimpleSecretSelector.vue +29 -9
  123. package/components/form/Tolerations.vue +5 -1
  124. package/components/form/UnitInput.vue +10 -5
  125. package/components/form/ValueFromResource.vue +134 -121
  126. package/components/form/WorkloadPorts.vue +18 -18
  127. package/components/form/__tests__/ArrayList.test.ts +5 -2
  128. package/components/form/__tests__/MatchExpressions.test.ts +12 -12
  129. package/components/form/__tests__/NameNsDescription.test.ts +115 -14
  130. package/components/form/__tests__/Probe.test.ts +12 -8
  131. package/components/form/__tests__/SSHKnownHosts.test.ts +11 -0
  132. package/components/form/__tests__/Select.test.ts +37 -0
  133. package/components/form/__tests__/UnitInput.test.ts +4 -5
  134. package/components/formatter/BadgeStateFormatter.vue +8 -5
  135. package/components/formatter/InternalExternalIP.vue +2 -0
  136. package/components/formatter/LiveDate.vue +3 -3
  137. package/components/formatter/SecretData.vue +20 -7
  138. package/components/nav/Favorite.vue +5 -1
  139. package/components/nav/Group.vue +18 -4
  140. package/components/nav/Header.vue +39 -13
  141. package/components/nav/Jump.vue +7 -0
  142. package/components/nav/NamespaceFilter.vue +21 -11
  143. package/components/nav/Pinned.vue +1 -1
  144. package/components/nav/TopLevelMenu.vue +5 -17
  145. package/components/nav/Type.vue +30 -33
  146. package/components/nav/__tests__/TopLevelMenu.test.ts +0 -40
  147. package/components/rancherResourceDetail/Masthead.vue +769 -0
  148. package/components/rancherResourceDetail/__tests__/Masthead.test.ts +65 -0
  149. package/components/rancherResourceDetail/index.vue +591 -0
  150. package/components/rancherResourceList/Masthead-btn.vue +225 -0
  151. package/components/rancherResourceList/Masthead.vue +375 -0
  152. package/components/rancherResourceList/ResourceLoadingIndicator.vue +140 -0
  153. package/components/rancherResourceList/index.vue +307 -0
  154. package/components/rancherResourceList/resource-list.config.js +7 -0
  155. package/components/rancherResourceTable.vue +783 -0
  156. package/components/rancherSortableTable/THead.vue +561 -0
  157. package/components/rancherSortableTable/actions.js +153 -0
  158. package/components/rancherSortableTable/advanced-filtering.js +272 -0
  159. package/components/rancherSortableTable/debug.js +117 -0
  160. package/components/rancherSortableTable/filtering.js +290 -0
  161. package/components/rancherSortableTable/grouping.js +48 -0
  162. package/components/rancherSortableTable/index.vue +2712 -0
  163. package/components/rancherSortableTable/paging.js +155 -0
  164. package/components/rancherSortableTable/selection.js +629 -0
  165. package/components/rancherSortableTable/sortable-config.ts +4 -0
  166. package/components/rancherSortableTable/sorting.js +129 -0
  167. package/components/templates/blank.vue +4 -1
  168. package/components/templates/default.vue +8 -0
  169. package/components/templates/home.vue +10 -1
  170. package/components/templates/plain.vue +10 -1
  171. package/composables/focusTrap.ts +11 -3
  172. package/composables/useRuntimeFlag.ts +29 -0
  173. package/config/private-label.js +15 -10
  174. package/config/router/routes.js +21 -13
  175. package/config/store.js +4 -0
  176. package/config/table-headers.js +3 -2
  177. package/config/uiplugins.js +5 -1
  178. package/core/plugin-routes.ts +5 -115
  179. package/core/plugins.js +1 -1
  180. package/core/types.ts +23 -2
  181. package/detail/__tests__/autoscaling.horizontalpodautoscaler.test.ts +84 -23
  182. package/detail/autoscaling.horizontalpodautoscaler/index.vue +13 -3
  183. package/detail/provisioning.cattle.io.cluster.vue +72 -6
  184. package/dialog/AddCustomBadgeDialog.vue +1 -0
  185. package/dialog/DeactivateDriverDialog.vue +5 -4
  186. package/dialog/ForceMachineRemoveDialog.vue +6 -3
  187. package/dialog/GitRepoForceUpdateDialog.vue +1 -1
  188. package/dialog/ScalePoolDownDialog.vue +2 -2
  189. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +16 -3
  190. package/edit/auth/__tests__/oidc.test.ts +162 -88
  191. package/edit/auth/azuread.vue +2 -1
  192. package/edit/auth/github.vue +1 -1
  193. package/edit/auth/googleoauth.vue +5 -1
  194. package/edit/auth/ldap/__tests__/config.test.ts +0 -14
  195. package/edit/auth/ldap/config.vue +0 -24
  196. package/edit/auth/ldap/index.vue +1 -1
  197. package/edit/auth/oidc.vue +39 -6
  198. package/edit/auth/saml.vue +1 -1
  199. package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +5 -2
  200. package/edit/cloudcredential.vue +24 -9
  201. package/edit/fleet.cattle.io.clustergroup.vue +5 -3
  202. package/edit/fleet.cattle.io.gitrepo.vue +2 -0
  203. package/edit/logging-flow/Match.vue +1 -1
  204. package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +40 -9
  205. package/edit/management.cattle.io.user.vue +28 -3
  206. package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +19 -19
  207. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +31 -31
  208. package/edit/monitoring.coreos.com.alertmanagerconfig/routeConfig.vue +36 -12
  209. package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +6 -6
  210. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +10 -10
  211. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +4 -4
  212. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +4 -4
  213. package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +1 -1
  214. package/edit/monitoring.coreos.com.receiver/auth.vue +29 -29
  215. package/edit/monitoring.coreos.com.receiver/types/email.vue +6 -6
  216. package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +10 -10
  217. package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +5 -5
  218. package/edit/monitoring.coreos.com.receiver/types/slack.vue +4 -4
  219. package/edit/namespace.vue +1 -2
  220. package/edit/networking.k8s.io.ingress/IngressClass.vue +7 -3
  221. package/edit/networking.k8s.io.ingress/RulePath.vue +1 -1
  222. package/edit/networking.k8s.io.ingress/__tests__/IngressClass.test.ts +58 -0
  223. package/edit/persistentvolume/__tests__/persistentvolume.test.ts +14 -2
  224. package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +4 -1
  225. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +26 -9
  226. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +8 -10
  227. package/edit/provisioning.cattle.io.cluster/rke2.vue +31 -40
  228. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +5 -2
  229. package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +6 -1
  230. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +33 -2
  231. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +3 -3
  232. package/edit/service.vue +0 -3
  233. package/edit/token.vue +32 -11
  234. package/edit/workload/Job.vue +6 -6
  235. package/edit/workload/__tests__/Job.test.ts +0 -1
  236. package/edit/workload/index.vue +1 -0
  237. package/edit/workload/mixins/workload.js +3 -3
  238. package/initialize/install-plugins.js +2 -1
  239. package/list/harvesterhci.io.management.cluster.vue +4 -1
  240. package/list/management.cattle.io.feature.vue +1 -0
  241. package/list/namespace.vue +3 -1
  242. package/list/provisioning.cattle.io.cluster.vue +20 -12
  243. package/list/workload.vue +7 -6
  244. package/machine-config/__tests__/vmwarevsphere.test.ts +48 -3
  245. package/machine-config/azure.vue +16 -4
  246. package/machine-config/vmwarevsphere.vue +16 -0
  247. package/mixins/resource-fetch.js +2 -1
  248. package/models/__tests__/logging.banzaicloud.io.flow.test.ts +88 -0
  249. package/models/__tests__/namespace.test.ts +25 -1
  250. package/models/cloudcredential.js +5 -0
  251. package/models/kontainerdriver.js +6 -3
  252. package/models/logging.banzaicloud.io.flow.js +2 -1
  253. package/models/management.cattle.io.node.js +3 -3
  254. package/models/management.cattle.io.setting.js +2 -1
  255. package/models/namespace.js +4 -5
  256. package/models/nodedriver.js +6 -3
  257. package/models/storage.k8s.io.storageclass.js +2 -2
  258. package/models/workload.js +4 -1
  259. package/package.json +1 -1
  260. package/pages/about.vue +16 -8
  261. package/pages/account/index.vue +80 -24
  262. package/pages/account/pri.vue +229 -0
  263. package/pages/auth/login.vue +195 -44
  264. package/pages/auth/logout.vue +4 -1
  265. package/pages/auth/setup.vue +144 -19
  266. package/pages/auth/verify.vue +13 -8
  267. package/pages/auth copy/login.vue +595 -0
  268. package/pages/auth copy/logout.vue +47 -0
  269. package/pages/auth copy/setup.vue +523 -0
  270. package/pages/auth copy/verify.vue +203 -0
  271. package/pages/c/_cluster/_product/namespaces.vue +5 -5
  272. package/pages/c/_cluster/apps/charts/chart.vue +1 -1
  273. package/pages/c/_cluster/apps/charts/install.vue +26 -26
  274. package/pages/c/_cluster/auth/config/index.vue +10 -12
  275. package/pages/c/_cluster/explorer/EventsTable.vue +38 -33
  276. package/pages/c/_cluster/explorer/index.vue +17 -15
  277. package/pages/c/_cluster/istio/index.vue +2 -2
  278. package/pages/c/_cluster/longhorn/index.vue +1 -1
  279. package/pages/c/_cluster/monitoring/index.vue +1 -1
  280. package/pages/c/_cluster/monitoring/monitor/_namespace/_id.vue +4 -2
  281. package/pages/c/_cluster/monitoring/monitor/create.vue +4 -2
  282. package/pages/c/_cluster/monitoring/monitor/index.vue +2 -2
  283. package/pages/c/_cluster/monitoring/route-receiver/_id.vue +4 -2
  284. package/pages/c/_cluster/monitoring/route-receiver/create.vue +5 -2
  285. package/pages/c/_cluster/neuvector/index.vue +1 -1
  286. package/pages/c/_cluster/settings/brand.vue +3 -3
  287. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +8 -10
  288. package/pages/diagnostic.vue +59 -11
  289. package/pages/fail-whale.vue +14 -8
  290. package/pages/home.vue +24 -18
  291. package/pages/prefs.vue +9 -7
  292. package/pages/support/index.vue +4 -1
  293. package/pkg/tsconfig.json +9 -9
  294. package/pkg/vue.config.js +1 -1
  295. package/plugins/dashboard-store/normalize.js +3 -1
  296. package/plugins/dashboard-store/resource-class.js +31 -29
  297. package/plugins/internal-api/index.ts +37 -0
  298. package/plugins/internal-api/shared/base-api.ts +13 -0
  299. package/plugins/internal-api/shell/shell.api.ts +108 -0
  300. package/promptRemove/management.cattle.io.fleetworkspace.vue +1 -1
  301. package/promptRemove/management.cattle.io.globalrole.vue +1 -1
  302. package/promptRemove/management.cattle.io.project.vue +2 -2
  303. package/promptRemove/management.cattle.io.roletemplate.vue +1 -1
  304. package/promptRemove/pod.vue +1 -1
  305. package/public/index.html +2 -1
  306. package/rancher-components/BadgeState/BadgeState.vue +5 -1
  307. package/rancher-components/Banner/Banner.vue +8 -2
  308. package/rancher-components/Card/Card.vue +3 -6
  309. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -0
  310. package/rancher-components/Form/LabeledInput/LabeledInput.vue +5 -2
  311. package/rancher-components/Form/Radio/RadioButton.vue +3 -3
  312. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +1 -5
  313. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  314. package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -2
  315. package/rancher-components/RcDropdown/RcDropdownMenu.vue +7 -3
  316. package/rancher-components/RcDropdown/types.ts +1 -0
  317. package/scripts/clean +0 -0
  318. package/scripts/extension/bundle +20 -0
  319. package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +2 -2
  320. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -1
  321. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
  322. package/scripts/extension/helm/scripts/package +0 -0
  323. package/scripts/extension/helm/scripts/patch +0 -0
  324. package/scripts/extension/helm/scripts/version +0 -0
  325. package/scripts/extension/helmpatch +44 -31
  326. package/scripts/extension/parse-tag-name +0 -0
  327. package/scripts/extension/publish +12 -12
  328. package/scripts/publish-shell.sh +18 -23
  329. package/scripts/serve-pkgs +0 -0
  330. package/scripts/sync-shell-deps +0 -0
  331. package/scripts/test-plugins-build.sh +4 -6
  332. package/scripts/typegen.sh +28 -46
  333. package/server/har-file.js +25 -3
  334. package/static/favicon.ico +0 -0
  335. package/static/favicon.png +0 -0
  336. package/static/loading-indicator.html +2 -2
  337. package/store/aws.js +9 -2
  338. package/store/features.js +2 -1
  339. package/store/i18n.js +3 -3
  340. package/store/modal.ts +71 -0
  341. package/store/slideInPanel.ts +47 -0
  342. package/store/type-map.js +2 -1
  343. package/types/cloud-shell/index.d.ts +11014 -0
  344. package/types/global-vue.d.ts +5 -0
  345. package/types/internal-api/shell/growl.d.ts +25 -0
  346. package/types/internal-api/shell/modal.d.ts +77 -0
  347. package/types/internal-api/shell/slideIn.d.ts +15 -0
  348. package/types/shell/index.d.ts +118 -128
  349. package/types/vue-shim.d.ts +4 -1
  350. package/utils/__tests__/object.test.ts +38 -4
  351. package/utils/__tests__/string.test.ts +2 -2
  352. package/utils/auth.js +1 -0
  353. package/utils/banners.js +0 -45
  354. package/utils/cluster.js +35 -0
  355. package/utils/color.js +9 -8
  356. package/utils/error.js +61 -3
  357. package/utils/errorTranslate.json +450 -30
  358. package/utils/object.js +46 -6
  359. package/utils/router.js +22 -1
  360. package/utils/select.js +26 -3
  361. package/utils/string.js +9 -8
  362. package/utils/title.ts +1 -1
  363. package/utils/validators/machine-pool.ts +20 -0
  364. package/vue.config.js +7 -2
  365. package/components/formatter/ExtensionCache.vue +0 -74
  366. package/components/formatter/Port.vue +0 -24
  367. package/components/formatter/SecretType.vue +0 -41
  368. package/types/resources/fleet.d.ts +0 -57
  369. package/types/resources/pod-security-admission.ts +0 -36
  370. package/types/resources/settings.d.ts +0 -93
  371. package/types/resources/userPreferences.d.ts +0 -13
  372. package/types/vue-shim.d +0 -20
@@ -1,5 +1,7 @@
1
1
  <script>
2
- import { mapGetters, mapActions } from 'vuex';
2
+ import { computed, ref, toRef, watch } from 'vue';
3
+ import { mapActions, useStore } from 'vuex';
4
+
3
5
  import { get, set } from '@shell/utils/object';
4
6
  import { sortBy } from '@shell/utils/sort';
5
7
  import { NAMESPACE } from '@shell/config/types';
@@ -8,6 +10,7 @@ import { _VIEW, _EDIT, _CREATE } from '@shell/config/query-params';
8
10
  import { LabeledInput } from '@components/Form/LabeledInput';
9
11
  import LabeledSelect from '@shell/components/form/LabeledSelect';
10
12
  import { normalizeName } from '@shell/utils/kube';
13
+ import { useI18n } from '@shell/composables/useI18n';
11
14
 
12
15
  export default {
13
16
  name: 'NameNsDescription',
@@ -149,6 +152,10 @@ export default {
149
152
  type: Boolean,
150
153
  default: true,
151
154
  },
155
+ isDialog: {
156
+ type: Boolean,
157
+ default: false
158
+ },
152
159
  rules: {
153
160
  default: () => ({
154
161
  namespace: [],
@@ -169,81 +176,74 @@ export default {
169
176
  },
170
177
 
171
178
  data() {
172
- const v = this.value;
173
- const metadata = v.metadata;
174
- let namespace, name, description;
179
+ return { createNamespace: false };
180
+ },
175
181
 
176
- if (this.nameKey) {
177
- name = get(v, this.nameKey);
178
- } else {
179
- name = metadata?.name;
180
- }
182
+ setup(props, { emit }) {
183
+ const v = toRef(props.value);
184
+ const metadata = v.value.metadata;
185
+ const namespace = ref(null);
186
+ const name = ref(null);
187
+ const description = ref(null);
181
188
 
182
- if (this.namespaced) {
183
- if (this.forceNamespace) {
184
- namespace = this.forceNamespace;
185
- this.updateNamespace(namespace);
186
- } else if (this.namespaceKey) {
187
- namespace = get(v, this.namespaceKey);
188
- } else {
189
- namespace = metadata?.namespace;
189
+ watch(name, (val) => {
190
+ if (props.normalizeName) {
191
+ val = normalizeName(val);
190
192
  }
191
193
 
192
- if (!namespace && !this.noDefaultNamespace) {
193
- namespace = this.$store.getters['defaultNamespace'];
194
- if (metadata) {
195
- metadata.namespace = namespace;
196
- }
194
+ if (props.nameKey) {
195
+ set(props.value, props.nameKey, val);
196
+ } else {
197
+ props.value.metadata['name'] = val;
197
198
  }
198
- }
199
+ emit('update:value', props.value);
200
+ });
199
201
 
200
- if (this.descriptionKey) {
201
- description = get(v, this.descriptionKey);
202
+ if (props.nameKey) {
203
+ name.value = get(v.value, props.nameKey);
202
204
  } else {
203
- description = metadata?.annotations?.[DESCRIPTION];
205
+ name.value = metadata?.name || '';
204
206
  }
205
207
 
206
- const inStore = this.$store.getters['currentStore']();
207
- const nsSchema = this.$store.getters[`${ inStore }/schemaFor`](NAMESPACE);
208
+ const isCreate = computed(() => {
209
+ return props.mode === _CREATE;
210
+ });
208
211
 
209
- return {
210
- namespace,
211
- name,
212
- description,
213
- createNamespace: false,
214
- nsSchema
215
- };
216
- },
212
+ const store = useStore();
213
+ const { t } = useI18n(store);
214
+ const allowedNamespaces = computed(() => store.getters.allowedNamespaces());
215
+ const storeNamespaces = computed(() => store.getters.namespaces());
216
+ const currentCluster = computed(() => store.getters.currentCluster);
217
217
 
218
- computed: {
219
- ...mapGetters(['currentProduct', 'currentCluster', 'namespaces', 'allowedNamespaces']),
220
- ...mapActions('cru-resource', ['setCreateNamespace']),
221
- namespaceReallyDisabled() {
222
- return (
223
- !!this.forceNamespace || this.namespaceDisabled || this.mode === _EDIT
224
- ); // namespace is never editable
225
- },
218
+ const inStore = computed(() => {
219
+ return store.getters['currentStore']();
220
+ });
226
221
 
227
- nameReallyDisabled() {
228
- return this.nameDisabled || (this.mode === _EDIT && !this.nameEditable);
229
- },
222
+ const nsSchema = computed(() => {
223
+ return store.getters[`${ inStore.value }/schemaFor`](NAMESPACE);
224
+ });
225
+
226
+ const canCreateNamespace = computed(() => {
227
+ // Check if user can push to namespaces... and as the ns is outside of a project restrict to admins and cluster owners
228
+ return (nsSchema.value?.collectionMethods || []).includes('POST') && currentCluster.value?.canUpdate;
229
+ });
230
230
 
231
231
  /**
232
232
  * Map namespaces from the store to options, adding divider and create button
233
233
  */
234
- options() {
234
+ const options = computed(() => {
235
235
  let namespaces;
236
236
 
237
- if (this.namespacesOverride) {
237
+ if (props.namespacesOverride) {
238
238
  // Use the resources provided
239
- namespaces = this.namespacesOverride;
239
+ namespaces = props.namespacesOverride;
240
240
  } else {
241
- if (this.namespaceOptions) {
241
+ if (props.namespaceOptions) {
242
242
  // Use the namespaces provided
243
- namespaces = (this.namespaceOptions.map((ns) => ns.name) || []).sort();
243
+ namespaces = (props.namespaceOptions.map((ns) => ns.name) || []).sort();
244
244
  } else {
245
245
  // Determine the namespaces
246
- const namespaceObjs = this.isCreate ? this.allowedNamespaces() : this.namespaces();
246
+ const namespaceObjs = isCreate.value ? allowedNamespaces.value : storeNamespaces.value;
247
247
 
248
248
  namespaces = Object.keys(namespaceObjs);
249
249
  }
@@ -251,22 +251,22 @@ export default {
251
251
 
252
252
  const options = namespaces
253
253
  .map((namespace) => ({ nameDisplay: namespace, id: namespace }))
254
- .map(this.namespaceMapper || ((obj) => ({
255
- label: obj.nameDisplay,
254
+ .map(props.namespaceMapper || ((obj) => ({
255
+ label: obj.nameDisplay.replace('harvester', 'cloud'),
256
256
  value: obj.id,
257
257
  })));
258
258
 
259
259
  const sortedByLabel = sortBy(options, 'label');
260
260
 
261
- if (this.forceNamespace) {
261
+ if (props.forceNamespace) {
262
262
  sortedByLabel.unshift({
263
- label: this.forceNamespace,
264
- value: this.forceNamespace,
263
+ label: props.forceNamespace,
264
+ value: props.forceNamespace,
265
265
  });
266
266
  }
267
267
 
268
268
  const createButton = {
269
- label: this.t('namespace.createNamespace'),
269
+ label: t('namespace.createNamespace'),
270
270
  value: '',
271
271
  kind: 'highlighted'
272
272
  };
@@ -276,20 +276,78 @@ export default {
276
276
  kind: 'divider'
277
277
  };
278
278
 
279
- const createOverhead = this.canCreateNamespace || this.createNamespaceOverride ? [createButton, divider] : [];
279
+ // const createOverhead = canCreateNamespace.value || props.createNamespaceOverride ? [createButton, divider] : [];
280
280
 
281
281
  return [
282
- ...createOverhead,
282
+ // ...createOverhead,
283
283
  ...sortedByLabel
284
284
  ];
285
+ });
286
+
287
+ const updateNamespace = (val) => {
288
+ if (props.forceNamespace) {
289
+ val = props.forceNamespace;
290
+ }
291
+
292
+ if (props.namespaced) {
293
+ emit('isNamespaceNew', !val || (options.value && !options.value.find((n) => n.value === val)));
294
+ }
295
+
296
+ if (props.namespaceKey) {
297
+ set(props.value, props.namespaceKey, val);
298
+ } else {
299
+ props.value.metadata.namespace = val;
300
+ }
301
+ };
302
+
303
+ if (props.namespaced) {
304
+ if (props.forceNamespace) {
305
+ namespace.value = toRef(props.forceNamespace);
306
+ updateNamespace(namespace);
307
+ } else if (props.namespaceKey) {
308
+ namespace.value = get(v, props.namespaceKey);
309
+ } else {
310
+ namespace.value = metadata?.namespace;
311
+ }
312
+
313
+ if (!namespace.value && !props.noDefaultNamespace) {
314
+ namespace.value = store.getters['defaultNamespace'];
315
+ if (metadata) {
316
+ metadata.namespace = namespace;
317
+ }
318
+ }
319
+ }
320
+
321
+ if (props.descriptionKey) {
322
+ description.value = get(v, props.descriptionKey);
323
+ } else {
324
+ description.value = metadata?.annotations?.[DESCRIPTION];
325
+ }
326
+
327
+ return {
328
+ namespace,
329
+ name,
330
+ description,
331
+ isCreate,
332
+ options,
333
+ updateNamespace,
334
+ };
335
+ },
336
+
337
+ computed: {
338
+ ...mapActions('cru-resource', ['setCreateNamespace']),
339
+ namespaceReallyDisabled() {
340
+ return (
341
+ !!this.forceNamespace || this.namespaceDisabled || this.mode === _EDIT
342
+ ); // namespace is never editable
285
343
  },
286
344
 
287
- isView() {
288
- return this.mode === _VIEW;
345
+ nameReallyDisabled() {
346
+ return this.nameDisabled || (this.mode === _EDIT && !this.nameEditable);
289
347
  },
290
348
 
291
- isCreate() {
292
- return this.mode === _CREATE;
349
+ isView() {
350
+ return this.mode === _VIEW;
293
351
  },
294
352
 
295
353
  showCustomize() {
@@ -298,37 +356,20 @@ export default {
298
356
 
299
357
  colSpan() {
300
358
  if (!this.horizontal) {
301
- return `span-8`;
359
+ return `span-6`;
302
360
  }
303
361
  // Name and namespace take up two columns.
304
- let cols = (this.nameNsHidden ? 0 : 2) + (this.descriptionHidden ? 0 : 1) + this.extraColumns.length;
362
+ // let cols = (this.nameNsHidden ? 0 : 2) + (this.descriptionHidden ? 0 : 1) + this.extraColumns.length;
363
+ let cols = 2;
305
364
 
306
365
  cols = Math.max(2, cols); // If there's only one column, make it render half-width as if there were two
307
366
  const span = 12 / cols; // If there's 5, 7, or more columns this will break; don't do that.
308
367
 
309
368
  return `span-${ span }`;
310
369
  },
311
-
312
- canCreateNamespace() {
313
- // Check if user can push to namespaces... and as the ns is outside of a project restrict to admins and cluster owners
314
- return (this.nsSchema?.collectionMethods || []).includes('POST') && this.currentCluster?.canUpdate;
315
- }
316
370
  },
317
371
 
318
372
  watch: {
319
- name(val) {
320
- if (this.normalizeName) {
321
- val = normalizeName(val);
322
- }
323
-
324
- if (this.nameKey) {
325
- set(this.value, this.nameKey, val);
326
- } else {
327
- this.value.metadata['name'] = val;
328
- }
329
- this.$emit('update:value', this.value);
330
- },
331
-
332
373
  namespace(val) {
333
374
  this.updateNamespace(val);
334
375
  this.$emit('update:value', this.value);
@@ -346,29 +387,13 @@ export default {
346
387
 
347
388
  mounted() {
348
389
  this.$nextTick(() => {
349
- if (this.$refs.name) {
350
- this.$refs.name.focus();
390
+ if (this.$refs.nameInput) {
391
+ this.$refs.nameInput.focus();
351
392
  }
352
393
  });
353
394
  },
354
395
 
355
396
  methods: {
356
- updateNamespace(val) {
357
- if (this.forceNamespace) {
358
- val = this.forceNamespace;
359
- }
360
-
361
- if (this.namespaced) {
362
- this.$emit('isNamespaceNew', !val || (this.options && !this.options.find((n) => n.value === val)));
363
- }
364
-
365
- if (this.namespaceKey) {
366
- set(this.value, this.namespaceKey, val);
367
- } else {
368
- this.value.metadata.namespace = val;
369
- }
370
- },
371
-
372
397
  changeNameAndNamespace(e) {
373
398
  this.name = (e.text || '').toLowerCase();
374
399
  this.namespace = e.selected;
@@ -389,7 +414,7 @@ export default {
389
414
  true,
390
415
  );
391
416
  this.$emit('isNamespaceNew', true);
392
- this.$nextTick(() => this.$refs.namespace.focus());
417
+ this.$nextTick(() => this.$refs.namespaceInput.focus());
393
418
  } else {
394
419
  this.createNamespace = false;
395
420
  this.$store.dispatch(
@@ -404,14 +429,15 @@ export default {
404
429
  </script>
405
430
 
406
431
  <template>
407
- <div class="row mb-20">
432
+ <div class="row">
408
433
  <div
409
434
  v-if="namespaced && !nameNsHidden && createNamespace"
410
435
  :data-testid="componentTestid + '-namespace-create'"
411
- class="col span-3"
436
+ class="col span-6"
437
+ :class=" isDialog? 'namespace-item-row mb-20': 'col span-6'"
412
438
  >
413
439
  <LabeledInput
414
- ref="namespace"
440
+ ref="namespaceInput"
415
441
  v-model:value="namespace"
416
442
  :label="t('namespace.label')"
417
443
  :placeholder="t('namespace.createNamespace')"
@@ -434,7 +460,7 @@ export default {
434
460
  <div
435
461
  v-if="namespaced && !nameNsHidden && !createNamespace"
436
462
  :data-testid="componentTestid + '-namespace'"
437
- class="col span-3"
463
+ :class=" isDialog? 'namespace-item-row mb-20': 'col span-6'"
438
464
  >
439
465
  <LabeledSelect
440
466
  v-show="!createNamespace"
@@ -456,12 +482,13 @@ export default {
456
482
  <div
457
483
  v-if="!nameNsHidden"
458
484
  :data-testid="componentTestid + '-name'"
459
- class="col span-3"
485
+ :class=" isDialog? 'namespace-item-row mb-20': 'col span-6'"
460
486
  >
461
487
  <LabeledInput
462
- ref="name"
488
+ ref="nameInput"
463
489
  key="name"
464
490
  v-model:value="name"
491
+ data-testid="NameNsDescriptionNameInput"
465
492
  :label="t(nameLabel)"
466
493
  :placeholder="t(namePlaceholder)"
467
494
  :disabled="nameReallyDisabled"
@@ -473,11 +500,22 @@ export default {
473
500
  </div>
474
501
 
475
502
  <slot name="customize" />
476
- <!-- // TODO: here goes the custom component -->
477
- <div
503
+ <!-- <div
478
504
  v-show="!descriptionHidden"
479
505
  :data-testid="componentTestid + '-description'"
480
506
  :class="['col', extraColumns.length > 0 ? 'span-3' : 'span-6']"
507
+ > -->
508
+ <div
509
+ v-for="(slot, i) in extraColumns"
510
+ :key="i"
511
+ :class="{ col: true, [colSpan]: true }"
512
+ >
513
+ <slot :name="slot" />
514
+ </div>
515
+ <div
516
+ v-show="!descriptionHidden"
517
+ :data-testid="componentTestid + '-description'"
518
+ :class=" isDialog? 'namespace-item-row mb-20': 'col span-6'"
481
519
  >
482
520
  <LabeledInput
483
521
  key="description"
@@ -492,11 +530,10 @@ export default {
492
530
  </div>
493
531
 
494
532
  <div
495
- v-for="(slot, i) in extraColumns"
496
- :key="i"
497
- :class="{ col: true, [colSpan]: true }"
533
+ v-if="$slots.bottom"
534
+ style="width: 100%;"
498
535
  >
499
- <slot :name="slot" />
536
+ <slot name="bottom" />
500
537
  </div>
501
538
  <div
502
539
  v-if="showSpacer"
@@ -551,4 +588,14 @@ button {
551
588
  }
552
589
 
553
590
  }
591
+ .namespace-item-row{
592
+ width: 100%;
593
+ margin-bottom: 4px;
594
+ position:relative;
595
+ display: flex;
596
+ }
597
+ .namespace-item-row ::v-deep textarea{
598
+ width: 400px;
599
+ }
600
+
554
601
  </style>
@@ -29,6 +29,20 @@ export default {
29
29
 
30
30
  data() {
31
31
  const t = this.$store.getters['i18n/t'];
32
+
33
+ return {
34
+ dnsPolicy: this.value.dnsPolicy || 'ClusterFirst',
35
+ networkMode: this.value.hostNetwork ? { label: t('workload.networking.networkMode.options.hostNetwork'), value: true } : { label: t('workload.networking.networkMode.options.normal'), value: false },
36
+ hostAliases: [],
37
+ nameservers: null,
38
+ searches: null,
39
+ hostname: null,
40
+ subdomain: null,
41
+ options: null,
42
+ };
43
+ },
44
+
45
+ created() {
32
46
  const hostAliases = (this.value.hostAliases || []).map((entry) => {
33
47
  return {
34
48
  ip: entry.ip,
@@ -38,18 +52,12 @@ export default {
38
52
  const { dnsConfig = {}, hostname, subdomain } = this.value;
39
53
  const { nameservers, searches, options } = dnsConfig;
40
54
 
41
- const out = {
42
- dnsPolicy: this.value.dnsPolicy || 'ClusterFirst',
43
- networkMode: this.value.hostNetwork ? { label: t('workload.networking.networkMode.options.hostNetwork'), value: true } : { label: t('workload.networking.networkMode.options.normal'), value: false },
44
- hostAliases,
45
- nameservers,
46
- searches,
47
- hostname,
48
- subdomain,
49
- options
50
- };
51
-
52
- return out;
55
+ this.hostAliases = hostAliases;
56
+ this.nameservers = nameservers;
57
+ this.searches = searches;
58
+ this.hostname = hostname;
59
+ this.subdomain = subdomain;
60
+ this.options = options;
53
61
  },
54
62
 
55
63
  computed: {
@@ -42,31 +42,18 @@ export default {
42
42
  data() {
43
43
  // VolumeNodeAffinity only has 'required' field
44
44
  if (this.value.required) {
45
- return { nodeSelectorTerms: this.value.required.nodeSelectorTerms };
46
45
  } else {
47
- const { preferredDuringSchedulingIgnoredDuringExecution = [], requiredDuringSchedulingIgnoredDuringExecution = {} } = this.value;
48
- const { nodeSelectorTerms = [] } = requiredDuringSchedulingIgnoredDuringExecution;
49
- const allSelectorTerms = [...preferredDuringSchedulingIgnoredDuringExecution, ...nodeSelectorTerms].map((term) => {
50
- const neu = clone(term);
51
-
52
- neu._id = randomStr(4);
53
- if (term.preference) {
54
- Object.assign(neu, term.preference);
55
- delete neu.preference;
56
- }
57
-
58
- return neu;
59
- });
60
-
61
- return {
62
- allSelectorTerms,
63
- weightedNodeSelectorTerms: preferredDuringSchedulingIgnoredDuringExecution,
64
- defaultWeight: 1,
65
- // rules in MatchExpressions.vue can not catch changes what happens on parent component
66
- // we need re-render it via key changing
67
- rerenderNums: randomStr(4)
68
- };
69
46
  }
47
+
48
+ return {
49
+ nodeSelectorTerms: null,
50
+ allSelectorTerms: null,
51
+ weightedNodeSelectorTerms: null,
52
+ defaultWeight: 1,
53
+ // rules in MatchExpressions.vue can not catch changes what happens on parent component
54
+ // we need re-render it via key changing
55
+ rerenderNums: randomStr(4)
56
+ };
70
57
  },
71
58
 
72
59
  computed: {
@@ -88,6 +75,27 @@ export default {
88
75
  },
89
76
 
90
77
  created() {
78
+ if (this.value.required) {
79
+ this.nodeSelectorTerms = this.value.required.nodeSelectorTerms;
80
+ } else {
81
+ const { preferredDuringSchedulingIgnoredDuringExecution = [], requiredDuringSchedulingIgnoredDuringExecution = {} } = this.value;
82
+ const { nodeSelectorTerms = [] } = requiredDuringSchedulingIgnoredDuringExecution;
83
+ const allSelectorTerms = [...preferredDuringSchedulingIgnoredDuringExecution, ...nodeSelectorTerms].map((term) => {
84
+ const neu = clone(term);
85
+
86
+ neu._id = randomStr(4);
87
+ if (term.preference) {
88
+ Object.assign(neu, term.preference);
89
+ delete neu.preference;
90
+ }
91
+
92
+ return neu;
93
+ });
94
+
95
+ this.allSelectorTerms = allSelectorTerms;
96
+ this.weightedNodeSelectorTerms = preferredDuringSchedulingIgnoredDuringExecution;
97
+ }
98
+
91
99
  this.queueUpdate = debounce(this.update, 500);
92
100
  },
93
101
 
@@ -40,6 +40,15 @@ export default {
40
40
  },
41
41
 
42
42
  data() {
43
+ return {
44
+ selectNode: null,
45
+ nodeName: '',
46
+ nodeAffinity: {},
47
+ nodeSelector: {},
48
+ };
49
+ },
50
+
51
+ created() {
43
52
  const isHarvester = this.$store.getters['currentProduct'].inStore === VIRTUAL;
44
53
 
45
54
  let { nodeName = '' } = this.value;
@@ -65,9 +74,10 @@ export default {
65
74
  nodeAffinity['preferredDuringSchedulingIgnoredDuringExecution'] = [];
66
75
  }
67
76
 
68
- return {
69
- selectNode, nodeName, nodeAffinity, nodeSelector
70
- };
77
+ this.selectNode = selectNode;
78
+ this.nodeName = nodeName;
79
+ this.nodeAffinity = nodeAffinity;
80
+ this.nodeSelector = nodeSelector;
71
81
  },
72
82
 
73
83
  computed: {
@@ -41,6 +41,10 @@ export default {
41
41
  mode: {
42
42
  type: String,
43
43
  default: _CREATE,
44
+ },
45
+ placeholder: {
46
+ type: String,
47
+ default: '',
44
48
  }
45
49
  },
46
50
  data() {
@@ -116,6 +120,7 @@ export default {
116
120
  :disabled="isRandom"
117
121
  :ignore-password-managers="ignorePasswordManagers"
118
122
  :mode="mode"
123
+ :placeholder="placeholder"
119
124
  @blur="$emit('blur', $event)"
120
125
  >
121
126
  <template #suffix>
@@ -137,6 +142,7 @@ export default {
137
142
  tabindex="0"
138
143
  class="hide-show"
139
144
  role="button"
145
+ :aria-label="reveal ? t('action.ariaLabel.hidePass', { area: label }) : t('action.ariaLabel.showPass', { area: label })"
140
146
  @click.prevent.stop="hideShowFn"
141
147
  @keyup.space.prevent.stop="hideShowFn"
142
148
  >
@@ -160,20 +166,20 @@ export default {
160
166
  <style lang="scss" scoped>
161
167
  .password {
162
168
  display: flex;
163
- flex-direction: column;
169
+ /* flex-direction: column; */
164
170
 
165
171
  .labeled-input {
166
172
  .addon {
167
- display: flex;
173
+ /* display: flex;
168
174
  align-items: center;
169
175
  justify-content: center;
170
176
  padding-left: 12px;
171
- min-width: 65px;
177
+ min-width: 65px; */
172
178
 
173
- .hide-show:focus-visible {
179
+ /* .hide-show:focus-visible {
174
180
  @include focus-outline;
175
181
  outline-offset: 4px;
176
- }
182
+ } */
177
183
  }
178
184
  }
179
185
  .genPassword {