dashboard-shell-shell 1.0.121 → 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 -554
  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
@@ -0,0 +1,225 @@
1
+ <script>
2
+ import { mapGetters } from 'vuex';
3
+ import Favorite from '@shell/components/nav/Favorite';
4
+ import TypeDescription from '@shell/components/TypeDescription';
5
+ import { get } from '@shell/utils/object';
6
+ import { AS, _YAML } from '@shell/config/query-params';
7
+ import ResourceLoadingIndicator from './ResourceLoadingIndicator';
8
+ import TabTitle from '@shell/components/TabTitle';
9
+ import { harvesterhci2cloud, cloud2harvesterhci } from '@shell/utils/router'
10
+
11
+ /**
12
+ * Resource List Masthead component.
13
+ */
14
+ export default {
15
+
16
+ name: 'MastheadResourceList-btn',
17
+
18
+ components: {
19
+ Favorite,
20
+ TypeDescription,
21
+ ResourceLoadingIndicator,
22
+ TabTitle
23
+ },
24
+ props: {
25
+ resource: {
26
+ type: String,
27
+ required: true,
28
+ },
29
+
30
+ schema: {
31
+ type: Object,
32
+ default: null,
33
+ },
34
+ typeDisplay: {
35
+ type: String,
36
+ default: null,
37
+ },
38
+ isCreatable: {
39
+ type: Boolean,
40
+ default: null,
41
+ },
42
+ isYamlCreatable: {
43
+ type: Boolean,
44
+ default: null,
45
+ },
46
+ createLocation: {
47
+ type: Object,
48
+ default: null,
49
+ },
50
+ yamlCreateLocation: {
51
+ type: Object,
52
+ default: null,
53
+ },
54
+
55
+ createButtonLabel: {
56
+ type: String,
57
+ default: null
58
+ },
59
+
60
+ /**
61
+ * Inherited global identifier prefix for tests
62
+ * Define a term based on the parent component to avoid conflicts on multiple components
63
+ */
64
+ componentTestid: {
65
+ type: String,
66
+ default: 'masthead'
67
+ }
68
+ },
69
+
70
+ data() {
71
+ const params = { ...this.$route.params };
72
+
73
+ params.resource = harvesterhci2cloud(params.resource)
74
+
75
+ const formRoute = { name: `${ cloud2harvesterhci(this.$route.name) }-create`, params };
76
+
77
+ const hasEditComponent = this.$store.getters['type-map/hasCustomEdit'](this.resource);
78
+
79
+ const yamlRoute = {
80
+ name: `${ cloud2harvesterhci(this.$route.name) }-create`,
81
+ params,
82
+ query: { [AS]: _YAML },
83
+ };
84
+
85
+ const tabList = ['集群配置'];
86
+ return {
87
+ formRoute,
88
+ yamlRoute,
89
+ hasEditComponent,
90
+ tabList,
91
+ };
92
+ },
93
+
94
+ computed: {
95
+ get,
96
+ ...mapGetters(['isExplorer', 'currentCluster']),
97
+
98
+ _typeDisplay() {
99
+ if ( this.typeDisplay !== null) {
100
+ return this.typeDisplay;
101
+ }
102
+
103
+ if ( !this.schema ) {
104
+ return '?';
105
+ }
106
+
107
+ return this.$store.getters['type-map/labelFor'](this.schema, 99);
108
+ },
109
+
110
+
111
+ _isYamlCreatable() {
112
+ if ( this.isYamlCreatable !== null) {
113
+ return this.isYamlCreatable;
114
+ }
115
+
116
+ return this.schema && this._isCreatable && this.$store.getters['type-map/optionsFor'](this.resource).canYaml;
117
+ },
118
+
119
+ _isCreatable() {
120
+ // Does not take into account hasEditComponent, such that _isYamlCreatable works
121
+ if ( this.isCreatable !== null) {
122
+ return this.isCreatable;
123
+ }
124
+
125
+ // blocked-post means you can post through norman, but not through steve.
126
+ if ( this.schema && !this.schema?.collectionMethods.find((x) => ['blocked-post', 'post'].includes(x.toLowerCase())) ) {
127
+ return false;
128
+ }
129
+
130
+ return this.$store.getters['type-map/optionsFor'](this.resource).isCreatable;
131
+ },
132
+
133
+ _createLocation() {
134
+ return this.createLocation || this.formRoute;
135
+ },
136
+
137
+ _yamlCreateLocation() {
138
+ return this.yamlCreateLocation || this.yamlRoute;
139
+ },
140
+
141
+ _createButtonlabel() {
142
+ return this.createButtonLabel || this.t('resourceList.head.create');
143
+ },
144
+ }
145
+ };
146
+ </script>
147
+
148
+ <template>
149
+ <!-- 顶部 header,带有子标题(subheader)样式类 -->
150
+ <div style="display: flex;width: 100%;">
151
+
152
+ <!-- 操作按钮区域 -->
153
+ <div
154
+ v-if="!(tabList.includes(_typeDisplay))"
155
+ class="actions-container"
156
+ style="min-height: 32px;align-self: flex-end;margin-right: 10px;"
157
+ >
158
+ <slot name="actions">
159
+ <div class="actions">
160
+ <slot name="extraActions" />
161
+
162
+ <slot name="createButton">
163
+ <router-link
164
+ v-if="hasEditComponent && _isCreatable"
165
+ :to="_createLocation"
166
+ class="btn role-primary"
167
+ :data-testid="componentTestid+'-create'"
168
+ >
169
+ {{ _createButtonlabel }}
170
+ </router-link>
171
+ <router-link
172
+ v-else-if="_isYamlCreatable"
173
+ :to="_yamlCreateLocation"
174
+ class="btn role-primary"
175
+ :data-testid="componentTestid+'-create-yaml'"
176
+ >
177
+ {{ t("resourceList.head.createFromYaml") }}
178
+ </router-link>
179
+ </slot>
180
+ </div>
181
+ </slot>
182
+ </div>
183
+ </div>
184
+ </template>
185
+
186
+ <style lang="scss" scoped>
187
+
188
+
189
+ header {
190
+ /* margin-bottom: 20px; */
191
+ }
192
+
193
+ header.with-subheader {
194
+ /* grid-template-areas:
195
+ 'type-banner type-banner'
196
+ 'title actions'
197
+ 'sub-header sub-header'
198
+ 'state-banner state-banner'; */
199
+ position: relative;
200
+ display: flex;
201
+ margin-bottom: 16px;
202
+ flex-direction: column;
203
+ }
204
+ .excram-list{
205
+ font-size: 14px;
206
+ line-height: 22px;
207
+ margin-bottom: 20px;
208
+ font-family: 'Microsoft YaHei';
209
+ }
210
+ .excram-last-name{
211
+ color: var(--primary);
212
+ }
213
+ .descrip-name{
214
+ font-size: 26px;
215
+ font-family: 'Microsoft YaHei';
216
+ }
217
+ .masthod-title-description{
218
+ font-family: 'Microsoft YaHei';
219
+ margin-top: 20px;
220
+ }
221
+ .actions-container{
222
+ /* display: flex; */
223
+ /* margin-left: 0px; */
224
+ }
225
+ </style>
@@ -0,0 +1,375 @@
1
+ <script>
2
+ import { mapGetters } from 'vuex';
3
+ import Favorite from '@shell/components/nav/Favorite';
4
+ import TypeDescription from '@shell/components/TypeDescription';
5
+ import { get } from '@shell/utils/object';
6
+ import { AS, _YAML } from '@shell/config/query-params';
7
+ import ResourceLoadingIndicator from './ResourceLoadingIndicator';
8
+ import TabTitle from '@shell/components/TabTitle';
9
+ import { harvesterhci2cloud, cloud2harvesterhci } from '@shell/utils/router'
10
+
11
+ /**
12
+ * Resource List Masthead component.
13
+ */
14
+ export default {
15
+
16
+ name: 'MastheadResourceList',
17
+
18
+ components: {
19
+ Favorite,
20
+ TypeDescription,
21
+ ResourceLoadingIndicator,
22
+ TabTitle
23
+ },
24
+ props: {
25
+ resource: {
26
+ type: String,
27
+ required: true,
28
+ },
29
+ favoriteResource: {
30
+ type: String,
31
+ default: null
32
+ },
33
+ schema: {
34
+ type: Object,
35
+ default: null,
36
+ },
37
+ typeDisplay: {
38
+ type: String,
39
+ default: null,
40
+ },
41
+ isCreatable: {
42
+ type: Boolean,
43
+ default: null,
44
+ },
45
+ isYamlCreatable: {
46
+ type: Boolean,
47
+ default: null,
48
+ },
49
+ createLocation: {
50
+ type: Object,
51
+ default: null,
52
+ },
53
+ yamlCreateLocation: {
54
+ type: Object,
55
+ default: null,
56
+ },
57
+ createButtonLabel: {
58
+ type: String,
59
+ default: null
60
+ },
61
+ loadResources: {
62
+ type: Array,
63
+ default: () => []
64
+ },
65
+
66
+ loadIndeterminate: {
67
+ type: Boolean,
68
+ default: false
69
+ },
70
+
71
+ showIncrementalLoadingIndicator: {
72
+ type: Boolean,
73
+ default: false
74
+ },
75
+
76
+ /**
77
+ * Inherited global identifier prefix for tests
78
+ * Define a term based on the parent component to avoid conflicts on multiple components
79
+ */
80
+ componentTestid: {
81
+ type: String,
82
+ default: 'masthead'
83
+ },
84
+
85
+ mainButtonVisible: {
86
+ type: Boolean,
87
+ default: true
88
+ },
89
+ },
90
+
91
+ data() {
92
+ const params = { ...this.$route.params };
93
+
94
+ params.resource = harvesterhci2cloud(params.resource)
95
+
96
+ const formRoute = { name: `${ cloud2harvesterhci(this.$route.name) }-create`, params };
97
+
98
+ const hasEditComponent = this.$store.getters['type-map/hasCustomEdit'](this.resource);
99
+
100
+ const yamlRoute = {
101
+ name: `${ cloud2harvesterhci(this.$route.name) }-create`,
102
+ params,
103
+ query: { [AS]: _YAML },
104
+ };
105
+
106
+ const tabList = ['集群配置'];
107
+
108
+ const description = ''
109
+ return {
110
+ formRoute,
111
+ yamlRoute,
112
+ hasEditComponent,
113
+ tabList,
114
+ description
115
+ };
116
+ },
117
+
118
+ computed: {
119
+ get,
120
+ ...mapGetters(['isExplorer', 'currentCluster']),
121
+
122
+ resourceName() {
123
+ if (this.schema) {
124
+ return this.$store.getters['type-map/labelFor'](this.schema);
125
+ }
126
+
127
+ return this.resource;
128
+ },
129
+
130
+ _typeDisplay() {
131
+ if ( this.typeDisplay !== null) {
132
+ return this.typeDisplay;
133
+ }
134
+
135
+ if ( !this.schema ) {
136
+ return '?';
137
+ }
138
+
139
+ return this.$store.getters['type-map/labelFor'](this.schema, 99);
140
+ },
141
+ _descriptionDisplay() {
142
+ const key = cloud2harvesterhci(this.$route.path.split('/').pop());
143
+
144
+ return this.$store.getters['i18n/t'](`typeDescription."${ key.toLowerCase() }"`);
145
+ },
146
+ demoDisplay() {
147
+ // const product = this.$store.getters['productId'];
148
+ // const productId = this.$store.getters['type-map/groupForBasicType'](this.$store.getters['productId'], this._createLocation.params.resource);
149
+
150
+ // const parts = productId?.split('::') || [];
151
+ // const newString = 'root';
152
+
153
+ // if (!parts.includes(newString)) {
154
+ // parts.unshift(newString); // 将字符串添加到数组第一位
155
+ // }
156
+
157
+ // const partsEn = parts.map((item) => {
158
+ // return this.$store.getters['i18n/t'](`typeLabel."${ item.toLowerCase() }"`);
159
+ // });
160
+
161
+ // return partsEn;
162
+
163
+ const breadcrumbList = {
164
+ 'harvesterhci.io.management.cluster': {
165
+ origin: 'Harvester 集群',
166
+ bread: ['虚拟化管理'],
167
+ description: '还没有添加描述。。。。'
168
+ },
169
+ 'management.cattle.io.user': {
170
+ origin: '用户',
171
+ bread: ['用户 & 认证'],
172
+ description: '还没有添加描述。。。。'
173
+ },
174
+ 'management.cattle.io.setting':{
175
+ origin: '基础设置',
176
+ bread: ['全局设置'],
177
+ description: '还没有添加描述。。。。'
178
+ },
179
+ 'management.cattle.io.feature':{
180
+ origin: '功能开关',
181
+ bread: ['全局设置'],
182
+ description: '还没有添加描述。。。。'
183
+ },
184
+ }
185
+ const resourcePath = this.$route.params.resource || ''
186
+
187
+ const breadcrumb = []
188
+ if (breadcrumbList[resourcePath] && Object.keys(breadcrumbList[resourcePath]).length > 0) {
189
+ breadcrumb.push(...breadcrumbList[resourcePath].bread)
190
+ this.description = breadcrumbList[resourcePath].description
191
+ }
192
+
193
+ return breadcrumb
194
+ },
195
+
196
+ _isYamlCreatable() {
197
+ if ( this.isYamlCreatable !== null) {
198
+ return this.isYamlCreatable;
199
+ }
200
+
201
+ return this.schema && this._isCreatable && this.$store.getters['type-map/optionsFor'](this.resource).canYaml;
202
+ },
203
+
204
+ _isCreatable() {
205
+ // Does not take into account hasEditComponent, such that _isYamlCreatable works
206
+ if ( this.isCreatable !== null) {
207
+ return this.isCreatable;
208
+ }
209
+
210
+ // blocked-post means you can post through norman, but not through steve.
211
+ if ( this.schema && !this.schema?.collectionMethods.find((x) => ['blocked-post', 'post'].includes(x.toLowerCase())) ) {
212
+ return false;
213
+ }
214
+
215
+ return this.$store.getters['type-map/optionsFor'](this.resource).isCreatable;
216
+ },
217
+
218
+ _createLocation() {
219
+ return this.createLocation || this.formRoute;
220
+ },
221
+
222
+ _yamlCreateLocation() {
223
+ return this.yamlCreateLocation || this.yamlRoute;
224
+ },
225
+
226
+ _createButtonlabel() {
227
+ return this.createButtonLabel || this.t('resourceList.head.create');
228
+ },
229
+ }
230
+ };
231
+ </script>
232
+
233
+ <template>
234
+ <!-- 顶部 header,带有子标题(subheader)样式类 -->
235
+ <header class="with-subheader">
236
+ <div style="display: flex;width: 100%;">
237
+ <div style="flex: 1;">
238
+ <!-- 标题区域 -->
239
+ <div class="title">
240
+ <div class="excram-list">
241
+ <span
242
+ v-for="(item,index) in demoDisplay"
243
+ :key="index"
244
+ >
245
+ <span v-if="item">{{ item }}</span>
246
+ <span v-if="item">/</span>
247
+ </span>
248
+ <span class="excram-last-name">{{ _typeDisplay }}</span>
249
+ </div>
250
+ <h1 style="display: flex;align-items: center;" class="m-0 descrip-name">
251
+ <TabTitle>{{ _typeDisplay }}</TabTitle>
252
+ <!-- 子标题区域 -->
253
+ <div class="sub-header">
254
+ <slot name="subHeader">
255
+ <!--Slot content-->
256
+ </slot>
257
+ </div>
258
+
259
+ <!-- <Favorite
260
+ v-if="isExplorer"
261
+ :resource="favoriteResource || resource"
262
+ /> -->
263
+
264
+ <ResourceLoadingIndicator
265
+ style="margin-left: 10px;"
266
+ v-if="showIncrementalLoadingIndicator"
267
+ :resources="loadResources"
268
+ :indeterminate="loadIndeterminate"
269
+ />
270
+ </h1>
271
+
272
+ <!-- 插槽:typeDescription,用于插入类型描述组件 -->
273
+ <div v-if="description" class="masthod-title-description">
274
+ {{ description }}
275
+ </div>
276
+
277
+ </div>
278
+
279
+
280
+ </div>
281
+
282
+ <!-- 操作按钮区域 -->
283
+ <div
284
+ v-if="!(tabList.includes(_typeDisplay)) && mainButtonVisible"
285
+ class="actions-container"
286
+ style="min-height: 32px;align-self: flex-end;"
287
+ >
288
+ <slot name="actions">
289
+ <div class="actions">
290
+ <slot name="extraActions" />
291
+
292
+ <slot name="createButton">
293
+ <router-link
294
+ v-if="hasEditComponent && _isCreatable"
295
+ :to="_createLocation"
296
+ class="btn role-primary"
297
+ :data-testid="componentTestid+'-create'"
298
+ >
299
+ {{ _createButtonlabel }}
300
+ </router-link>
301
+ <router-link
302
+ v-else-if="_isYamlCreatable"
303
+ :to="_yamlCreateLocation"
304
+ class="btn role-primary"
305
+ :data-testid="componentTestid+'-create-yaml'"
306
+ >
307
+ {{ t("resourceList.head.createFromYaml") }}
308
+ </router-link>
309
+ </slot>
310
+ </div>
311
+ </slot>
312
+ </div>
313
+ </div>
314
+ <div
315
+ v-if="!(tabList.includes(_typeDisplay))"
316
+ style="width: 110%;height: 1px;background-color: #D7D7D7;margin-top: 16px;margin-left: -20px;margin-right: -20px;"
317
+ />
318
+ </header>
319
+ </template>
320
+
321
+ <style lang="scss" scoped>
322
+
323
+ .title {
324
+ /* align-items: center;
325
+ display: flex; */
326
+ h1 {
327
+ margin: 0;
328
+ }
329
+ }
330
+
331
+ header {
332
+ /* margin-bottom: 20px; */
333
+ }
334
+
335
+ header.with-subheader {
336
+ /* grid-template-areas:
337
+ 'type-banner type-banner'
338
+ 'title actions'
339
+ 'sub-header sub-header'
340
+ 'state-banner state-banner'; */
341
+ position: relative;
342
+ display: flex;
343
+ margin-bottom: 16px;
344
+ flex-direction: column;
345
+ }
346
+ .excram-list{
347
+ font-size: 14px;
348
+ line-height: 22px;
349
+ margin-bottom: 20px;
350
+ font-family: 'Microsoft YaHei';
351
+ }
352
+ .excram-last-name{
353
+ color: var(--primary);
354
+ }
355
+ .descrip-name{
356
+ font-size: 26px;
357
+ font-family: 'Microsoft YaHei';
358
+ }
359
+ .masthod-title-description{
360
+ font-family: 'Microsoft YaHei';
361
+ margin-top: 20px;
362
+ }
363
+ .actions-container{
364
+ /* display: flex; */
365
+ /* margin-left: 0px; */
366
+ }
367
+
368
+ .sub-header {
369
+ font-size: 16px;
370
+ margin-left: 5px;
371
+ .btn {
372
+ text-align: left !important;
373
+ }
374
+ }
375
+ </style>