@rancher/shell 0.5.3 → 2.0.0

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 (581) hide show
  1. package/assets/data/aws-regions.json +9 -0
  2. package/assets/images/vendor/openid.svg +18 -0
  3. package/assets/styles/app.scss +1 -2
  4. package/assets/styles/fonts/_icons.scss +3 -3
  5. package/assets/styles/global/_columns.scss +1 -1
  6. package/assets/styles/global/_labeled-input.scss +2 -0
  7. package/assets/styles/themes/_csp.scss +2 -2
  8. package/assets/styles/themes/_dark.scss +8 -2
  9. package/assets/styles/themes/_light.scss +2 -1
  10. package/assets/styles/themes/_suse.scss +1 -1
  11. package/assets/styles/vendor/vue-select.scss +5 -0
  12. package/assets/translations/en-us.yaml +296 -58
  13. package/assets/translations/zh-hans.yaml +5 -27
  14. package/babel.config.js +1 -1
  15. package/chart/__tests__/S3.test.ts +9 -2
  16. package/chart/monitoring/grafana/index.vue +6 -2
  17. package/chart/monitoring/prometheus/index.vue +2 -2
  18. package/chart/rancher-backup/S3.vue +11 -9
  19. package/chart/rancher-backup/index.vue +15 -5
  20. package/cloud-credential/__tests__/harvester.test.ts +18 -0
  21. package/cloud-credential/generic.vue +18 -9
  22. package/cloud-credential/harvester.vue +11 -3
  23. package/components/AppModal.vue +167 -0
  24. package/components/AssignTo.vue +7 -4
  25. package/components/AsyncButton.vue +18 -5
  26. package/components/BackLink.vue +4 -4
  27. package/components/BannerGraphic.vue +1 -0
  28. package/components/BrandImage.vue +47 -1
  29. package/components/Carousel.vue +14 -8
  30. package/components/Certificates.vue +8 -11
  31. package/components/ClusterBadge.vue +12 -3
  32. package/components/ClusterIconMenu.vue +44 -16
  33. package/components/ClusterProviderIcon.vue +14 -3
  34. package/components/CodeMirror.vue +73 -38
  35. package/components/CommunityLinks.vue +12 -8
  36. package/components/CreateDriver.vue +81 -0
  37. package/components/CruResource.vue +51 -27
  38. package/components/DetailTop.vue +2 -2
  39. package/components/Dialog.vue +6 -5
  40. package/components/DisableAuthProviderModal.vue +14 -8
  41. package/components/DraggableZone.vue +2 -2
  42. package/components/ExplorerMembers.vue +3 -3
  43. package/components/ExplorerProjectsNamespaces.vue +6 -6
  44. package/components/FixedBanner.vue +47 -36
  45. package/components/GlobalRoleBindings.vue +26 -0
  46. package/components/Import.vue +10 -6
  47. package/components/Inactivity.vue +1 -5
  48. package/components/KeyValueView.vue +14 -10
  49. package/components/MessageLink.vue +2 -2
  50. package/components/ModalWithCard.vue +5 -8
  51. package/components/MoveModal.vue +35 -33
  52. package/components/PodSecurityAdmission.vue +3 -3
  53. package/components/PromptChangePassword.vue +33 -33
  54. package/components/PromptModal.vue +11 -21
  55. package/components/PromptRemove.vue +11 -17
  56. package/components/PromptRestore.vue +18 -16
  57. package/components/Questions/__tests__/Boolean.test.ts +9 -19
  58. package/components/Questions/__tests__/Float.test.ts +9 -19
  59. package/components/Questions/__tests__/Int.test.ts +9 -19
  60. package/components/Questions/__tests__/String.test.ts +9 -19
  61. package/components/Questions/__tests__/Yaml.test.ts +9 -20
  62. package/components/Questions/__tests__/utils/questions-defaults.ts +20 -0
  63. package/components/Questions/index.vue +18 -2
  64. package/components/ResourceCancelModal.vue +34 -29
  65. package/components/ResourceDetail/Masthead.vue +23 -7
  66. package/components/ResourceDetail/index.vue +5 -0
  67. package/components/ResourceList/Masthead.vue +28 -10
  68. package/components/ResourceList/index.vue +65 -14
  69. package/components/ResourceTable.vue +73 -19
  70. package/components/ResourceYaml.vue +1 -0
  71. package/components/SelectIconGrid.vue +3 -3
  72. package/components/SideNav.vue +15 -37
  73. package/components/SingleClusterInfo.vue +4 -4
  74. package/components/SortableTable/THead.vue +26 -12
  75. package/components/SortableTable/filtering.js +9 -1
  76. package/components/SortableTable/grouping.js +8 -1
  77. package/components/SortableTable/index.vue +142 -42
  78. package/components/SortableTable/paging.js +36 -7
  79. package/components/SortableTable/selection.js +2 -1
  80. package/components/SortableTable/sorting.js +24 -7
  81. package/components/TabTitle.vue +84 -0
  82. package/components/Tabbed/index.vue +6 -1
  83. package/components/TableDataUserIcon.vue +47 -0
  84. package/components/TypeDescription.vue +1 -0
  85. package/components/Wizard.vue +1 -0
  86. package/components/__tests__/AppModal.test.ts +98 -0
  87. package/components/__tests__/AsyncButton.test.ts +1 -3
  88. package/components/__tests__/BackLink.test.ts +1 -1
  89. package/components/__tests__/ButtonGroup.test.ts +3 -6
  90. package/components/__tests__/Carousel.test.ts +43 -0
  91. package/components/__tests__/Certificates.test.ts +29 -0
  92. package/components/__tests__/{CodeMirror.spec.ts → CodeMirror.test.ts} +5 -17
  93. package/components/__tests__/CruResource.test.ts +10 -9
  94. package/components/__tests__/EtcdInfoBanner.test.ts +37 -0
  95. package/components/__tests__/FixedBanner.test.ts +5 -20
  96. package/components/__tests__/NamespaceFilter.test.ts +9 -18
  97. package/components/__tests__/TabTitle.test.ts +129 -0
  98. package/components/auth/AzureWarning.vue +2 -2
  99. package/components/auth/RoleDetailEdit.vue +10 -0
  100. package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
  101. package/components/auth/login/oidc.vue +7 -1
  102. package/components/fleet/FleetClusters.vue +9 -9
  103. package/components/fleet/FleetIntro.vue +11 -17
  104. package/components/fleet/FleetNoWorkspaces.vue +2 -2
  105. package/components/fleet/FleetRepos.vue +1 -0
  106. package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
  107. package/components/form/ArrayList.vue +30 -19
  108. package/components/form/ArrayListSelect.vue +9 -4
  109. package/components/form/ClusterAppearance.vue +132 -0
  110. package/components/form/ColorInput.vue +1 -0
  111. package/components/form/Error.vue +3 -3
  112. package/components/form/Footer.vue +2 -2
  113. package/components/form/GitPicker.vue +83 -38
  114. package/components/form/KeyValue.vue +67 -48
  115. package/components/form/LabeledSelect.vue +143 -43
  116. package/components/form/Labels.vue +3 -1
  117. package/components/form/NameNsDescription.vue +26 -9
  118. package/components/form/ResourceLabeledSelect.vue +187 -0
  119. package/components/form/ResourceTabs/index.vue +31 -15
  120. package/components/form/SecretSelector.vue +93 -18
  121. package/components/form/Select.vue +1 -1
  122. package/components/form/SelectOrCreateAuthSecret.vue +135 -62
  123. package/components/form/SimpleSecretSelector.vue +88 -28
  124. package/components/form/__tests__/BannerSettings.test.ts +53 -0
  125. package/components/form/__tests__/KeyValue.test.ts +121 -12
  126. package/components/form/__tests__/LabeledSelect.test.ts +0 -18
  127. package/components/form/__tests__/NameNsDescription.test.ts +25 -15
  128. package/components/form/labeled-select-utils/labeled-select-pagination.ts +151 -0
  129. package/components/form/labeled-select-utils/labeled-select.utils.ts +122 -0
  130. package/components/formatter/AppSummaryGraph.vue +2 -2
  131. package/components/formatter/CloudCredPublicData.vue +30 -0
  132. package/components/formatter/ClusterLink.vue +2 -2
  133. package/components/formatter/FleetSummaryGraph.vue +2 -1
  134. package/components/formatter/ImagePercentageBar.vue +0 -4
  135. package/components/formatter/IngressTarget.vue +18 -7
  136. package/components/formatter/Link.vue +2 -2
  137. package/components/formatter/LinkDetail.vue +2 -2
  138. package/components/formatter/LinkDetailImage.vue +2 -2
  139. package/components/formatter/LinkName.vue +2 -2
  140. package/components/formatter/LiveDate.vue +16 -0
  141. package/components/formatter/PrincipalGroupBindings.vue +2 -2
  142. package/components/formatter/SecretType.vue +2 -2
  143. package/components/formatter/VirtualServiceGateways.vue +2 -2
  144. package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
  145. package/components/nav/Group.vue +7 -5
  146. package/components/nav/Header.vue +82 -43
  147. package/components/nav/NamespaceFilter.vue +8 -1
  148. package/components/nav/TopLevelMenu.vue +336 -125
  149. package/components/nav/Type.vue +58 -102
  150. package/components/nav/__tests__/TopLevelMenu.test.ts +370 -9
  151. package/components/nav/__tests__/Type.test.ts +321 -126
  152. package/components/nuxt/nuxt-child.js +0 -5
  153. package/components/nuxt/nuxt-error.vue +1 -1
  154. package/components/nuxt/nuxt-link.client.js +13 -95
  155. package/components/templates/default.vue +3 -3
  156. package/components/templates/error.vue +6 -10
  157. package/components/templates/standalone.vue +0 -4
  158. package/components/templates/unauthenticated.vue +1 -2
  159. package/components/user.retention/user-retention-header.vue +34 -0
  160. package/composables/useCompactInput.test.ts +36 -0
  161. package/composables/useCompactInput.ts +2 -2
  162. package/composables/useI18n.ts +26 -0
  163. package/composables/useLabeledFormElement.test.ts +135 -0
  164. package/composables/useStore.ts +16 -0
  165. package/config/home-links.js +32 -1
  166. package/config/labels-annotations.js +2 -1
  167. package/config/middleware.js +0 -6
  168. package/config/pagination-table-headers.js +57 -0
  169. package/config/pod-security-admission.ts +1 -1
  170. package/config/private-label.js +1 -3
  171. package/config/product/auth.js +1 -0
  172. package/config/product/explorer.js +167 -46
  173. package/config/product/legacy.js +3 -95
  174. package/config/product/manager.js +44 -11
  175. package/config/query-params.js +1 -0
  176. package/config/roles.ts +23 -0
  177. package/config/router/index.js +23 -0
  178. package/config/router/navigation-guards/attempt-first-login.js +73 -0
  179. package/config/router/navigation-guards/authentication.js +63 -0
  180. package/config/router/navigation-guards/index.js +15 -0
  181. package/config/router/navigation-guards/load-initial-settings.js +15 -0
  182. package/config/router/routes.js +487 -0
  183. package/config/settings.ts +38 -2
  184. package/config/store.js +7 -3
  185. package/config/table-headers.js +46 -1
  186. package/config/types.js +36 -16
  187. package/config/uiplugins.js +10 -5
  188. package/core/plugin-helpers.js +1 -1
  189. package/core/plugin.ts +2 -1
  190. package/core/plugins.js +289 -282
  191. package/creators/app/files/.eslintignore +0 -2
  192. package/creators/app/files/.vscode/settings.json +0 -1
  193. package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +2 -6
  194. package/creators/pkg/files/.github/workflows/build-extension-charts.yml +2 -6
  195. package/creators/pkg/init +32 -0
  196. package/detail/__tests__/service.test.ts +62 -0
  197. package/detail/catalog.cattle.io.app.vue +1 -1
  198. package/detail/cis.cattle.io.clusterscan.vue +14 -3
  199. package/detail/fleet.cattle.io.gitrepo.vue +15 -9
  200. package/detail/namespace.vue +2 -2
  201. package/detail/networking.k8s.io.ingress.vue +52 -19
  202. package/detail/node.vue +20 -43
  203. package/detail/pod.vue +1 -68
  204. package/detail/provisioning.cattle.io.cluster.vue +2 -1
  205. package/detail/service.vue +1 -1
  206. package/detail/workload/index.vue +2 -15
  207. package/dialog/AddCustomBadgeDialog.vue +318 -161
  208. package/dialog/DeactivateDriverDialog.vue +118 -0
  209. package/dialog/RollbackWorkloadDialog.vue +2 -2
  210. package/dialog/RotateCertificatesDialog.vue +0 -21
  211. package/directives/clean-html.js +15 -0
  212. package/directives/clean-tooltip.js +32 -0
  213. package/directives/focus.js +41 -0
  214. package/directives/int-number.js +21 -0
  215. package/directives/positive-int-number.js +19 -0
  216. package/directives/trim-whitespace.js +19 -0
  217. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +3 -2
  218. package/edit/__tests__/kontainerDriver.test.ts +107 -0
  219. package/edit/__tests__/management.cattle.io.clusterroletemplatebinding.test.ts +12 -1
  220. package/edit/__tests__/management.cattle.io.setting.test.ts +2 -1
  221. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +2 -3
  222. package/edit/__tests__/nodeDriver.test.ts +107 -0
  223. package/edit/__tests__/service.test.ts +1 -5
  224. package/edit/__tests__/ui.cattle.io.navlink.test.ts +3 -1
  225. package/edit/auth/AuthProviderWarningBanners.vue +34 -0
  226. package/edit/auth/__tests__/AuthProviderWarningBanners.test.ts +19 -0
  227. package/edit/auth/__tests__/azuread.test.ts +241 -0
  228. package/edit/auth/__tests__/oidc.test.ts +137 -0
  229. package/edit/auth/azuread.vue +133 -31
  230. package/edit/auth/github.vue +5 -17
  231. package/edit/auth/googleoauth.vue +5 -18
  232. package/edit/auth/ldap/index.vue +5 -17
  233. package/edit/auth/oidc.vue +143 -42
  234. package/edit/auth/saml.vue +5 -14
  235. package/edit/catalog.cattle.io.clusterrepo.vue +175 -20
  236. package/edit/cis.cattle.io.clusterscan.vue +5 -2
  237. package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
  238. package/edit/cloudcredential.vue +26 -4
  239. package/edit/configmap.vue +10 -4
  240. package/edit/fleet.cattle.io.gitrepo.vue +7 -4
  241. package/edit/helm.cattle.io.projecthelmchart.vue +29 -19
  242. package/edit/kontainerDriver.vue +65 -0
  243. package/edit/logging-flow/Match.vue +10 -9
  244. package/edit/logging-flow/index.vue +4 -19
  245. package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +232 -2
  246. package/edit/logging.banzaicloud.io.output/index.vue +43 -26
  247. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +3 -3
  248. package/edit/management.cattle.io.project.vue +2 -1
  249. package/edit/management.cattle.io.setting.vue +20 -0
  250. package/edit/management.cattle.io.user.vue +2 -1
  251. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +10 -7
  252. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +21 -16
  253. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +1 -0
  254. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +3 -0
  255. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +2 -0
  256. package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +2 -0
  257. package/edit/monitoring.coreos.com.prometheusrule/index.vue +2 -0
  258. package/edit/networking.k8s.io.ingress/Rules.vue +8 -3
  259. package/edit/networking.k8s.io.ingress/index.vue +64 -8
  260. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -0
  261. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +6 -2
  262. package/edit/networking.k8s.io.networkpolicy/__tests__/{PolicyRuleTarget.spec.ts → PolicyRuleTarget.test.ts} +45 -6
  263. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/selectors.test.ts +1 -1
  264. package/edit/networking.k8s.io.networkpolicy/index.vue +2 -0
  265. package/edit/nodeDriver.vue +65 -0
  266. package/edit/persistentvolume/index.vue +2 -2
  267. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +18 -9
  268. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +165 -1
  269. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +1 -1
  270. package/edit/provisioning.cattle.io.cluster/__tests__/CustomCommand.test.ts +0 -3
  271. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
  272. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +70 -12
  273. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +5 -0
  274. package/edit/provisioning.cattle.io.cluster/import.vue +2 -2
  275. package/edit/provisioning.cattle.io.cluster/index.vue +21 -15
  276. package/edit/provisioning.cattle.io.cluster/rke2.vue +185 -114
  277. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +67 -7
  278. package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +19 -6
  279. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
  280. package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +7 -0
  281. package/edit/provisioning.cattle.io.cluster/tabs/etcd/S3Config.vue +1 -0
  282. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +1 -0
  283. package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +3 -0
  284. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +1 -0
  285. package/edit/resources.cattle.io.backup.vue +139 -124
  286. package/edit/resources.cattle.io.restore.vue +146 -126
  287. package/edit/service.vue +1 -0
  288. package/edit/serviceaccount.vue +46 -4
  289. package/edit/workload/__tests__/Job.test.ts +1 -3
  290. package/edit/workload/__tests__/Upgrading.test.ts +2 -2
  291. package/edit/workload/mixins/workload.js +34 -1
  292. package/edit/workload/storage/emptyDir.vue +2 -2
  293. package/initialize/App.vue +75 -0
  294. package/initialize/app-extended.js +128 -0
  295. package/initialize/entry-helpers.js +549 -0
  296. package/initialize/entry.js +32 -0
  297. package/initialize/install-components.js +23 -0
  298. package/initialize/install-directives.js +59 -0
  299. package/initialize/install-plugins.js +123 -0
  300. package/list/__tests__/workload.test.ts +1 -1
  301. package/list/cis.cattle.io.clusterscan.vue +16 -10
  302. package/list/group.principal.vue +2 -2
  303. package/list/management.cattle.io.feature.vue +11 -7
  304. package/list/management.cattle.io.user.vue +36 -3
  305. package/list/networking.k8s.io.ingress.vue +36 -0
  306. package/list/node.vue +211 -73
  307. package/list/provisioning.cattle.io.cluster.vue +17 -4
  308. package/list/ui.cattle.io.navlink.vue +2 -2
  309. package/list/workload.vue +22 -0
  310. package/machine-config/__tests__/vmwarevsphere-pool-config-merge.test.ts +30 -0
  311. package/machine-config/__tests__/vmwarevsphere.test.ts +162 -59
  312. package/machine-config/amazonec2.vue +1 -1
  313. package/machine-config/azure.vue +38 -21
  314. package/machine-config/generic.vue +11 -15
  315. package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
  316. package/machine-config/vmwarevsphere.vue +20 -11
  317. package/middleware/authenticated.js +9 -361
  318. package/mixins/__tests__/chart.test.ts +48 -6
  319. package/mixins/__tests__/create-edit-view.test.ts +2 -3
  320. package/mixins/auth-config.js +3 -2
  321. package/mixins/brand.js +75 -57
  322. package/mixins/chart.js +27 -13
  323. package/mixins/create-edit-view/index.js +2 -2
  324. package/mixins/fetch.client.js +42 -48
  325. package/mixins/labeled-form-element.ts +21 -1
  326. package/mixins/page-actions.js +7 -5
  327. package/mixins/resource-fetch-api-pagination.js +304 -0
  328. package/mixins/resource-fetch-namespaced.js +1 -1
  329. package/mixins/resource-fetch.js +46 -5
  330. package/models/__tests__/cluster.test.ts +44 -0
  331. package/models/__tests__/fleet.cattle.io.cluster.test.ts +36 -0
  332. package/models/__tests__/schema.tests.ts +24 -0
  333. package/models/__tests__/steve-schema.test.ts +73 -0
  334. package/models/__tests__/workload.test.ts +1 -1
  335. package/models/catalog.cattle.io.app.js +8 -0
  336. package/models/catalog.cattle.io.clusterrepo.js +9 -1
  337. package/models/catalog.cattle.io.uiplugin.js +7 -8
  338. package/models/cis.cattle.io.clusterscan.js +29 -8
  339. package/models/cloudcredential.js +9 -1
  340. package/models/cluster/node.js +4 -0
  341. package/models/cluster/schema.js +6 -0
  342. package/models/cluster.js +33 -0
  343. package/models/driver.js +62 -0
  344. package/models/fleet.cattle.io.cluster.js +23 -11
  345. package/models/fleet.cattle.io.gitrepo.js +10 -0
  346. package/models/helm.cattle.io.projecthelmchart.js +1 -1
  347. package/models/kontainerdriver.js +68 -0
  348. package/models/management/schema.js +6 -0
  349. package/models/management.cattle.io.authconfig.js +3 -2
  350. package/models/management.cattle.io.cluster.js +5 -4
  351. package/models/management.cattle.io.globalrole.js +2 -0
  352. package/models/management.cattle.io.user.js +67 -2
  353. package/models/monitoring.coreos.com.receiver.js +3 -1
  354. package/models/monitoring.coreos.com.route.js +1 -1
  355. package/models/networking.k8s.io.ingress.js +2 -1
  356. package/models/nodedriver.js +68 -0
  357. package/models/provisioning.cattle.io.cluster.js +34 -1
  358. package/models/schema.js +28 -7
  359. package/models/service.js +2 -0
  360. package/models/steve-schema.ts +254 -0
  361. package/models/workload.js +1 -0
  362. package/package.json +6 -5
  363. package/pages/about.vue +12 -5
  364. package/pages/account/index.vue +7 -2
  365. package/pages/auth/login.vue +106 -102
  366. package/pages/auth/logout.vue +2 -2
  367. package/pages/auth/setup.vue +57 -64
  368. package/pages/auth/verify.vue +17 -17
  369. package/pages/c/_cluster/apps/charts/chart.vue +54 -9
  370. package/pages/c/_cluster/apps/charts/index.vue +37 -13
  371. package/pages/c/_cluster/apps/charts/install.vue +4 -4
  372. package/pages/c/_cluster/auth/config/_id.vue +0 -6
  373. package/pages/c/_cluster/auth/config/index.vue +15 -9
  374. package/pages/c/_cluster/auth/roles/index.vue +8 -10
  375. package/pages/c/_cluster/auth/user.retention/index.vue +384 -0
  376. package/pages/c/_cluster/explorer/ConfigBadge.vue +13 -8
  377. package/pages/c/_cluster/explorer/EventsTable.vue +18 -0
  378. package/pages/c/_cluster/explorer/__tests__/index.test.ts +181 -0
  379. package/pages/c/_cluster/explorer/index.vue +231 -72
  380. package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
  381. package/pages/c/_cluster/explorer/tools/index.vue +12 -176
  382. package/pages/c/_cluster/fleet/index.vue +88 -93
  383. package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +89 -0
  384. package/pages/c/_cluster/longhorn/index.vue +52 -17
  385. package/pages/c/_cluster/manager/cloudCredential/index.vue +18 -25
  386. package/pages/c/_cluster/manager/drivers/kontainerDriver/_id.vue +12 -0
  387. package/pages/c/_cluster/manager/drivers/kontainerDriver/create.vue +15 -0
  388. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +94 -0
  389. package/pages/c/_cluster/manager/drivers/nodeDriver/_id.vue +12 -0
  390. package/pages/c/_cluster/manager/drivers/nodeDriver/create.vue +15 -0
  391. package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +63 -0
  392. package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
  393. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
  394. package/pages/c/_cluster/monitoring/index.vue +1 -17
  395. package/pages/c/_cluster/monitoring/route-receiver/index.vue +2 -2
  396. package/pages/c/_cluster/neuvector/index.vue +1 -0
  397. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
  398. package/pages/c/_cluster/settings/banners.vue +86 -8
  399. package/pages/c/_cluster/settings/brand.vue +258 -36
  400. package/pages/c/_cluster/settings/index.vue +4 -4
  401. package/pages/c/_cluster/settings/links.vue +5 -3
  402. package/pages/c/_cluster/settings/performance.vue +71 -2
  403. package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
  404. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +10 -7
  405. package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
  406. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
  407. package/pages/c/_cluster/uiplugins/InstallDialog.vue +53 -18
  408. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +36 -301
  409. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +14 -6
  410. package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +52 -106
  411. package/pages/c/_cluster/uiplugins/index.vue +38 -52
  412. package/pages/diagnostic.vue +1 -0
  413. package/pages/fail-whale.vue +103 -41
  414. package/pages/home.vue +81 -24
  415. package/pages/prefs.vue +8 -3
  416. package/pages/support/index.vue +12 -2
  417. package/plugins/clean-html-directive.js +5 -12
  418. package/plugins/clean-tooltip-directive.js +6 -31
  419. package/plugins/codemirror.js +0 -9
  420. package/plugins/dashboard-store/__tests__/mutations.test.ts +296 -313
  421. package/plugins/dashboard-store/actions.js +140 -32
  422. package/plugins/dashboard-store/getters.js +86 -39
  423. package/plugins/dashboard-store/index.js +0 -99
  424. package/plugins/dashboard-store/mutations.js +150 -48
  425. package/plugins/dashboard-store/resource-class.js +14 -109
  426. package/plugins/directives.js +6 -39
  427. package/plugins/ember-cookie.js +13 -0
  428. package/plugins/global-formatters.js +26 -5
  429. package/plugins/i18n.js +90 -56
  430. package/plugins/int-number.js +6 -20
  431. package/plugins/plugin.js +3 -3
  432. package/plugins/positive-int-number.js +6 -17
  433. package/plugins/steve/__tests__/{getters.spec.ts → getters.test.ts} +124 -31
  434. package/plugins/steve/__tests__/mutations.test.ts +49 -0
  435. package/plugins/steve/__tests__/subscribe.spec.ts +109 -0
  436. package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
  437. package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
  438. package/plugins/steve/actions.js +0 -1
  439. package/plugins/steve/getters.js +183 -63
  440. package/plugins/steve/hybrid-class.js +5 -1
  441. package/plugins/steve/mutations.js +29 -5
  442. package/plugins/steve/norman-class.js +123 -2
  443. package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
  444. package/plugins/steve/schema.d.ts +22 -0
  445. package/plugins/steve/steve-pagination-utils.ts +368 -0
  446. package/plugins/steve/subscribe.js +37 -75
  447. package/plugins/trim-whitespace.js +6 -34
  448. package/plugins/vue-js-modal.js +1 -1
  449. package/public/index.html +1 -0
  450. package/rancher-components/Accordion/Accordion.vue +3 -2
  451. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  452. package/rancher-components/Banner/Banner.test.ts +1 -5
  453. package/rancher-components/Banner/Banner.vue +2 -2
  454. package/rancher-components/Card/Card.vue +4 -4
  455. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
  456. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +1 -1
  457. package/rancher-components/Form/LabeledInput/LabeledInput.vue +66 -30
  458. package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
  459. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  460. package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
  461. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
  462. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  463. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  464. package/rancher-components/StringList/StringList.vue +8 -8
  465. package/rancher-components/components/Accordion/Accordion.vue +3 -2
  466. package/rancher-components/components/BadgeState/BadgeState.vue +3 -3
  467. package/rancher-components/components/Banner/Banner.test.ts +1 -5
  468. package/rancher-components/components/Banner/Banner.vue +2 -2
  469. package/rancher-components/components/Card/Card.vue +4 -4
  470. package/rancher-components/components/Form/Checkbox/Checkbox.vue +4 -3
  471. package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +1 -1
  472. package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +66 -30
  473. package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -3
  474. package/rancher-components/components/Form/Radio/RadioButton.vue +13 -7
  475. package/rancher-components/components/Form/Radio/RadioGroup.vue +4 -3
  476. package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +7 -5
  477. package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  478. package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +9 -4
  479. package/rancher-components/components/StringList/StringList.vue +8 -8
  480. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +27 -8
  481. package/scripts/clean +1 -1
  482. package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +11 -0
  483. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -0
  484. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
  485. package/scripts/extension/helm/package/Dockerfile +1 -1
  486. package/scripts/extension/helm/scripts/patch +27 -0
  487. package/scripts/extension/publish +6 -6
  488. package/scripts/serve-pkgs +0 -2
  489. package/scripts/test-plugins-build.sh +6 -6
  490. package/scripts/vue-migrate.js +683 -0
  491. package/store/__tests__/catalog.test.ts +224 -0
  492. package/store/auth.js +23 -4
  493. package/store/aws.js +53 -6
  494. package/store/catalog.js +21 -5
  495. package/store/cru-resource.ts +26 -0
  496. package/store/customisation.js +35 -0
  497. package/store/features.js +6 -4
  498. package/store/index.js +132 -39
  499. package/store/plugins.js +8 -4
  500. package/store/type-map.js +143 -143
  501. package/store/type-map.utils.ts +226 -0
  502. package/tsconfig.json +0 -1
  503. package/tsconfig.paths.json +4 -1
  504. package/types/components/labeledSelect.ts +50 -0
  505. package/types/resources/settings.d.ts +32 -0
  506. package/types/{userPreferences.d.ts → resources/userPreferences.d.ts} +0 -1
  507. package/types/shell/index.d.ts +996 -782
  508. package/types/store/dashboard-store.types.ts +42 -0
  509. package/types/store/pagination.types.ts +457 -0
  510. package/types/store/type-map.ts +30 -0
  511. package/types/store/vuex.d.ts +9 -0
  512. package/types/vue-shim.d.ts +51 -0
  513. package/utils/__tests__/cluster.test.ts +20 -18
  514. package/utils/__tests__/create-yaml.test.ts +359 -2
  515. package/utils/__tests__/kontainer.test.ts +92 -0
  516. package/utils/__tests__/pod-security-admission.test.ts +1 -1
  517. package/utils/alertmanagerconfig.js +19 -0
  518. package/utils/array.ts +40 -1
  519. package/utils/async.ts +2 -0
  520. package/utils/auth.js +152 -4
  521. package/utils/axios.js +2 -2
  522. package/utils/banners.js +103 -0
  523. package/utils/cluster.js +1 -1
  524. package/utils/config.js +4 -0
  525. package/utils/create-yaml.js +54 -27
  526. package/utils/error.js +25 -0
  527. package/utils/formatter.js +5 -3
  528. package/utils/git.ts +1 -1
  529. package/utils/install-redirect.js +1 -1
  530. package/utils/kontainer.ts +186 -0
  531. package/utils/monitoring.js +2 -37
  532. package/utils/pagination-utils.ts +154 -0
  533. package/utils/pod-security-admission.ts +1 -1
  534. package/utils/router.js +86 -0
  535. package/utils/settings.ts +46 -0
  536. package/utils/socket.js +1 -0
  537. package/utils/time.js +1 -0
  538. package/utils/title.ts +3 -0
  539. package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
  540. package/utils/validators/formRules/__tests__/index.test.ts +21 -0
  541. package/utils/validators/formRules/index.ts +3 -0
  542. package/utils/validators/index.js +1 -0
  543. package/vue.config.js +376 -421
  544. package/assets/styles/vendor/vue-js-modal.scss +0 -16
  545. package/chart/monitoring/steps/uninstall-v1.vue +0 -135
  546. package/components/EventsTable.vue +0 -67
  547. package/components/TabbedLinks/index.vue +0 -94
  548. package/components/nuxt/nuxt-link.server.js +0 -16
  549. package/components/nuxt/nuxt.js +0 -101
  550. package/config/router.js +0 -425
  551. package/initialize/App.js +0 -152
  552. package/initialize/client.js +0 -734
  553. package/initialize/index.js +0 -287
  554. package/middleware/i18n.js +0 -10
  555. package/middleware/unauthenticated.js +0 -22
  556. package/mixins/v1-workload-metrics.js +0 -43
  557. package/pages/c/_cluster/apps/index.vue +0 -15
  558. package/pages/c/_cluster/auth/index.vue +0 -17
  559. package/pages/c/_cluster/index.vue +0 -15
  560. package/pages/c/_cluster/legacy/index.vue +0 -22
  561. package/pages/c/_cluster/manager/index.vue +0 -22
  562. package/pages/c/_cluster/mcapps/index.vue +0 -21
  563. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +0 -232
  564. package/plugins/dashboard-store/rehydrate-all.js +0 -44
  565. package/plugins/index.js +0 -11
  566. package/plugins/portal-vue.js +0 -4
  567. package/plugins/portal.js +0 -4
  568. package/plugins/resize.js +0 -5
  569. package/plugins/shortkey.js +0 -4
  570. package/plugins/tooltip.js +0 -4
  571. package/plugins/v-select.js +0 -4
  572. package/utils/group.js +0 -70
  573. package/utils/nuxt.js +0 -638
  574. package/utils/router.scrollBehavior.js +0 -78
  575. /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
  576. /package/models/__tests__/{node.ts → node.test.ts} +0 -0
  577. /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
  578. /package/plugins/steve/__tests__/{steve-class.spec.ts → steve-class.test.ts} +0 -0
  579. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  580. /package/rancher-components/components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  581. /package/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
@@ -2,23 +2,19 @@
2
2
  import Brand from '@shell/mixins/brand';
3
3
 
4
4
  export default {
5
- name: 'NuxtError',
6
- mixins: [Brand],
7
- middleware: ['unauthenticated'],
5
+ name: 'NuxtError',
6
+ mixins: [Brand],
8
7
 
9
8
  data() {
10
9
  return { ready: false };
11
10
  },
12
11
 
13
12
  computed: {
14
- error() {
15
- return window.$nuxt.nuxt.err || {};
16
- },
17
13
  statusCode() {
18
- return (this.error && this.error.statusCode) || 599;
14
+ return 599;
19
15
  },
20
16
  message() {
21
- return this.error.message || '';
17
+ return '';
22
18
  }
23
19
  },
24
20
  watch: {
@@ -76,13 +72,13 @@ export default {
76
72
  class="error-link"
77
73
  href="/"
78
74
  >Back to Home</a>
79
- <n-link
75
+ <router-link
80
76
  v-else
81
77
  class="error-link"
82
78
  to="/"
83
79
  >
84
80
  Back to Home
85
- </n-link>
81
+ </router-link>
86
82
  </p>
87
83
  </div>
88
84
  </div>
@@ -1,7 +1,3 @@
1
- <script>
2
- export default { middleware: ['unauthenticated'] };
3
- </script>
4
-
5
1
  <template>
6
2
  <router-view :key="$route.path" />
7
3
  </template>
@@ -4,8 +4,7 @@ import FixedBanner from '@shell/components/FixedBanner';
4
4
 
5
5
  export default {
6
6
  mixins: [Brand],
7
- components: { FixedBanner },
8
- middleware: ['unauthenticated'],
7
+ components: { FixedBanner }
9
8
  };
10
9
  </script>
11
10
 
@@ -0,0 +1,34 @@
1
+ <script lang="ts" setup>
2
+ import TabTitle from '@shell/components/TabTitle';
3
+ </script>
4
+
5
+ <template>
6
+ <div>
7
+ <header>
8
+ <div class="title">
9
+ <h1
10
+ data-testid="charts-header-title"
11
+ class="m-0"
12
+ >
13
+ <TabTitle :show-child="false">
14
+ {{ t('user.retention.edit.title.header') }}
15
+ </TabTitle>
16
+ <router-link
17
+ :to="{
18
+ name: 'c-cluster-product-resource',
19
+ params: {
20
+ cluster: '_',
21
+ product: 'auth',
22
+ resource: 'management.cattle.io.user',
23
+ }
24
+ }"
25
+ >
26
+ {{ t('user.retention.edit.title.pre') }}
27
+ </router-link>
28
+ {{ t('user.retention.edit.title.post') }}
29
+ </h1>
30
+ </div>
31
+ </header>
32
+ <h2>{{ t('user.retention.edit.title.subTitle') }}</h2>
33
+ </div>
34
+ </template>
@@ -0,0 +1,36 @@
1
+ import { ref } from 'vue';
2
+ import { useCompactInput } from './useCompactInput';
3
+
4
+ describe('useCompactInput', () => {
5
+ it('should compute isCompact correctly when compact is explicitly set', () => {
6
+ const props = ref({
7
+ compact: true,
8
+ label: 'Test Label',
9
+ labelKey: 'testLabel',
10
+ });
11
+
12
+ const { isCompact } = useCompactInput(props.value);
13
+
14
+ expect(isCompact.value).toBe(true);
15
+
16
+ // When compact is explicitly set to false, isCompact should be false
17
+ props.value.compact = false;
18
+ expect(isCompact.value).toBe(false);
19
+ });
20
+
21
+ it('should compute isCompact correctly when compact is not explicitly set', () => {
22
+ const props = ref({
23
+ label: '',
24
+ labelKey: '',
25
+ });
26
+
27
+ const { isCompact } = useCompactInput(props.value);
28
+
29
+ // When there is no label and labelKey is also not present, isCompact should be true
30
+ expect(isCompact.value).toBe(true);
31
+
32
+ // When label is present, isCompact should be false
33
+ props.value.label = 'Updated Label';
34
+ expect(isCompact.value).toBe(false);
35
+ });
36
+ });
@@ -1,7 +1,7 @@
1
1
  import { computed, ComputedRef } from 'vue';
2
2
 
3
3
  interface CompactInputProps {
4
- compact?: boolean;
4
+ compact?: boolean | null;
5
5
  label?: string;
6
6
  labelKey?: string;
7
7
  }
@@ -13,7 +13,7 @@ interface UseCompactInput {
13
13
  export const useCompactInput = (props: CompactInputProps): UseCompactInput => {
14
14
  const isCompact = computed(() => {
15
15
  // Compact if explicitly set - otherwise compact if there is no label
16
- return props.compact !== null ? !!props.compact : !(props.label || props.labelKey);
16
+ return (props.compact !== null && props.compact !== undefined) ? !!props.compact : !(props.label || props.labelKey);
17
17
  });
18
18
 
19
19
  return { isCompact };
@@ -0,0 +1,26 @@
1
+ import { Store } from 'vuex';
2
+
3
+ import { stringFor } from '@shell/plugins/i18n';
4
+
5
+ let store: Store<any> | null = null;
6
+
7
+ export const useI18n = (vuexStore: Store<any>): { t: typeof t } => {
8
+ store = vuexStore;
9
+
10
+ if (!store) {
11
+ throw new Error('usI18n() must be called from setup()');
12
+ }
13
+
14
+ return { t };
15
+ };
16
+
17
+ /**
18
+ * Allows for consuming i18n strings with the Vue composition API.
19
+ * @param key - The key for the i18n string to translate.
20
+ * @param args - An object or array containing arguments for the translation function.
21
+ * @param raw - A boolean determining if the string returned is a raw representation.
22
+ * @returns A translated string or the raw value if the raw parameter is set to true.
23
+ */
24
+ const t = (key: string, args?: unknown, raw?: boolean): unknown => {
25
+ return stringFor(store, key, args, raw);
26
+ };
@@ -0,0 +1,135 @@
1
+ import { ref } from 'vue';
2
+ import { useLabeledFormElement } from './useLabeledFormElement';
3
+
4
+ describe('useLabeledFormElement', () => {
5
+ it('should set raised to true when focused', () => {
6
+ const props = {
7
+ mode: 'edit',
8
+ value: '',
9
+ required: true,
10
+ disabled: false,
11
+ rules: [],
12
+ };
13
+
14
+ const emit = jest.fn();
15
+ const { onFocusLabeled, onBlurLabeled, raised } = useLabeledFormElement(props, emit);
16
+
17
+ onFocusLabeled();
18
+ expect(raised.value).toBe(true);
19
+
20
+ onBlurLabeled();
21
+ expect(raised.value).toBe(false);
22
+ });
23
+
24
+ it('should set focused to true when focused', () => {
25
+ const props = {
26
+ mode: 'edit',
27
+ value: '',
28
+ required: true,
29
+ disabled: false,
30
+ rules: [],
31
+ };
32
+
33
+ const emit = jest.fn();
34
+ const { onFocusLabeled, onBlurLabeled, focused } = useLabeledFormElement(props, emit);
35
+
36
+ onFocusLabeled();
37
+ expect(focused.value).toBe(true);
38
+
39
+ onBlurLabeled();
40
+ expect(focused.value).toBe(false);
41
+ });
42
+
43
+ it('should set blurred to current timestamp when blurred', () => {
44
+ const props = {
45
+ mode: 'edit',
46
+ value: '',
47
+ required: true,
48
+ disabled: false,
49
+ rules: [],
50
+ };
51
+
52
+ const emit = jest.fn();
53
+ const { onBlurLabeled, blurred } = useLabeledFormElement(props, emit);
54
+
55
+ onBlurLabeled();
56
+ expect(blurred.value).toBeTruthy();
57
+ });
58
+
59
+ it('should compute isDisabled correctly', () => {
60
+ const props = ref({
61
+ mode: 'edit',
62
+ value: '',
63
+ required: true,
64
+ disabled: false,
65
+ rules: [],
66
+ });
67
+
68
+ const emit = jest.fn();
69
+ const { isDisabled } = useLabeledFormElement(props.value, emit);
70
+
71
+ expect(isDisabled.value).toBe(false);
72
+
73
+ props.value.disabled = true;
74
+ expect(isDisabled.value).toBe(true);
75
+
76
+ props.value.mode = 'view';
77
+ expect(isDisabled.value).toBe(true);
78
+ });
79
+
80
+ it('should compute validationMessage correctly for required field', () => {
81
+ const props = ref({
82
+ mode: 'edit',
83
+ value: '',
84
+ required: true,
85
+ disabled: false,
86
+ rules: [
87
+ (value: string[]) => (value.length < 5 ? 'This field is required' : undefined),
88
+ ],
89
+ });
90
+
91
+ const emit = jest.fn();
92
+ const { validationMessage, onBlurLabeled } = useLabeledFormElement(props.value, emit);
93
+
94
+ onBlurLabeled();
95
+ expect(validationMessage.value).toBe('This field is required');
96
+ });
97
+
98
+ it('should compute validationMessage correctly for custom rules', () => {
99
+ const props = ref({
100
+ mode: 'edit',
101
+ value: 'test',
102
+ required: false,
103
+ disabled: false,
104
+ rules: [
105
+ (value: string[]) => (value.length < 5 ? 'Value must be at least 5 characters long' : undefined),
106
+ (value: string[]) => (value.includes('test') ? 'Value cannot contain the word "test"' : undefined),
107
+ ],
108
+ });
109
+
110
+ const emit = jest.fn();
111
+ const { validationMessage, onBlurLabeled } = useLabeledFormElement(props.value, emit);
112
+
113
+ onBlurLabeled();
114
+ expect(validationMessage.value).toBe('Value must be at least 5 characters long, Value cannot contain the word "test"');
115
+ });
116
+
117
+ it('should compute requiredField correctly', () => {
118
+ const props = ref({
119
+ mode: 'edit',
120
+ value: '',
121
+ required: true,
122
+ disabled: false,
123
+ rules: [],
124
+ });
125
+
126
+ const emit = jest.fn();
127
+ const { requiredField } = useLabeledFormElement(props.value, emit);
128
+
129
+ expect(requiredField.value).toBe(true);
130
+
131
+ // When the field is not required, requiredField should be false
132
+ props.value.required = false;
133
+ expect(requiredField.value).toBe(false);
134
+ });
135
+ });
@@ -0,0 +1,16 @@
1
+ import { getCurrentInstance } from 'vue';
2
+ import { Store } from 'vuex';
3
+
4
+ /**
5
+ * useStore allows for accessing Vuex stores from within a setup function. This is a temporary measure for working with
6
+ * Vuex in Vue2.
7
+ *
8
+ * TODO: #9541 Remove for Vue 3 migration
9
+ */
10
+ export const useStore = ():Store<any> => {
11
+ const vm = getCurrentInstance();
12
+
13
+ if (!vm) throw new Error('useStore() must be called from setup()');
14
+
15
+ return vm.proxy.$store;
16
+ };
@@ -2,7 +2,9 @@ import { DOCS_BASE } from '@shell/config/private-label';
2
2
  import { MANAGEMENT } from '@shell/config/types';
3
3
  import { SETTING } from '@shell/config/settings';
4
4
  import { allHash } from '@shell/utils/promise';
5
+ import { isRancherPrime } from '@shell/config/version';
5
6
 
7
+ // i18n-uses customLinks.defaults.*
6
8
  const DEFAULT_LINKS = [
7
9
  {
8
10
  key: 'docs',
@@ -31,6 +33,12 @@ const DEFAULT_LINKS = [
31
33
  },
32
34
  ];
33
35
 
36
+ const COLLECTIVE_LINK = {
37
+ key: 'suseCollective',
38
+ value: 'https://susecollective.suse.com/join/prime',
39
+ enabled: true,
40
+ };
41
+
34
42
  const SUPPORT_LINK = {
35
43
  key: 'commercialSupport',
36
44
  value: '/support',
@@ -47,6 +55,9 @@ const CN_FORUMS_LINK = {
47
55
  // We add a version attribute to the setting so we know what has been migrated and which version of the setting we have
48
56
  export const CUSTOM_LINKS_VERSION = 'v1';
49
57
 
58
+ // Version with collective added (Prime)
59
+ export const CUSTOM_LINKS_COLLECTIVE_VERSION = 'v1.1';
60
+
50
61
  // Fetch the settings required for the links, taking into account legacy settings if we have not migrated
51
62
  export async function fetchLinks(store, hasSupport, isSupportPage, t) {
52
63
  let uiLinks = {};
@@ -63,11 +74,26 @@ export async function fetchLinks(store, hasSupport, isSupportPage, t) {
63
74
  }
64
75
 
65
76
  // If uiLinks is set and has the correct version, then we are okay, otherwise we need to migrate from the old settings
66
- if (uiLinks?.version === CUSTOM_LINKS_VERSION) {
77
+ if (uiLinks?.version?.startsWith(CUSTOM_LINKS_VERSION)) {
78
+ // v1 > v1.1 migration
79
+ if (uiLinks?.version === CUSTOM_LINKS_VERSION) {
80
+ uiLinks.version = CUSTOM_LINKS_COLLECTIVE_VERSION;
81
+
82
+ // Add collective link so that it is enabled by default
83
+ if (!uiLinks.defaults.includes(COLLECTIVE_LINK.key)) {
84
+ uiLinks.defaults.push(COLLECTIVE_LINK.key);
85
+ }
86
+ }
87
+
67
88
  // Map out the default settings, as we only store keys of the ones to show
68
89
  if (uiLinks.defaults) {
69
90
  const defaults = [...DEFAULT_LINKS];
70
91
 
92
+ // Add prime link if necessary
93
+ if (isRancherPrime()) {
94
+ defaults.push(COLLECTIVE_LINK);
95
+ }
96
+
71
97
  // Map the link name stored to the default link, if it exists
72
98
  defaults.forEach((link) => {
73
99
  const enabled = uiLinks.defaults.find((linkName) => linkName === link.key);
@@ -89,6 +115,11 @@ export async function fetchLinks(store, hasSupport, isSupportPage, t) {
89
115
  custom: []
90
116
  };
91
117
 
118
+ // Add prime link if necessary
119
+ if (isRancherPrime()) {
120
+ links.defaults.push(COLLECTIVE_LINK);
121
+ }
122
+
92
123
  // There are two legacy settings:
93
124
  // SETTING.ISSUES - can specify a custom link to use for 'File an issue'
94
125
  // SETTING.COMMUNITY_LINKS - can specify whether to hide all of the default links (other than 'File an issue')
@@ -14,6 +14,7 @@ export const CREATOR_ID = 'field.cattle.io/creatorId';
14
14
  export const RESOURCE_QUOTA = 'field.cattle.io/resourceQuota';
15
15
  export const AZURE_MIGRATED = 'auth.cattle.io/azuread-endpoint-migrated';
16
16
  export const WORKSPACE_ANNOTATION = 'objectset.rio.cattle.io/id';
17
+ export const NODE_ARCHITECTURE = 'kubernetes.io/arch';
17
18
 
18
19
  export const KUBERNETES = {
19
20
  SERVICE_ACCOUNT_UID: 'kubernetes.io/service-account.uid',
@@ -152,7 +153,7 @@ export const CLUSTER_BADGE = {
152
153
  TEXT: 'ui.rancher/badge-text',
153
154
  // Badge color - as a hex color - e.g. #ff00ff
154
155
  COLOR: 'ui.rancher/badge-color',
155
- // Custom icon text - max 2 characters
156
+ // Custom icon text - max 3 characters
156
157
  ICON_TEXT: 'ui.rancher/badge-icon-text',
157
158
  };
158
159
 
@@ -3,10 +3,4 @@ const middleware = {};
3
3
  middleware['authenticated'] = require('../middleware/authenticated.js');
4
4
  middleware['authenticated'] = middleware['authenticated'].default || middleware['authenticated'];
5
5
 
6
- middleware['i18n'] = require('../middleware/i18n.js');
7
- middleware['i18n'] = middleware['i18n'].default || middleware['i18n'];
8
-
9
- middleware['unauthenticated'] = require('../middleware/unauthenticated.js');
10
- middleware['unauthenticated'] = middleware['unauthenticated'].default || middleware['unauthenticated'];
11
-
12
6
  export default middleware;
@@ -0,0 +1,57 @@
1
+ import { STATE, NAME as NAME_COL, NAMESPACE as NAMESPACE_COL, AGE } from '@shell/config/table-headers';
2
+
3
+ // This file contains table headers
4
+ // These table headers are used for server side pagination
5
+ // They MUST contain sort and search values that are paths to raw properties (not computed properties in models)
6
+ // They SHOULD avoid formatters that change the value from the same used by sort and search (user will see an order that doesn't match what they see)
7
+
8
+ export const STEVE_NAME_COL = {
9
+ ...NAME_COL,
10
+ defaultSort: true,
11
+ value: 'metadata.name',
12
+ sort: ['metadata.name'],
13
+ search: 'metadata.name',
14
+ };
15
+
16
+ export const STEVE_ID_COL = {
17
+ name: 'steve-id',
18
+ labelKey: 'tableHeaders.id',
19
+ value: 'id',
20
+ sort: ['id'],
21
+ search: 'id',
22
+ };
23
+
24
+ export const STEVE_STATE_COL = {
25
+ ...STATE,
26
+ // value: 'metadata.state.name', Use the state as defined by the resource rather than converted via the model.
27
+ // This means we'll show something different to what we sort and filter on.
28
+ sort: [], // ['metadata.state.name'], // Pending API support
29
+ search: false, // 'metadata.state.name', // Pending API support
30
+ };
31
+
32
+ export const STEVE_AGE_COL = {
33
+ ...AGE,
34
+ value: 'metadata.creationTimestamp',
35
+ sort: 'metadata.creationTimestamp',
36
+ search: false,
37
+ };
38
+
39
+ export const STEVE_NAMESPACE_COL = {
40
+ ...NAMESPACE_COL,
41
+ value: 'metadata.namespace',
42
+ sort: 'metadata.namespace',
43
+ search: 'metadata.namespace',
44
+ };
45
+
46
+ export const STEVE_LIST_GROUPS = [{
47
+ tooltipKey: 'resourceTable.groupBy.none',
48
+ icon: 'icon-list-flat',
49
+ value: 'none',
50
+ }, {
51
+ icon: 'icon-folder',
52
+ value: 'metadata.namespace',
53
+ field: 'metadata.namespace', // Default groupByLabel field in models is NS based
54
+ hideColumn: NAMESPACE_COL.name,
55
+ tooltipKey: 'resourceTable.groupBy.namespace',
56
+ groupLabelKey: 'groupByLabel',
57
+ }];
@@ -1,4 +1,4 @@
1
- import { PSADimension, PSALevel, PSAMode } from '@shell/types/pod-security-admission';
1
+ import { PSADimension, PSALevel, PSAMode } from '@shell/types/resources/pod-security-admission';
2
2
 
3
3
  /**
4
4
  * All the PSA labels are created with this prefix, so we can use this to identify them
@@ -3,7 +3,7 @@ import { SETTING } from './settings';
3
3
  export const ANY = 0;
4
4
  export const STANDARD = 1;
5
5
  export const CUSTOM = 2;
6
- export const DOCS_BASE = 'https://ranchermanager.docs.rancher.com/v2.8';
6
+ export const DOCS_BASE = 'https://ranchermanager.docs.rancher.com/v2.9';
7
7
 
8
8
  const STANDARD_VENDOR = 'Rancher';
9
9
  const STANDARD_PRODUCT = 'Explorer';
@@ -89,7 +89,5 @@ export function setTitle() {
89
89
  const head = document.getElementsByTagName('head')[0];
90
90
 
91
91
  head.appendChild(link);
92
- } else {
93
- document.title = v;
94
92
  }
95
93
  }
@@ -174,6 +174,7 @@ export function init(store) {
174
174
  componentForType(`${ MANAGEMENT.AUTH_CONFIG }/googleoauth`, 'auth/googleoauth');
175
175
  componentForType(`${ MANAGEMENT.AUTH_CONFIG }/azuread`, 'auth/azuread');
176
176
  componentForType(`${ MANAGEMENT.AUTH_CONFIG }/keycloakoidc`, 'auth/oidc');
177
+ componentForType(`${ MANAGEMENT.AUTH_CONFIG }/oidc`, 'auth/oidc');
177
178
 
178
179
  basicType([
179
180
  'config',