dashboard-shell-shell 1.0.122 → 1.0.1000000082

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 +88 -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 +26 -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 +542 -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 +9 -1
  343. package/types/cloud-shell/index.d.ts +11020 -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
@@ -19,17 +19,15 @@ export default {
19
19
  mixins: [ResourceManager],
20
20
 
21
21
  data() {
22
- const actions = [
23
- {
24
- action: 'showCatalogUninstallDialog',
25
- label: this.t('plugins.uninstall.label'),
26
- icon: 'icon icon-trash',
27
- enabled: true,
28
- }
29
- ];
30
-
31
22
  return {
32
- actions,
23
+ actions: [
24
+ {
25
+ action: 'showCatalogUninstallDialog',
26
+ label: this.t('plugins.uninstall.label'),
27
+ icon: 'icon icon-trash',
28
+ enabled: true,
29
+ }
30
+ ],
33
31
  catalogHeaders: UI_PLUGIN_CATALOG,
34
32
  };
35
33
  },
@@ -17,6 +17,7 @@ export default {
17
17
  const finalCounts = [];
18
18
  const promises = [];
19
19
  const topFifteenForResponseTime = [];
20
+ const schemaPromises = [];
20
21
 
21
22
  clusterForCounts.forEach((cluster, i) => {
22
23
  // Necessary to retrieve the proper display name of the cluster
@@ -31,9 +32,11 @@ export default {
31
32
  isTableVisible: !!(i === 0 && clusterForCounts.length === 1)
32
33
  });
33
34
  promises.push(this.$store.dispatch('management/request', { url: `/k8s/clusters/${ cluster.mgmt?.id }/v1/counts` }));
35
+ schemaPromises.push(this.$store.dispatch('management/request', { url: `/k8s/clusters/${ cluster.mgmt?.id }/v1/schemas?exclude=metadata.managedFields` }));
34
36
  });
35
37
 
36
38
  const countsPerCluster = await Promise.all(promises);
39
+ const schemasPerCluster = await Promise.all(schemaPromises);
37
40
 
38
41
  countsPerCluster.forEach((clusterCount, index) => {
39
42
  const counts = clusterCount.data?.[0]?.counts;
@@ -69,9 +72,27 @@ export default {
69
72
 
70
73
  this.topFifteenForResponseTime = topFifteenForResponseTime;
71
74
  this.finalCounts = finalCounts;
75
+
76
+ // Schemas
77
+ schemasPerCluster.forEach((schemas, index) => {
78
+ finalCounts[index].schemaCount = schemas?.data?.length || 0;
79
+ finalCounts[index].customSchemas = (schemas?.data?.filter((schema) => {
80
+ return schema.attributes?.group.includes('.') && !schema.attributes?.group.includes('.cattle.io') && !schema.attributes?.group.includes('.k8s.io');
81
+ }).map((schema) => schema.id) || []).sort();
82
+ });
72
83
  },
73
84
 
74
85
  data() {
86
+ return {
87
+ systemInformation: null,
88
+ topFifteenForResponseTime: null,
89
+ responseTimes: null,
90
+ finalCounts: null,
91
+ includeResponseTimes: true,
92
+ };
93
+ },
94
+
95
+ created() {
75
96
  const {
76
97
  userAgent,
77
98
  userAgentData,
@@ -118,14 +139,7 @@ export default {
118
139
  systemInformation.jsMemory.value += `, ${ this.t('about.diagnostic.systemInformation.memUsedJsHeapSize', { usedJSHeapSize: window?.performance?.memory?.usedJSHeapSize }) }`;
119
140
  }
120
141
 
121
- return {
122
- systemInformation,
123
- topFifteenForResponseTime: null,
124
- responseTimes: null,
125
- finalCounts: null,
126
- includeResponseTimes: true,
127
- storeMapping: this.$store?._modules?.root?.state,
128
- };
142
+ this.systemInformation = systemInformation;
129
143
  },
130
144
 
131
145
  computed: {
@@ -146,9 +160,9 @@ export default {
146
160
  const fileName = 'rancher-diagnostic-data.json';
147
161
  const data = {
148
162
  systemInformation: this.systemInformation,
149
- storeMapping: this.parseStoreData(this.storeMapping),
163
+ storeMapping: this.parseStoreData(this.$store?._modules?.root?.state),
150
164
  resourceCounts: this.finalCounts,
151
- responseTimes: this.responseTimes
165
+ responseTimes: this.responseTimes,
152
166
  };
153
167
 
154
168
  downloadFile(fileName, JSON.stringify(data), 'application/json')
@@ -352,6 +366,7 @@ export default {
352
366
  <span>Cluster: <b>{{ cluster.name }}</b></span>
353
367
  <span>Namespace: <b>{{ cluster.namespace }}</b></span>
354
368
  <span>Total Resources: <b>{{ sumResourceCount(cluster.counts) }}</b></span>
369
+ <span>Total Schemas: <b>{{ cluster.schemaCount }}</b></span>
355
370
  <span>Nodes: <b>{{ nodeCount(cluster.counts) }}</b></span>
356
371
  <i
357
372
  class="icon"
@@ -365,6 +380,22 @@ export default {
365
380
  </tr>
366
381
  </thead>
367
382
  <tbody v-show="cluster.isTableVisible">
383
+ <tr>
384
+ <td colspan="3">
385
+ <div class="schema-title">
386
+ Custom Schemas
387
+ </div>
388
+ <div class="custom-schemas">
389
+ <div
390
+ v-for="name in cluster.customSchemas"
391
+ :key="name"
392
+ class="schema-name"
393
+ >
394
+ {{ name }}
395
+ </div>
396
+ </div>
397
+ </td>
398
+ </tr>
368
399
  <tr>
369
400
  <th>
370
401
  Resource
@@ -445,6 +476,23 @@ table {
445
476
  padding: 8px 5px;
446
477
  min-width: 150px;
447
478
  text-align: left;
479
+
480
+ .schema-title {
481
+ font-weight: bold;
482
+ margin-bottom: 4px;
483
+ }
484
+
485
+ .custom-schemas {
486
+ display: flex;
487
+ flex-wrap: wrap;
488
+
489
+ > .schema-name {
490
+ margin-right: 5px;
491
+ margin-bottom: 2px;
492
+ border: 1px solid var(--border);
493
+ padding: 2px 5px;
494
+ }
495
+ }
448
496
  }
449
497
 
450
498
  th {
@@ -511,7 +559,7 @@ table {
511
559
  .resources-count-container {
512
560
  .cluster-row {
513
561
  display: grid;
514
- grid-template-columns: repeat(4, 1fr) 20px;
562
+ grid-template-columns: repeat(5, 1fr) 20px;
515
563
  grid-template-rows: 1fr;
516
564
  align-content: center;
517
565
  font-weight: normal;
@@ -17,17 +17,19 @@ export default {
17
17
  mixins: [Brand, BrowserTabVisibility],
18
18
 
19
19
  data() {
20
+ return {
21
+ previousRoute: '',
22
+ styles: { '--custom-content': `'${ this.t('nav.failWhale.separator') }'` }
23
+ };
24
+ },
25
+
26
+ created() {
20
27
  const store = this.$store;
21
28
 
22
29
  if (!store.state.error && !store.state.cameFromError) {
23
30
  store.commit('cameFromError');
24
31
  this.$router.replace('/');
25
32
  }
26
-
27
- return {
28
- previousRoute: '',
29
- styles: { '--custom-content': `'${ this.t('nav.failWhale.separator') }'` }
30
- };
31
33
  },
32
34
 
33
35
  computed: {
@@ -70,12 +72,15 @@ export default {
70
72
  :simple="true"
71
73
  />
72
74
 
73
- <main class="main-layout">
75
+ <main
76
+ class="main-layout"
77
+ aria-label="Fail whale layout"
78
+ >
74
79
  <div
75
80
  v-if="error"
76
81
  class="outlet"
77
82
  >
78
- <main class="main-layout error">
83
+ <div class="main-layout error">
79
84
  <div class="text-center">
80
85
  <BrandImage
81
86
  file-name="error-desert-landscape.svg"
@@ -105,6 +110,7 @@ export default {
105
110
  <hr
106
111
  class="custom-content"
107
112
  :style="styles"
113
+ role="none"
108
114
  >
109
115
  <p class="mt-20">
110
116
  <a
@@ -115,7 +121,7 @@ export default {
115
121
  </a>
116
122
  </p>
117
123
  </div>
118
- </main>
124
+ </div>
119
125
  </div>
120
126
  </main>
121
127
  </div>
package/pages/home.vue CHANGED
@@ -49,6 +49,21 @@ export default defineComponent({
49
49
  mixins: [PageHeaderActions],
50
50
 
51
51
  data() {
52
+ const options = this.$store.getters[`type-map/optionsFor`](CAPI.RANCHER_CLUSTER)?.custom || {};
53
+ const params = {
54
+ product: MANAGER,
55
+ cluster: BLANK_CLUSTER,
56
+ resource: CAPI.RANCHER_CLUSTER
57
+ };
58
+ const defaultCreateLocation = {
59
+ name: 'c-cluster-product-resource-create',
60
+ params,
61
+ };
62
+ const defaultImportLocation = {
63
+ ...defaultCreateLocation,
64
+ query: { [MODE]: _IMPORT }
65
+ };
66
+
52
67
  return {
53
68
  HIDE_HOME_PAGE_CARDS,
54
69
  fullVersion: getVersionInfo(this.$store).fullVersion,
@@ -87,24 +102,9 @@ export default defineComponent({
87
102
  },
88
103
  },
89
104
 
90
- createLocation: {
91
- name: 'c-cluster-product-resource-create',
92
- params: {
93
- product: MANAGER,
94
- cluster: BLANK_CLUSTER,
95
- resource: CAPI.RANCHER_CLUSTER
96
- },
97
- },
105
+ createLocation: options.createLocation ? options.createLocation(params) : defaultCreateLocation,
98
106
 
99
- importLocation: {
100
- name: 'c-cluster-product-resource-create',
101
- params: {
102
- product: MANAGER,
103
- cluster: BLANK_CLUSTER,
104
- resource: CAPI.RANCHER_CLUSTER
105
- },
106
- query: { [MODE]: _IMPORT }
107
- },
107
+ importLocation: options.importLocation ? options.importLocation(params) : defaultImportLocation,
108
108
 
109
109
  headers: [
110
110
  STATE,
@@ -512,7 +512,7 @@ export default defineComponent({
512
512
  :show-child="false"
513
513
  :breadcrumb="false"
514
514
  >
515
- {{ vendor }}
515
+ {{ `${vendor} - ${t('landing.homepage')}` }}
516
516
  </TabTitle>
517
517
  <BannerGraphic
518
518
  :small="true"
@@ -805,6 +805,12 @@ export default defineComponent({
805
805
  .cluster-name {
806
806
  display: flex;
807
807
  align-items: center;
808
+
809
+ // Ensure long cluster names truncate with ellipsis
810
+ > A {
811
+ overflow: hidden;
812
+ text-overflow: ellipsis;
813
+ }
808
814
  }
809
815
 
810
816
  .cluster-description {
package/pages/prefs.vue CHANGED
@@ -17,6 +17,8 @@ import LabeledSelect from '@shell/components/form/LabeledSelect';
17
17
  import { addObject } from '@shell/utils/array';
18
18
  import LocaleSelector from '@shell/components/LocaleSelector';
19
19
  import TabTitle from '@shell/components/TabTitle';
20
+ import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
21
+ import { harvester2cloud } from '@shell/utils/router'
20
22
 
21
23
  export default {
22
24
  components: {
@@ -43,7 +45,7 @@ export default {
43
45
  ...mapGetters({ hasMultipleLocales: 'i18n/hasMultipleLocales' }),
44
46
 
45
47
  isHarvester() {
46
- return this.isSingleProduct?.productName === 'harvester';
48
+ return this.isSingleProduct?.productName === harvester2cloud(HARVESTER);
47
49
  },
48
50
 
49
51
  theme: {
@@ -225,7 +227,7 @@ export default {
225
227
  v-if="!isSingleProduct"
226
228
  class="mt-10 mb-10"
227
229
  >
228
- <hr>
230
+ <hr role="none">
229
231
  <h4 v-t="'prefs.landing.label'" />
230
232
  <LandingPagePreference
231
233
  data-testid="prefs__landingPagePreference"
@@ -233,7 +235,7 @@ export default {
233
235
  </div>
234
236
  <!-- Display Settings -->
235
237
  <div class="mt-10 mb-10">
236
- <hr>
238
+ <hr role="none">
237
239
  <h4 v-t="'prefs.displaySettings.title'" />
238
240
  <p class="set-landing-leadin">
239
241
  {{ t('prefs.displaySettings.detail', {}, raw=true) }}
@@ -277,7 +279,7 @@ export default {
277
279
  v-if="!isSingleProduct"
278
280
  class="col adv-features mt-10 mb-10"
279
281
  >
280
- <hr>
282
+ <hr role="none">
281
283
  <h4 v-t="'prefs.confirmationSetting.title'" />
282
284
  <Checkbox
283
285
  v-model:value="scalingDownPrompt"
@@ -288,7 +290,7 @@ export default {
288
290
  </div>
289
291
  <!-- Advanced Features -->
290
292
  <div class="col adv-features mt-10 mb-10">
291
- <hr>
293
+ <hr role="none">
292
294
  <h4 v-t="'prefs.advFeatures.title'" />
293
295
  <Checkbox
294
296
  v-model:value="viewInApi"
@@ -331,7 +333,7 @@ export default {
331
333
  </div>
332
334
  <!-- YAML editor key mapping -->
333
335
  <div class="col mt-10 mb-10">
334
- <hr>
336
+ <hr role="none">
335
337
  <h4 v-t="'prefs.keymap.label'" />
336
338
  <ButtonGroup
337
339
  v-model:value="keymap"
@@ -344,7 +346,7 @@ export default {
344
346
  v-if="!isSingleProduct"
345
347
  class="col mt-10 mb-40"
346
348
  >
347
- <hr>
349
+ <hr role="none">
348
350
  <h4 v-t="'prefs.helm.label'" />
349
351
  <ButtonGroup
350
352
  v-model:value="showPreRelease"
@@ -118,7 +118,10 @@ export default {
118
118
  </script>
119
119
  <template>
120
120
  <div>
121
- <BannerGraphic :title="t(title, {}, true)" />
121
+ <BannerGraphic
122
+ :title="t(title, {}, true)"
123
+ :alt="t('support.bannerImage')"
124
+ />
122
125
 
123
126
  <IndentedPanel>
124
127
  <div class="content mt-20">
package/pkg/tsconfig.json CHANGED
@@ -27,25 +27,25 @@
27
27
  ],
28
28
  "paths": {
29
29
  "@shell/core/*": [
30
- "../../node_modules/@rancher/shell/core/*"
30
+ "../../node_modules/dashboard-shell-shell/core/*"
31
31
  ],
32
32
  "@shell/config/*": [
33
- "../../node_modules/@rancher/shell/config/*"
33
+ "../../node_modules/dashboard-shell-shell/config/*"
34
34
  ],
35
35
  "@shell/store/*": [
36
- "../../node_modules/@rancher/shell/store/*"
36
+ "../../node_modules/dashboard-shell-shell/store/*"
37
37
  ],
38
38
  "@shell/plugins/*": [
39
- "../../node_modules/@rancher/shell/plugins/*"
39
+ "../../node_modules/dashboard-shell-shell/plugins/*"
40
40
  ],
41
41
  "@shell/utils/*": [
42
- "../../node_modules/@rancher/shell/utils/*"
42
+ "../../node_modules/dashboard-shell-shell/utils/*"
43
43
  ],
44
44
  "@shell/models/*": [
45
- "../../node_modules/@rancher/shell/models/*"
45
+ "../../node_modules/dashboard-shell-shell/models/*"
46
46
  ],
47
47
  "@shell/mixins/*": [
48
- "../../node_modules/@rancher/shell/mixins/*"
48
+ "../../node_modules/dashboard-shell-shell/mixins/*"
49
49
  ],
50
50
  "@pkg/*": [
51
51
  "./*"
@@ -56,8 +56,8 @@
56
56
  "**/*.ts",
57
57
  "**/*.tsx",
58
58
  "**/*.vue",
59
- "../../node_modules/@rancher/shell/types/*.d.ts",
60
- "../../node_modules/@rancher/shell/core/types.ts"
59
+ "../../node_modules/dashboard-shell-shell/types/*.d.ts",
60
+ "../../node_modules/dashboard-shell-shell/core/types.ts"
61
61
  ],
62
62
  "exclude": [
63
63
  "node_modules"
package/pkg/vue.config.js CHANGED
@@ -117,7 +117,7 @@ module.exports = function(dir) {
117
117
  if (p.use) {
118
118
  p.use.forEach((u) => {
119
119
  if (u.loader.includes('babel-loader')) {
120
- p.exclude = /node_modules\/(?!@rancher\/shell\/).*/;
120
+ p.exclude = /node_modules\/(?!dashboard-shell-shell\/).*/;
121
121
  }
122
122
  });
123
123
  }
@@ -2,6 +2,8 @@ import { SCHEMA } from '@shell/config/types';
2
2
 
3
3
  import { applyChangeset, changeset, changesetConflicts } from '@shell/utils/object';
4
4
 
5
+ import { cloud2harvesterhci } from '@shell/utils/router'
6
+
5
7
  export const KEY_FIELD_FOR = {
6
8
  [SCHEMA]: '_id',
7
9
  default: 'id',
@@ -14,7 +16,7 @@ export function keyFieldFor(type) {
14
16
  export function normalizeType(type) {
15
17
  type = (type?.type || type || '').toLowerCase();
16
18
 
17
- return type;
19
+ return cloud2harvesterhci(type);
18
20
  }
19
21
 
20
22
  // Detect and resolve conflicts from a 409 response.
@@ -34,6 +34,7 @@ import { markRaw } from 'vue';
34
34
 
35
35
  import { ExtensionPoint, ActionLocation } from '@shell/core/types';
36
36
  import { getApplicableExtensionEnhancements } from '@shell/core/plugin-helpers';
37
+ import { harvesterhci2cloud, cloud2harvesterhci } from '@shell/utils/router'
37
38
 
38
39
  export const DNS_LIKE_TYPES = ['dnsLabel', 'dnsLabelRestricted', 'hostname'];
39
40
 
@@ -896,42 +897,42 @@ export default class Resource {
896
897
  {
897
898
  action: this.canUpdate ? 'goToEdit' : 'goToViewConfig',
898
899
  label: this.t(this.canUpdate ? 'action.edit' : 'action.view'),
899
- icon: 'icon icon-edit',
900
+ // icon: 'icon icon-edit',
900
901
  enabled: this.canCustomEdit,
901
902
  },
902
- {
903
- action: this.canEditYaml ? 'goToEditYaml' : 'goToViewYaml',
904
- label: this.t(this.canEditYaml ? 'action.editYaml' : 'action.viewYaml'),
905
- icon: 'icon icon-file',
906
- enabled: this.canYaml,
907
- },
903
+ // {
904
+ // action: this.canEditYaml ? 'goToEditYaml' : 'goToViewYaml',
905
+ // label: this.t(this.canEditYaml ? 'action.editYaml' : 'action.viewYaml'),
906
+ // icon: 'icon icon-file',
907
+ // enabled: this.canYaml,
908
+ // },
908
909
  {
909
910
  action: (this.canCustomEdit ? 'goToClone' : 'cloneYaml'),
910
911
  label: this.t('action.clone'),
911
- icon: 'icon icon-copy',
912
- enabled: this.canClone && this.canCreate && (this.canCustomEdit || this.canYaml),
913
- },
914
- { divider: true },
915
- {
916
- action: 'download',
917
- label: this.t('action.download'),
918
- icon: 'icon icon-download',
919
- bulkable: true,
920
- bulkAction: 'downloadBulk',
921
- enabled: this.canYaml,
922
- weight: -9,
923
- },
924
- {
925
- action: 'viewInApi',
926
- label: this.t('action.viewInApi'),
927
- icon: 'icon icon-external-link',
928
- enabled: this.canViewInApi,
912
+ // icon: 'icon icon-copy',
913
+ enabled: this.canClone && this.canCreate && (this.canCustomEdit || this.canYaml)&& this.schema.id!=='event',
929
914
  },
915
+ // { divider: true },
916
+ // {
917
+ // action: 'download',
918
+ // label: this.t('action.download'),
919
+ // icon: 'icon icon-download',
920
+ // bulkable: true,
921
+ // bulkAction: 'downloadBulk',
922
+ // enabled: this.canYaml,
923
+ // weight: -9,
924
+ // },
925
+ // {
926
+ // action: 'viewInApi',
927
+ // label: this.t('action.viewInApi'),
928
+ // icon: 'icon icon-external-link',
929
+ // enabled: this.canViewInApi,
930
+ // },
930
931
  {
931
932
  action: 'promptRemove',
932
933
  altAction: 'remove',
933
934
  label: this.t('action.remove'),
934
- icon: 'icon icon-trash',
935
+ // icon: 'icon icon-trash',
935
936
  bulkable: true,
936
937
  enabled: this.canDelete,
937
938
  bulkAction: 'promptRemove',
@@ -1269,7 +1270,7 @@ export default class Resource {
1269
1270
  params: {
1270
1271
  product: this.$rootGetters['productId'],
1271
1272
  cluster: this.$rootGetters['clusterId'],
1272
- resource: this.type,
1273
+ resource: harvesterhci2cloud(this.type),
1273
1274
  }
1274
1275
  };
1275
1276
  }
@@ -1284,7 +1285,7 @@ export default class Resource {
1284
1285
  params: {
1285
1286
  product: this.$rootGetters['productId'],
1286
1287
  cluster: this.$rootGetters['clusterId'],
1287
- resource: this.type,
1288
+ resource: harvesterhci2cloud(this.type),
1288
1289
  namespace: this.metadata?.namespace,
1289
1290
  id,
1290
1291
  }
@@ -1292,7 +1293,8 @@ export default class Resource {
1292
1293
  }
1293
1294
 
1294
1295
  get detailLocation() {
1295
- return this._detailLocation;
1296
+ let location = this._detailLocation;
1297
+ return location;
1296
1298
  }
1297
1299
 
1298
1300
  goToDetail() {
@@ -0,0 +1,37 @@
1
+ import { Store } from 'vuex';
2
+
3
+ interface PluginContext {
4
+ store: Store<any>;
5
+ [key: string]: any;
6
+ }
7
+
8
+ export default function(context: PluginContext, inject: (key: string, value: any) => void) {
9
+ const { store } = context;
10
+
11
+ // Load all API modules
12
+ const apiContext = (require as any).context(
13
+ '@shell/plugins/internal-api', // the base directory
14
+ true, // whether to search subdirectories
15
+ /\.api\.ts$/ // only .api.ts files
16
+ );
17
+
18
+ apiContext.keys().forEach((relativePath: string) => {
19
+ const mod = apiContext(relativePath);
20
+ const ApiClass = mod.default;
21
+
22
+ if (typeof ApiClass === 'function') {
23
+ // Check for a static `apiName` property, or fallback to filename
24
+ let apiName: string = ApiClass.apiName();
25
+
26
+ if (!apiName) {
27
+ // fallback to filename (strip leading ‘./’ and extension)
28
+ apiName = `$${ relativePath.replace(/^\.\//, '').replace(/\.\w+$/, '') }`;
29
+ }
30
+
31
+ const instance = new ApiClass(store);
32
+
33
+ // The inject() method automatically adds the `$` prefix
34
+ inject(apiName, instance);
35
+ }
36
+ });
37
+ }
@@ -0,0 +1,13 @@
1
+ export abstract class BaseApi {
2
+ // The Vuex store, available to all API classes
3
+ protected $store: any;
4
+
5
+ // Documented requirement: each API should define its static apiName.
6
+ static apiName(): string {
7
+ throw new Error('apiName() static method has not been implemented');
8
+ }
9
+
10
+ constructor(store: any) {
11
+ this.$store = store;
12
+ }
13
+ }