@rancher/shell 1.2.3 → 2.0.1

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 (699) 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 +1 -0
  7. package/assets/styles/global/_layout.scss +99 -0
  8. package/assets/styles/themes/_csp.scss +2 -2
  9. package/assets/styles/themes/_dark.scss +8 -2
  10. package/assets/styles/themes/_light.scss +2 -1
  11. package/assets/styles/themes/_suse.scss +1 -1
  12. package/assets/styles/vendor/vue-select.scss +5 -0
  13. package/assets/translations/en-us.yaml +315 -64
  14. package/assets/translations/zh-hans.yaml +7 -31
  15. package/babel.config.js +8 -2
  16. package/chart/__tests__/S3.test.ts +9 -2
  17. package/chart/gatekeeper.vue +2 -11
  18. package/chart/istio.vue +1 -10
  19. package/chart/logging/index.vue +2 -11
  20. package/chart/monitoring/alerting/index.vue +7 -21
  21. package/chart/monitoring/grafana/index.vue +61 -2
  22. package/chart/monitoring/index.vue +52 -26
  23. package/chart/monitoring/prometheus/index.vue +39 -45
  24. package/chart/rancher-backup/S3.vue +11 -9
  25. package/chart/rancher-backup/index.vue +18 -15
  26. package/cloud-credential/__tests__/harvester.test.ts +18 -0
  27. package/cloud-credential/azure.vue +4 -17
  28. package/cloud-credential/generic.vue +18 -9
  29. package/cloud-credential/harvester.vue +11 -3
  30. package/components/AlertTable.vue +17 -7
  31. package/components/AppModal.vue +167 -0
  32. package/components/AssignTo.vue +7 -4
  33. package/components/AsyncButton.vue +27 -5
  34. package/components/BackLink.vue +4 -4
  35. package/components/BannerGraphic.vue +1 -0
  36. package/components/BrandImage.vue +47 -1
  37. package/components/Carousel.vue +15 -8
  38. package/components/Certificates.vue +161 -0
  39. package/components/ClusterBadge.vue +12 -3
  40. package/components/ClusterIconMenu.vue +55 -12
  41. package/components/ClusterProviderIcon.vue +14 -3
  42. package/components/CodeMirror.vue +111 -17
  43. package/components/CommunityLinks.vue +12 -8
  44. package/components/CopyCode.vue +6 -2
  45. package/components/CopyToClipboard.vue +2 -1
  46. package/components/CopyToClipboardText.vue +14 -9
  47. package/components/CreateDriver.vue +81 -0
  48. package/components/CruResource.vue +52 -27
  49. package/components/DetailTop.vue +2 -2
  50. package/components/Dialog.vue +6 -5
  51. package/components/DisableAuthProviderModal.vue +14 -8
  52. package/components/DraggableZone.vue +2 -2
  53. package/components/EtcdInfoBanner.vue +5 -5
  54. package/components/ExplorerMembers.vue +3 -3
  55. package/components/ExplorerProjectsNamespaces.vue +31 -7
  56. package/components/FixedBanner.vue +48 -36
  57. package/components/GlobalRoleBindings.vue +26 -0
  58. package/components/GrafanaDashboard.vue +6 -4
  59. package/components/IconOrSvg.vue +1 -1
  60. package/components/Import.vue +10 -6
  61. package/components/Inactivity.vue +1 -5
  62. package/components/KeyValueView.vue +14 -10
  63. package/components/Markdown.vue +16 -12
  64. package/components/MessageLink.vue +2 -2
  65. package/components/ModalWithCard.vue +5 -8
  66. package/components/MoveModal.vue +35 -33
  67. package/components/PodSecurityAdmission.vue +3 -3
  68. package/components/PromptChangePassword.vue +33 -33
  69. package/components/PromptModal.vue +11 -21
  70. package/components/PromptRemove.vue +12 -17
  71. package/components/PromptRestore.vue +18 -16
  72. package/components/Questions/__tests__/Boolean.test.ts +9 -19
  73. package/components/Questions/__tests__/Float.test.ts +9 -19
  74. package/components/Questions/__tests__/Int.test.ts +9 -19
  75. package/components/Questions/__tests__/String.test.ts +9 -19
  76. package/components/Questions/__tests__/Yaml.test.ts +9 -20
  77. package/components/Questions/__tests__/utils/questions-defaults.ts +20 -0
  78. package/components/Questions/index.vue +19 -3
  79. package/components/ResourceCancelModal.vue +34 -29
  80. package/components/ResourceDetail/Masthead.vue +48 -16
  81. package/components/ResourceDetail/index.vue +6 -4
  82. package/components/ResourceList/Masthead.vue +10 -9
  83. package/components/ResourceList/index.vue +65 -14
  84. package/components/ResourceTable.vue +87 -21
  85. package/components/ResourceYaml.vue +35 -5
  86. package/components/SelectIconGrid.vue +3 -3
  87. package/components/SideNav.vue +50 -94
  88. package/components/SingleClusterInfo.vue +4 -4
  89. package/components/SortableTable/THead.vue +33 -21
  90. package/components/SortableTable/filtering.js +9 -1
  91. package/components/SortableTable/grouping.js +8 -1
  92. package/components/SortableTable/index.vue +143 -44
  93. package/components/SortableTable/paging.js +36 -7
  94. package/components/SortableTable/selection.js +2 -1
  95. package/components/SortableTable/sorting.js +24 -7
  96. package/components/StatusTable.vue +5 -1
  97. package/components/Tabbed/index.vue +18 -1
  98. package/components/TableDataUserIcon.vue +47 -0
  99. package/components/TypeDescription.vue +1 -0
  100. package/components/Wizard.vue +1 -0
  101. package/components/YamlEditor.vue +1 -0
  102. package/components/__tests__/AppModal.test.ts +98 -0
  103. package/components/__tests__/AsyncButton.test.ts +1 -3
  104. package/components/__tests__/BackLink.test.ts +1 -1
  105. package/components/__tests__/ButtonGroup.test.ts +3 -6
  106. package/components/__tests__/Carousel.test.ts +43 -0
  107. package/components/__tests__/Certificates.test.ts +29 -0
  108. package/components/__tests__/CodeMirror.test.ts +87 -0
  109. package/components/__tests__/CopyCode.test.ts +5 -4
  110. package/components/__tests__/CruResource.test.ts +10 -9
  111. package/components/__tests__/EtcdInfoBanner.test.ts +37 -0
  112. package/components/__tests__/FixedBanner.test.ts +5 -20
  113. package/components/__tests__/NamespaceFilter.test.ts +9 -18
  114. package/components/__tests__/TabTitle.test.ts +129 -0
  115. package/components/auth/AzureWarning.vue +2 -2
  116. package/components/auth/RoleDetailEdit.vue +10 -0
  117. package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
  118. package/components/auth/login/oidc.vue +7 -1
  119. package/components/fleet/FleetBundles.vue +5 -11
  120. package/components/fleet/FleetClusters.vue +9 -9
  121. package/components/fleet/FleetIntro.vue +11 -17
  122. package/components/fleet/FleetNoWorkspaces.vue +2 -2
  123. package/components/fleet/FleetRepos.vue +63 -27
  124. package/components/fleet/FleetResources.vue +6 -1
  125. package/components/fleet/FleetStatus.vue +3 -3
  126. package/components/fleet/FleetSummary.vue +35 -30
  127. package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
  128. package/components/fleet/__tests__/FleetSummary.test.ts +316 -0
  129. package/components/form/ArrayList.vue +22 -18
  130. package/components/form/ArrayListSelect.vue +5 -0
  131. package/components/form/BannerSettings.vue +3 -0
  132. package/components/form/ClusterAppearance.vue +132 -0
  133. package/components/form/ColorInput.vue +1 -0
  134. package/components/form/Error.vue +3 -3
  135. package/components/form/FileSelector.vue +1 -0
  136. package/components/form/Footer.vue +2 -2
  137. package/components/form/GitPicker.vue +83 -38
  138. package/components/form/KeyValue.vue +70 -48
  139. package/components/form/LabeledSelect.vue +145 -41
  140. package/components/form/Labels.vue +3 -1
  141. package/components/form/NameNsDescription.vue +26 -9
  142. package/components/form/Password.vue +3 -1
  143. package/components/form/ResourceLabeledSelect.vue +187 -0
  144. package/components/form/ResourceTabs/index.vue +31 -15
  145. package/components/form/SecretSelector.vue +93 -18
  146. package/components/form/SelectOrCreateAuthSecret.vue +132 -59
  147. package/components/form/SimpleSecretSelector.vue +88 -28
  148. package/components/form/Taints.vue +13 -7
  149. package/components/form/__tests__/BannerSettings.test.ts +53 -0
  150. package/components/form/__tests__/KeyValue.test.ts +120 -11
  151. package/components/form/__tests__/LabeledSelect.test.ts +0 -18
  152. package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +25 -15
  153. package/components/form/__tests__/Taints.test.ts +70 -0
  154. package/components/form/labeled-select-utils/labeled-select-pagination.ts +151 -0
  155. package/components/form/labeled-select-utils/labeled-select.utils.ts +122 -0
  156. package/components/formatter/AppSummaryGraph.vue +2 -2
  157. package/components/formatter/Checked.vue +11 -3
  158. package/components/formatter/CloudCredPublicData.vue +30 -0
  159. package/components/formatter/ClusterLink.vue +2 -2
  160. package/components/formatter/ClusterProvider.vue +1 -18
  161. package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
  162. package/components/formatter/FleetSummaryGraph.vue +25 -12
  163. package/components/formatter/ImagePercentageBar.vue +0 -4
  164. package/components/formatter/IngressTarget.vue +18 -7
  165. package/components/formatter/Link.vue +2 -2
  166. package/components/formatter/LinkDetail.vue +2 -2
  167. package/components/formatter/LinkDetailImage.vue +2 -2
  168. package/components/formatter/LinkName.vue +2 -2
  169. package/components/formatter/LiveDuration.vue +1 -1
  170. package/components/formatter/PercentageBar.vue +1 -1
  171. package/components/formatter/PrincipalGroupBindings.vue +2 -2
  172. package/components/formatter/SecretType.vue +2 -2
  173. package/components/formatter/VirtualServiceGateways.vue +2 -2
  174. package/components/formatter/WorkloadDetailEndpoints.vue +12 -22
  175. package/components/formatter/__tests__/Checked.test.ts +19 -0
  176. package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
  177. package/components/formatter/__tests__/WorkloadDetailEndpoints.test.ts +81 -0
  178. package/components/nav/Group.vue +9 -7
  179. package/components/nav/Header.vue +85 -46
  180. package/components/nav/Jump.vue +19 -9
  181. package/components/nav/NamespaceFilter.vue +8 -1
  182. package/components/nav/TopLevelMenu.vue +392 -136
  183. package/components/nav/Type.vue +71 -106
  184. package/components/nav/WindowManager/ContainerLogs.vue +120 -19
  185. package/components/nav/WindowManager/ContainerShell.vue +6 -1
  186. package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
  187. package/components/nav/WindowManager/index.vue +11 -10
  188. package/components/nav/__tests__/TopLevelMenu.test.ts +400 -6
  189. package/components/nav/__tests__/Type.test.ts +322 -97
  190. package/components/nuxt/nuxt-child.js +9 -78
  191. package/components/nuxt/nuxt-error.vue +1 -1
  192. package/components/nuxt/nuxt-link.client.js +13 -95
  193. package/{layouts → components/templates}/blank.vue +1 -1
  194. package/{layouts → components/templates}/default.vue +11 -101
  195. package/{layouts → components/templates}/error.vue +13 -26
  196. package/{layouts → components/templates}/home.vue +4 -1
  197. package/{layouts → components/templates}/plain.vue +4 -1
  198. package/{layouts → components/templates}/standalone.vue +1 -5
  199. package/{layouts → components/templates}/unauthenticated.vue +2 -3
  200. package/composables/useCompactInput.test.ts +36 -0
  201. package/composables/useCompactInput.ts +20 -0
  202. package/composables/useLabeledFormElement.test.ts +135 -0
  203. package/composables/useLabeledFormElement.ts +138 -0
  204. package/config/harvester-manager-types.js +2 -0
  205. package/config/home-links.js +2 -1
  206. package/config/labels-annotations.js +2 -1
  207. package/config/middleware.js +0 -6
  208. package/config/pagination-table-headers.js +57 -0
  209. package/config/pod-security-admission.ts +1 -1
  210. package/config/private-label.js +21 -1
  211. package/config/product/auth.js +1 -0
  212. package/config/product/explorer.js +166 -45
  213. package/config/product/fleet.js +6 -1
  214. package/config/product/legacy.js +2 -11
  215. package/config/product/manager.js +51 -25
  216. package/config/query-params.js +2 -0
  217. package/config/roles.ts +23 -0
  218. package/config/router/index.js +23 -0
  219. package/config/router/navigation-guards/attempt-first-login.js +73 -0
  220. package/config/router/navigation-guards/authentication.js +63 -0
  221. package/config/router/navigation-guards/i18n.js +13 -0
  222. package/config/router/navigation-guards/index.js +16 -0
  223. package/config/router/navigation-guards/load-initial-settings.js +15 -0
  224. package/config/router/routes.js +487 -0
  225. package/config/settings.ts +31 -2
  226. package/config/store.js +8 -4
  227. package/config/system-namespaces.js +3 -0
  228. package/config/table-headers.js +66 -1
  229. package/config/types.js +35 -20
  230. package/config/uiplugins.js +10 -5
  231. package/core/plugin-helpers.js +4 -6
  232. package/core/plugin-routes.ts +56 -114
  233. package/core/plugin.ts +18 -11
  234. package/core/plugins-loader.js +7 -9
  235. package/core/plugins.js +289 -285
  236. package/core/types-provisioning.ts +7 -0
  237. package/creators/app/app.package.json +2 -1
  238. package/creators/app/files/.eslintignore +0 -2
  239. package/creators/app/files/.gitlab-ci.yml +14 -0
  240. package/creators/app/files/.vscode/settings.json +0 -1
  241. package/creators/app/init +19 -0
  242. package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +2 -6
  243. package/creators/pkg/files/.github/workflows/build-extension-charts.yml +2 -6
  244. package/creators/pkg/init +32 -0
  245. package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +119 -0
  246. package/detail/__tests__/service.test.ts +62 -0
  247. package/detail/catalog.cattle.io.app.vue +1 -1
  248. package/detail/cis.cattle.io.clusterscan.vue +14 -3
  249. package/detail/fleet.cattle.io.bundle.vue +1 -1
  250. package/detail/fleet.cattle.io.cluster.vue +11 -1
  251. package/detail/fleet.cattle.io.gitrepo.vue +15 -9
  252. package/detail/namespace.vue +2 -2
  253. package/detail/networking.k8s.io.ingress.vue +52 -19
  254. package/detail/node.vue +22 -3
  255. package/detail/provisioning.cattle.io.cluster.vue +31 -13
  256. package/detail/service.vue +1 -1
  257. package/detail/workload/index.vue +1 -0
  258. package/dialog/AddCustomBadgeDialog.vue +318 -161
  259. package/dialog/DeactivateDriverDialog.vue +137 -0
  260. package/dialog/RollbackWorkloadDialog.vue +2 -2
  261. package/dialog/RotateCertificatesDialog.vue +0 -21
  262. package/dialog/ScaleMachineDownDialog.vue +34 -17
  263. package/directives/clean-html.js +15 -0
  264. package/directives/clean-tooltip.js +32 -0
  265. package/directives/focus.js +41 -0
  266. package/directives/int-number.js +21 -0
  267. package/directives/positive-int-number.js +19 -0
  268. package/directives/trim-whitespace.js +19 -0
  269. package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +3 -2
  270. package/edit/__tests__/kontainerDriver.test.ts +107 -0
  271. package/edit/__tests__/management.cattle.io.clusterroletemplatebinding.test.ts +12 -1
  272. package/edit/__tests__/management.cattle.io.setting.test.ts +2 -1
  273. package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +2 -3
  274. package/edit/__tests__/nodeDriver.test.ts +107 -0
  275. package/edit/__tests__/service.test.ts +85 -0
  276. package/edit/__tests__/ui.cattle.io.navlink.test.ts +3 -1
  277. package/edit/auth/AuthProviderWarningBanners.vue +34 -0
  278. package/edit/auth/__tests__/AuthProviderWarningBanners.test.ts +19 -0
  279. package/edit/auth/__tests__/azuread.test.ts +241 -0
  280. package/edit/auth/__tests__/oidc.test.ts +137 -0
  281. package/edit/auth/azuread.vue +133 -31
  282. package/edit/auth/github.vue +5 -17
  283. package/edit/auth/googleoauth.vue +6 -23
  284. package/edit/auth/ldap/index.vue +5 -17
  285. package/edit/auth/oidc.vue +143 -42
  286. package/edit/auth/saml.vue +5 -14
  287. package/edit/catalog.cattle.io.clusterrepo.vue +177 -9
  288. package/edit/cis.cattle.io.clusterscan.vue +5 -2
  289. package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
  290. package/edit/cloudcredential.vue +28 -4
  291. package/edit/configmap.vue +10 -4
  292. package/edit/fleet.cattle.io.gitrepo.vue +3 -1
  293. package/edit/helm.cattle.io.projecthelmchart.vue +29 -19
  294. package/edit/kontainerDriver.vue +65 -0
  295. package/edit/logging-flow/Match.vue +10 -9
  296. package/edit/logging-flow/index.vue +4 -19
  297. package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +232 -2
  298. package/edit/logging.banzaicloud.io.output/index.vue +43 -26
  299. package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +3 -3
  300. package/edit/management.cattle.io.project.vue +3 -53
  301. package/edit/management.cattle.io.setting.vue +52 -2
  302. package/edit/management.cattle.io.user.vue +2 -1
  303. package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +10 -7
  304. package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +21 -16
  305. package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +1 -1
  306. package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +2 -2
  307. package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +1 -1
  308. package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +15 -3
  309. package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +4 -1
  310. package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +2 -0
  311. package/edit/monitoring.coreos.com.prometheusrule/index.vue +2 -0
  312. package/edit/networking.k8s.io.ingress/Rules.vue +8 -3
  313. package/edit/networking.k8s.io.ingress/index.vue +64 -8
  314. package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -0
  315. package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +6 -2
  316. package/edit/networking.k8s.io.networkpolicy/__tests__/{PolicyRuleTarget.spec.ts → PolicyRuleTarget.test.ts} +46 -7
  317. package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → selectors.test.ts} +1 -1
  318. package/edit/networking.k8s.io.networkpolicy/index.vue +2 -0
  319. package/edit/nodeDriver.vue +65 -0
  320. package/edit/persistentvolume/index.vue +2 -2
  321. package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +33 -16
  322. package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +276 -0
  323. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
  324. package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +3 -0
  325. package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
  326. package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
  327. package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
  328. package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +77 -13
  329. package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +391 -0
  330. package/edit/provisioning.cattle.io.cluster/import.vue +4 -4
  331. package/edit/provisioning.cattle.io.cluster/index.vue +126 -51
  332. package/edit/provisioning.cattle.io.cluster/rke2.vue +325 -791
  333. package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
  334. package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +217 -0
  335. package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +123 -129
  336. package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
  337. package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
  338. package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +1 -0
  339. package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
  340. package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +190 -0
  341. package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +3 -0
  342. package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +148 -0
  343. package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
  344. package/edit/resources.cattle.io.backup.vue +139 -124
  345. package/edit/resources.cattle.io.restore.vue +146 -126
  346. package/edit/service.vue +13 -0
  347. package/edit/serviceaccount.vue +46 -4
  348. package/edit/token.vue +3 -1
  349. package/edit/workload/Upgrading.vue +3 -2
  350. package/edit/workload/__tests__/Job.test.ts +1 -3
  351. package/edit/workload/__tests__/Upgrading.test.ts +2 -2
  352. package/edit/workload/index.vue +2 -1
  353. package/edit/workload/mixins/workload.js +35 -2
  354. package/edit/workload/storage/emptyDir.vue +2 -2
  355. package/initialize/App.vue +75 -0
  356. package/initialize/app-extended.js +128 -0
  357. package/initialize/entry-helpers.js +546 -0
  358. package/initialize/entry.js +32 -0
  359. package/initialize/install-components.js +23 -0
  360. package/initialize/install-directives.js +59 -0
  361. package/initialize/install-plugins.js +123 -0
  362. package/list/__tests__/workload.test.ts +1 -1
  363. package/list/catalog.cattle.io.app.vue +1 -0
  364. package/list/cis.cattle.io.clusterscan.vue +16 -10
  365. package/list/group.principal.vue +2 -2
  366. package/list/management.cattle.io.feature.vue +16 -16
  367. package/list/management.cattle.io.setting.vue +1 -0
  368. package/list/management.cattle.io.user.vue +13 -4
  369. package/list/networking.k8s.io.ingress.vue +36 -0
  370. package/list/node.vue +212 -73
  371. package/list/provisioning.cattle.io.cluster.vue +17 -4
  372. package/list/ui.cattle.io.navlink.vue +2 -2
  373. package/list/workload.vue +22 -0
  374. package/machine-config/__tests__/vmwarevsphere-pool-config-merge.test.ts +30 -0
  375. package/machine-config/__tests__/vmwarevsphere.test.ts +1 -3
  376. package/machine-config/amazonec2.vue +1 -1
  377. package/machine-config/azure.vue +2 -1
  378. package/machine-config/generic.vue +11 -15
  379. package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
  380. package/machine-config/vmwarevsphere.vue +31 -27
  381. package/middleware/authenticated.js +23 -399
  382. package/mixins/__tests__/chart.test.ts +48 -6
  383. package/mixins/__tests__/create-edit-view.test.ts +2 -3
  384. package/mixins/auth-config.js +5 -9
  385. package/mixins/brand.js +102 -96
  386. package/mixins/chart.js +27 -13
  387. package/mixins/create-edit-view/index.js +2 -2
  388. package/mixins/fetch.client.js +42 -48
  389. package/mixins/labeled-form-element.ts +27 -2
  390. package/mixins/page-actions.js +7 -5
  391. package/mixins/resource-fetch-api-pagination.js +304 -0
  392. package/mixins/resource-fetch-namespaced.js +1 -1
  393. package/mixins/resource-fetch.js +46 -5
  394. package/models/__tests__/cluster.test.ts +44 -0
  395. package/models/__tests__/fleet.cattle.io.cluster.test.ts +36 -0
  396. package/models/__tests__/management.cattle.io.cluster.test.ts +23 -0
  397. package/models/__tests__/management.cattle.io.node.ts +85 -0
  398. package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
  399. package/models/__tests__/namespace.test.ts +49 -9
  400. package/models/__tests__/provisioning.cattle.io.cluster.test.ts +241 -0
  401. package/models/__tests__/schema.tests.ts +24 -0
  402. package/models/__tests__/secret.test.ts +37 -0
  403. package/models/__tests__/steve-schema.test.ts +73 -0
  404. package/models/__tests__/storage.k8s.io.storageclass.test.ts +22 -0
  405. package/models/__tests__/workload.test.ts +91 -0
  406. package/models/catalog.cattle.io.app.js +8 -0
  407. package/models/catalog.cattle.io.clusterrepo.js +9 -1
  408. package/models/catalog.cattle.io.uiplugin.js +7 -8
  409. package/models/cis.cattle.io.clusterscan.js +29 -8
  410. package/models/cloudcredential.js +9 -1
  411. package/models/cluster/node.js +8 -4
  412. package/models/cluster/schema.js +6 -0
  413. package/models/cluster.js +33 -0
  414. package/models/cluster.x-k8s.io.machine.js +1 -1
  415. package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
  416. package/models/driver.js +63 -0
  417. package/models/fleet.cattle.io.cluster.js +27 -11
  418. package/models/fleet.cattle.io.gitrepo.js +66 -13
  419. package/models/helm.cattle.io.projecthelmchart.js +1 -1
  420. package/models/kontainerdriver.js +85 -0
  421. package/models/management/schema.js +6 -0
  422. package/models/management.cattle.io.authconfig.js +3 -2
  423. package/models/management.cattle.io.cluster.js +16 -7
  424. package/models/management.cattle.io.globalrole.js +2 -0
  425. package/models/management.cattle.io.kontainerdriver.js +1 -0
  426. package/models/management.cattle.io.node.js +18 -14
  427. package/models/management.cattle.io.nodepool.js +17 -0
  428. package/models/management.cattle.io.project.js +0 -36
  429. package/models/management.cattle.io.setting.js +11 -7
  430. package/models/management.cattle.io.user.js +2 -2
  431. package/models/monitoring.coreos.com.receiver.js +3 -1
  432. package/models/monitoring.coreos.com.route.js +1 -1
  433. package/models/namespace.js +1 -1
  434. package/models/networking.k8s.io.ingress.js +2 -1
  435. package/models/nodedriver.js +85 -0
  436. package/models/pod.js +20 -0
  437. package/models/provisioning.cattle.io.cluster.js +125 -10
  438. package/models/schema.js +28 -7
  439. package/models/secret.js +126 -18
  440. package/models/service.js +2 -0
  441. package/models/steve-schema.ts +254 -0
  442. package/models/storage.k8s.io.storageclass.js +1 -1
  443. package/models/workload.js +17 -0
  444. package/models/workload.service.js +18 -0
  445. package/package.json +18 -14
  446. package/pages/about.vue +12 -6
  447. package/pages/account/create-key.vue +0 -1
  448. package/pages/account/index.vue +7 -3
  449. package/pages/auth/login.vue +106 -103
  450. package/pages/auth/logout.vue +2 -4
  451. package/pages/auth/setup.vue +92 -66
  452. package/pages/auth/verify.vue +30 -24
  453. package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +2 -17
  454. package/pages/c/_cluster/apps/charts/chart.vue +54 -9
  455. package/pages/c/_cluster/apps/charts/index.vue +99 -69
  456. package/pages/c/_cluster/apps/charts/install.helpers.js +2 -13
  457. package/pages/c/_cluster/apps/charts/install.vue +12 -11
  458. package/pages/c/_cluster/auth/config/_id.vue +0 -6
  459. package/pages/c/_cluster/auth/config/index.vue +15 -9
  460. package/pages/c/_cluster/auth/roles/index.vue +8 -10
  461. package/pages/c/_cluster/ecm/index.vue +0 -2
  462. package/pages/c/_cluster/explorer/ConfigBadge.vue +13 -8
  463. package/pages/c/_cluster/explorer/EventsTable.vue +18 -0
  464. package/pages/c/_cluster/explorer/__tests__/index.test.ts +181 -0
  465. package/pages/c/_cluster/explorer/index.vue +253 -91
  466. package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
  467. package/pages/c/_cluster/explorer/tools/index.vue +10 -6
  468. package/pages/c/_cluster/fleet/index.vue +89 -94
  469. package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +89 -0
  470. package/pages/c/_cluster/longhorn/index.vue +52 -17
  471. package/pages/c/_cluster/manager/cloudCredential/index.vue +18 -25
  472. package/pages/c/_cluster/manager/drivers/kontainerDriver/_id.vue +12 -0
  473. package/pages/c/_cluster/manager/drivers/kontainerDriver/create.vue +15 -0
  474. package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +91 -0
  475. package/pages/c/_cluster/manager/drivers/nodeDriver/_id.vue +12 -0
  476. package/pages/c/_cluster/manager/drivers/nodeDriver/create.vue +15 -0
  477. package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +60 -0
  478. package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
  479. package/pages/c/_cluster/manager/pages/_page.vue +4 -5
  480. package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
  481. package/pages/c/_cluster/monitoring/route-receiver/index.vue +2 -2
  482. package/pages/c/_cluster/neuvector/index.vue +1 -0
  483. package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
  484. package/pages/c/_cluster/settings/banners.vue +86 -10
  485. package/pages/c/_cluster/settings/brand.vue +261 -38
  486. package/pages/c/_cluster/settings/index.vue +4 -6
  487. package/pages/c/_cluster/settings/links.vue +3 -2
  488. package/pages/c/_cluster/settings/performance.vue +71 -3
  489. package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
  490. package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +12 -8
  491. package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
  492. package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
  493. package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
  494. package/pages/c/_cluster/uiplugins/InstallDialog.vue +55 -19
  495. package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +36 -301
  496. package/pages/c/_cluster/uiplugins/UninstallDialog.vue +14 -6
  497. package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +52 -106
  498. package/pages/c/_cluster/uiplugins/index.vue +38 -54
  499. package/pages/diagnostic.vue +2 -2
  500. package/pages/fail-whale.vue +103 -42
  501. package/pages/home.vue +81 -24
  502. package/pages/prefs.vue +8 -4
  503. package/pages/support/index.vue +14 -10
  504. package/pkg/auto-import.js +1 -1
  505. package/plugins/axios.js +0 -36
  506. package/plugins/back-button.js +3 -5
  507. package/plugins/clean-html-directive.js +5 -30
  508. package/plugins/clean-html.js +53 -0
  509. package/plugins/clean-tooltip-directive.js +6 -31
  510. package/plugins/codemirror-loader.js +1 -1
  511. package/plugins/codemirror.js +41 -9
  512. package/plugins/dashboard-store/__tests__/mutations.test.ts +389 -0
  513. package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
  514. package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
  515. package/plugins/dashboard-store/actions.js +132 -25
  516. package/plugins/dashboard-store/classify.js +1 -18
  517. package/plugins/dashboard-store/getters.js +154 -44
  518. package/plugins/dashboard-store/index.js +0 -111
  519. package/plugins/dashboard-store/mutations.js +150 -52
  520. package/plugins/dashboard-store/resource-class.js +77 -127
  521. package/plugins/directives.js +6 -39
  522. package/plugins/ember-cookie.js +13 -0
  523. package/plugins/global-formatters.js +26 -5
  524. package/plugins/i18n.js +89 -55
  525. package/plugins/int-number.js +6 -20
  526. package/plugins/plugin.js +3 -3
  527. package/plugins/positive-int-number.js +6 -17
  528. package/plugins/steve/__tests__/{getters.spec.ts → getters.test.ts} +81 -10
  529. package/plugins/steve/__tests__/mutations.test.ts +49 -0
  530. package/plugins/steve/__tests__/resource-utils.test.ts +159 -0
  531. package/plugins/steve/__tests__/steve-class.test.ts +59 -0
  532. package/plugins/steve/__tests__/subscribe.spec.ts +4 -1
  533. package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
  534. package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
  535. package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
  536. package/plugins/steve/actions.js +3 -38
  537. package/plugins/steve/getters.js +164 -61
  538. package/plugins/steve/hybrid-class.js +5 -1
  539. package/plugins/steve/mutations.js +24 -3
  540. package/plugins/steve/norman-class.js +142 -2
  541. package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
  542. package/plugins/steve/resource-utils.ts +38 -0
  543. package/plugins/steve/schema.d.ts +22 -0
  544. package/plugins/steve/steve-class.js +22 -0
  545. package/plugins/steve/steve-pagination-utils.ts +368 -0
  546. package/plugins/steve/subscribe.js +17 -76
  547. package/plugins/trim-whitespace.js +6 -34
  548. package/plugins/vue-js-modal.js +1 -1
  549. package/promptRemove/pod.vue +15 -7
  550. package/public/index.html +1 -0
  551. package/rancher-components/Accordion/Accordion.test.ts +45 -0
  552. package/rancher-components/Accordion/Accordion.vue +86 -0
  553. package/rancher-components/Accordion/index.ts +1 -0
  554. package/rancher-components/BadgeState/BadgeState.vue +3 -3
  555. package/rancher-components/Banner/Banner.test.ts +1 -5
  556. package/rancher-components/Banner/Banner.vue +2 -2
  557. package/rancher-components/Card/Card.vue +4 -4
  558. package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
  559. package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +18 -1
  560. package/rancher-components/Form/LabeledInput/LabeledInput.vue +57 -24
  561. package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
  562. package/rancher-components/Form/Radio/RadioButton.vue +13 -7
  563. package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
  564. package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
  565. package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
  566. package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
  567. package/rancher-components/StringList/StringList.test.ts +270 -0
  568. package/rancher-components/StringList/StringList.vue +65 -26
  569. package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +69 -0
  570. package/scripts/clean +1 -1
  571. package/scripts/extension/bundle +19 -7
  572. package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +11 -0
  573. package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -0
  574. package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
  575. package/scripts/extension/helm/package/Dockerfile +1 -1
  576. package/scripts/extension/helm/scripts/package +11 -3
  577. package/scripts/extension/helm/scripts/patch +27 -0
  578. package/scripts/extension/parse-tag-name +4 -4
  579. package/scripts/extension/publish +25 -14
  580. package/scripts/publish-shell.sh +11 -1
  581. package/scripts/serve-pkgs +0 -2
  582. package/scripts/test-plugins-build.sh +87 -11
  583. package/scripts/vue-migrate.js +683 -0
  584. package/server/har-file.js +183 -0
  585. package/store/__tests__/catalog.test.ts +224 -0
  586. package/store/__tests__/type-map.test.ts +1122 -0
  587. package/store/auth.js +23 -4
  588. package/store/aws.js +53 -6
  589. package/store/catalog.js +22 -6
  590. package/store/cru-resource.ts +26 -0
  591. package/store/customisation.js +35 -0
  592. package/store/features.js +7 -4
  593. package/store/i18n.js +11 -0
  594. package/store/index.js +140 -49
  595. package/store/plugins.js +8 -4
  596. package/store/prefs.js +33 -38
  597. package/store/type-map.js +288 -213
  598. package/store/type-map.utils.ts +226 -0
  599. package/tsconfig.json +34 -9
  600. package/tsconfig.paths.json +21 -0
  601. package/types/components/labeledSelect.ts +50 -0
  602. package/types/resources/settings.d.ts +32 -0
  603. package/types/{userPreferences.d.ts → resources/userPreferences.d.ts} +0 -1
  604. package/types/shell/index.d.ts +1045 -770
  605. package/types/store/dashboard-store.types.ts +42 -0
  606. package/types/store/pagination.types.ts +457 -0
  607. package/types/store/type-map.ts +30 -0
  608. package/types/store/vuex.d.ts +9 -0
  609. package/types/vue-shim.d.ts +51 -0
  610. package/utils/__tests__/cluster.test.ts +20 -18
  611. package/utils/__tests__/create-yaml.test.ts +359 -2
  612. package/utils/__tests__/kontainer.test.ts +180 -0
  613. package/utils/__tests__/pod-security-admission.test.ts +1 -1
  614. package/utils/alertmanagerconfig.js +19 -0
  615. package/utils/array.ts +40 -1
  616. package/utils/async.ts +2 -0
  617. package/utils/auth.js +152 -4
  618. package/utils/axios.js +2 -21
  619. package/utils/azure.js +24 -0
  620. package/utils/banners.js +103 -0
  621. package/utils/clipboard.js +5 -0
  622. package/utils/cluster.js +1 -1
  623. package/utils/config.js +4 -0
  624. package/utils/create-yaml.js +59 -28
  625. package/utils/custom-validators.js +0 -2
  626. package/utils/error.js +41 -1
  627. package/utils/formatter.js +5 -3
  628. package/utils/git.ts +1 -1
  629. package/utils/install-redirect.js +1 -1
  630. package/utils/kontainer.ts +190 -0
  631. package/utils/object.js +24 -0
  632. package/utils/pagination-utils.ts +154 -0
  633. package/utils/pod-security-admission.ts +1 -1
  634. package/utils/router.js +86 -0
  635. package/utils/settings.ts +46 -0
  636. package/utils/time.js +2 -1
  637. package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
  638. package/utils/url.ts +1 -1
  639. package/utils/validators/formRules/__tests__/index.test.ts +70 -4
  640. package/utils/validators/formRules/index.ts +15 -9
  641. package/utils/validators/index.js +1 -0
  642. package/utils/validators/setting.js +6 -10
  643. package/utils/version.js +2 -1
  644. package/vue.config.js +377 -401
  645. package/.DS_Store +0 -0
  646. package/assets/images/providers/aks-black.svg +0 -28
  647. package/assets/images/providers/aks.svg +0 -31
  648. package/assets/styles/vendor/vue-js-modal.scss +0 -16
  649. package/components/ChartPsp.vue +0 -76
  650. package/components/EventsTable.vue +0 -67
  651. package/components/TabbedLinks/index.vue +0 -94
  652. package/components/__tests__/ChartPsp.test.ts +0 -75
  653. package/components/formatter/__tests__/ClusterProvider.test.ts +0 -28
  654. package/components/nuxt/nuxt-link.server.js +0 -16
  655. package/components/nuxt/nuxt.js +0 -101
  656. package/config/router.js +0 -408
  657. package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -237
  658. package/initialize/App.js +0 -198
  659. package/initialize/client.js +0 -875
  660. package/initialize/index.js +0 -364
  661. package/initialize/layouts.ts +0 -26
  662. package/middleware/i18n.js +0 -10
  663. package/middleware/unauthenticated.js +0 -22
  664. package/mixins/fetch.server.js +0 -73
  665. package/pages/c/_cluster/apps/index.vue +0 -17
  666. package/pages/c/_cluster/auth/index.vue +0 -19
  667. package/pages/c/_cluster/index.vue +0 -17
  668. package/pages/c/_cluster/legacy/index.vue +0 -22
  669. package/pages/c/_cluster/manager/index.vue +0 -22
  670. package/pages/c/_cluster/mcapps/index.vue +0 -21
  671. package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +0 -232
  672. package/pages/c/index.vue +0 -9
  673. package/pages/rio/mesh.vue +0 -508
  674. package/plugins/dashboard-store/__tests__/mutations.spec.ts +0 -406
  675. package/plugins/dashboard-store/rehydrate-all.js +0 -44
  676. package/plugins/portal-vue.js +0 -4
  677. package/plugins/portal.js +0 -4
  678. package/plugins/resize.js +0 -5
  679. package/plugins/shortkey.js +0 -4
  680. package/plugins/tooltip.js +0 -4
  681. package/plugins/transitions.js +0 -4
  682. package/plugins/v-select.js +0 -4
  683. package/plugins/vue-clipboard2.js +0 -4
  684. package/tsconfig.default.json +0 -46
  685. package/utils/group.js +0 -70
  686. package/utils/nuxt.js +0 -659
  687. package/utils/router.scrollBehavior.js +0 -80
  688. /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
  689. /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
  690. /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
  691. /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
  692. /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
  693. /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
  694. /package/models/__tests__/{node.ts → node.test.ts} +0 -0
  695. /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
  696. /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
  697. /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
  698. /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
  699. /package/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
@@ -8,11 +8,11 @@ import { normalizeType } from './normalize';
8
8
  import garbageCollect from '@shell/utils/gc/gc';
9
9
  import { addSchemaIndexFields } from '@shell/plugins/steve/schema.utils';
10
10
  import { addParam } from '@shell/utils/url';
11
+ import { conditionalDepaginate } from '@shell/store/type-map.utils';
11
12
 
12
13
  export const _ALL = 'all';
13
14
  export const _MERGE = 'merge';
14
15
  export const _MULTI = 'multi';
15
- export const _ALL_IF_AUTHED = 'allIfAuthed';
16
16
  export const _NONE = 'none';
17
17
 
18
18
  const SCHEMA_CHECK_RETRIES = 15;
@@ -72,6 +72,10 @@ export async function loadSchemas(ctx, watch = true) {
72
72
  return all;
73
73
  }
74
74
 
75
+ const findAllGetter = (getters, type, opt) => {
76
+ return opt.namespaced ? getters.matching(type, null, opt.namespaced, { skipSelector: true }) : getters.all(type);
77
+ };
78
+
75
79
  export default {
76
80
  request() {
77
81
  throw new Error('Not Implemented');
@@ -120,7 +124,7 @@ export default {
120
124
  }
121
125
  });
122
126
  } else {
123
- // We have everything!
127
+ // We have everything!
124
128
  if (opt.hasManualRefresh) {
125
129
  dispatch('resource-fetch/updateManualRefreshIsLoading', false, { root: true });
126
130
  }
@@ -139,6 +143,11 @@ export default {
139
143
  }
140
144
  },
141
145
 
146
+ /**
147
+ *
148
+ * @param {*} ctx
149
+ * @param { {type: string, opt: ActionFindPageArgs} } opt
150
+ */
142
151
  async findAll(ctx, { type, opt }) {
143
152
  const {
144
153
  getters, commit, dispatch, rootGetters
@@ -152,7 +161,13 @@ export default {
152
161
  }
153
162
 
154
163
  // No need to request the resources if we have them already
155
- if ( opt.force !== true && (getters['haveAll'](type) || getters['haveAllNamespace'](type, opt.namespaced))) {
164
+ if (
165
+ !opt.force &&
166
+ (
167
+ getters['haveAll'](type) ||
168
+ getters['haveAllNamespace'](type, opt.namespaced)
169
+ )
170
+ ) {
156
171
  if (opt.watch !== false ) {
157
172
  const args = {
158
173
  type,
@@ -165,21 +180,13 @@ export default {
165
180
  dispatch('watch', args);
166
181
  }
167
182
 
168
- return getters.all(type);
183
+ return findAllGetter(getters, type, opt);
169
184
  }
170
185
 
171
186
  let load = (opt.load === undefined ? _ALL : opt.load);
172
187
 
173
188
  if ( opt.load === false || opt.load === _NONE ) {
174
189
  load = _NONE;
175
- } else if ( opt.load === _ALL_IF_AUTHED ) {
176
- const header = rootGetters['auth/fromHeader'];
177
-
178
- if ( `${ header }` === 'true' || `${ header }` === 'none' ) {
179
- load = _ALL;
180
- } else {
181
- load = _MULTI;
182
- }
183
190
  }
184
191
 
185
192
  const typeOptions = rootGetters['type-map/optionsFor'](type);
@@ -188,7 +195,7 @@ export default {
188
195
  opt = opt || {};
189
196
  opt.url = getters.urlFor(type, null, opt);
190
197
  opt.stream = opt.stream !== false && load !== _NONE;
191
- opt.depaginate = typeOptions?.depaginate;
198
+ opt.depaginate = conditionalDepaginate(typeOptions?.depaginate, { ctx, args: { type, opt } });
192
199
 
193
200
  let skipHaveAll = false;
194
201
 
@@ -196,6 +203,8 @@ export default {
196
203
  // on for a limit of 100, to quickly show data
197
204
  // another one with 1st page of the subset of the resource we are fetching
198
205
  // the default is 4 pages, but it can be changed on mixin/resource-fetch.js
206
+ let pageFetchOpts;
207
+
199
208
  if (opt.incremental) {
200
209
  commit('incrementLoadCounter', type);
201
210
 
@@ -203,7 +212,7 @@ export default {
203
212
  dispatch('resource-fetch/updateManualRefreshIsLoading', true, { root: true });
204
213
  }
205
214
 
206
- const pageFetchOpts = {
215
+ pageFetchOpts = {
207
216
  ...opt,
208
217
  url: addParam(opt.url, 'limit', `${ opt.incremental }`),
209
218
  };
@@ -219,8 +228,6 @@ export default {
219
228
  if (opt.force) {
220
229
  commit('forgetType', type);
221
230
  }
222
-
223
- dispatch('loadDataPage', { type, opt: pageFetchOpts });
224
231
  }
225
232
 
226
233
  let streamStarted = false;
@@ -309,12 +316,25 @@ export default {
309
316
  commit('loadAll', {
310
317
  ctx,
311
318
  type,
312
- data: out.data,
313
- revision: out.revision,
319
+ data: out.data,
320
+ revision: out.revision,
314
321
  skipHaveAll,
315
- namespace: opt.namespaced
322
+ namespace: opt.namespaced,
323
+ pagination: opt.pagination ? {
324
+ request: opt.pagination,
325
+ result: {
326
+ count: out.count,
327
+ pages: out.pages,
328
+ timestamp: new Date().getTime()
329
+ }
330
+ } : undefined,
316
331
  });
317
332
  }
333
+
334
+ if (opt.incremental) {
335
+ // This needs to come after the loadAll (which resets state) so supplements via loadDataPage aren't lost
336
+ dispatch('loadDataPage', { type, opt: pageFetchOpts });
337
+ }
318
338
  }
319
339
 
320
340
  // ToDo: SM if we start a "bigger" watch (such as watch without a namespace vs a watch with a namespace), we should stop the stop the "smaller" watch so we don't have duplicate events coming back
@@ -330,7 +350,7 @@ export default {
330
350
  dispatch('watch', args);
331
351
  }
332
352
 
333
- const all = getters.all(type);
353
+ const all = findAllGetter(getters, type, opt);
334
354
 
335
355
  if (!opt.incremental && opt.hasManualRefresh) {
336
356
  dispatch('resource-fetch/updateManualRefreshIsLoading', false, { root: true });
@@ -341,6 +361,81 @@ export default {
341
361
  return all;
342
362
  },
343
363
 
364
+ /**
365
+ *
366
+ * @param {*} ctx
367
+ * @param { {type: string, opt: FindPageOpt} } opt
368
+ */
369
+ async findPage(ctx, { type, opt }) {
370
+ const { getters, commit, dispatch } = ctx;
371
+
372
+ opt = opt || {};
373
+
374
+ if (!opt.pagination) {
375
+ console.error('Attempting to find a page for a resource but no pagination settings supplied', type); // eslint-disable-line no-console
376
+
377
+ return;
378
+ }
379
+
380
+ type = getters.normalizeType(type);
381
+
382
+ if ( !getters.typeRegistered(type) ) {
383
+ commit('registerType', type);
384
+ }
385
+
386
+ // No need to request the resources if we have them already
387
+ if (!opt.force && getters['havePaginatedPage'](type, opt)) {
388
+ return findAllGetter(getters, type, opt);
389
+ }
390
+
391
+ console.log(`Find Page: [${ ctx.state.config.namespace }] ${ type }. Page: ${ opt.pagination.page }. Size: ${ opt.pagination.pageSize }`); // eslint-disable-line no-console
392
+ opt = opt || {};
393
+ opt.url = getters.urlFor(type, null, opt);
394
+
395
+ let out;
396
+
397
+ try {
398
+ if (opt.hasManualRefresh) {
399
+ dispatch('resource-fetch/updateManualRefreshIsLoading', true, { root: true });
400
+ }
401
+
402
+ out = await dispatch('request', { opt, type });
403
+ } catch (e) {
404
+ if (opt.hasManualRefresh) {
405
+ dispatch('resource-fetch/updateManualRefreshIsLoading', false, { root: true });
406
+ }
407
+
408
+ return Promise.reject(e);
409
+ }
410
+
411
+ commit('loadPage', {
412
+ ctx,
413
+ type,
414
+ data: out.data,
415
+ pagination: opt.pagination ? {
416
+ request: {
417
+ namespace: opt.namespaced,
418
+ pagination: opt.pagination
419
+ },
420
+ result: {
421
+ count: out.count,
422
+ pages: out.pages,
423
+ timestamp: new Date().getTime()
424
+ }
425
+ } : undefined,
426
+ });
427
+
428
+ const all = findAllGetter(getters, type, opt);
429
+
430
+ if (opt.hasManualRefresh) {
431
+ dispatch('resource-fetch/updateManualRefreshIsLoading', false, { root: true });
432
+ }
433
+
434
+ garbageCollect.gcUpdateLastAccessed(ctx, type);
435
+
436
+ return all;
437
+ },
438
+
344
439
  async findMatching(ctx, {
345
440
  type,
346
441
  selector,
@@ -367,7 +462,7 @@ export default {
367
462
  opt = opt || {};
368
463
  opt.labelSelector = selector;
369
464
  opt.url = getters.urlFor(type, null, opt);
370
- opt.depaginate = typeOptions?.depaginate;
465
+ opt.depaginate = conditionalDepaginate(typeOptions?.depaginate, { ctx, args: { type, opt } });
371
466
 
372
467
  const res = await dispatch('request', { opt, type });
373
468
 
@@ -439,7 +534,7 @@ export default {
439
534
  const watchMsg = {
440
535
  type,
441
536
  id,
442
- // Although not used by sockets, we need this for when resyncWatch calls find.... which needs namespace to construct the url
537
+ // Although not used by sockets, we need this for when resyncWatch calls find... which needs namespace to construct the url
443
538
  namespace: opt.namespaced,
444
539
  // Override the revision. Used in cases where we need to avoid using the resource's own revision which would be `too old`.
445
540
  // For the above case opt.revision will be `null`. If left as `undefined` the subscribe mechanism will try to determine a revision
@@ -544,8 +639,18 @@ export default {
544
639
  return data.map((d) => classify(ctx, d));
545
640
  },
546
641
 
547
- createPopulated(ctx, userData) {
548
- const data = ctx.getters['defaultFor'](userData.type);
642
+ async createPopulated(ctx, userData) {
643
+ let data = null;
644
+
645
+ const schema = ctx.getters['schemaFor'](userData.type);
646
+
647
+ if (schema) {
648
+ if (schema.fetchResourceFields) {
649
+ // fetch resourceFields for createYaml
650
+ await schema.fetchResourceFields();
651
+ }
652
+ data = ctx.getters['defaultFor'](userData.type, schema);
653
+ }
549
654
 
550
655
  merge(data, userData);
551
656
 
@@ -614,7 +719,9 @@ export default {
614
719
  let schema = null;
615
720
 
616
721
  while (!schema && tries > 0) {
617
- schema = getters['schemaFor'](type);
722
+ // Schemas may not have been loaded, so don't error out if they are not loaded yet
723
+ // the wait here will wait for schemas to load and then for the desired schema to be available
724
+ schema = getters['schemaFor'](type, false, false);
618
725
 
619
726
  if (!schema) {
620
727
  if (tries === RETRY_LOG) {
@@ -12,24 +12,7 @@ export function classify(ctx, obj, isClone = false) {
12
12
 
13
13
  const customModel = ctx.getters['classify'](obj);
14
14
 
15
- const out = new customModel(obj, ctx, (process.server ? ctx.state.config.namespace : null), isClone);
16
-
17
- if ( process.server ) {
18
- Object.defineProperty(obj, '__rehydrate', {
19
- value: ctx.state.config.namespace,
20
- enumerable: true,
21
- configurable: true
22
- });
23
-
24
- if ( isClone ) {
25
- Object.defineProperty(obj, '__clone', {
26
- value: true,
27
- enumerable: true,
28
- configurable: true,
29
- writable: true
30
- });
31
- }
32
- }
15
+ const out = new customModel(obj, ctx, null, isClone);
33
16
 
34
17
  return out;
35
18
  }
@@ -1,23 +1,24 @@
1
1
 
2
- import { SCHEMA } from '@shell/config/types';
2
+ import { SCHEMA, COUNT } from '@shell/config/types';
3
3
 
4
4
  import { matches } from '@shell/utils/selector';
5
5
  import { typeMunge, typeRef, SIMPLE_TYPES } from '@shell/utils/create-yaml';
6
- import { splitObjectPath } from '@shell/utils/string';
7
- import { parseType } from '@shell/models/schema';
8
6
  import Resource from '@shell/plugins/dashboard-store/resource-class';
9
7
  import mutations from './mutations';
10
8
  import { keyFieldFor, normalizeType } from './normalize';
11
9
  import { lookup } from './model-loader';
12
10
  import garbageCollect from '@shell/utils/gc/gc';
11
+ import paginationUtils from '@shell/utils/pagination-utils';
13
12
 
14
13
  export const urlFor = (state, getters) => (type, id, opt) => {
15
14
  opt = opt || {};
16
15
  type = getters.normalizeType(type);
17
16
  let url = opt.url;
18
17
 
18
+ let schema;
19
+
19
20
  if ( !url ) {
20
- const schema = getters.schemaFor(type);
21
+ schema = getters.schemaFor(type);
21
22
 
22
23
  if ( !schema ) {
23
24
  throw new Error(`Unknown schema for type: ${ type }`);
@@ -40,13 +41,39 @@ export const urlFor = (state, getters) => (type, id, opt) => {
40
41
  url = `${ baseUrl }/${ url }`;
41
42
  }
42
43
 
43
- url = getters.urlOptions(url, opt);
44
+ url = getters.urlOptions(url, opt, schema);
44
45
 
45
46
  return url;
46
47
  };
47
48
 
49
+ /**
50
+ * Find the number of resources given
51
+ * - if the type is namespaced
52
+ * - if there are any counts per namespace
53
+ * - if there are no namespaces
54
+ * - if there is no total count
55
+ */
56
+ function matchingCounts(typeObj, namespaces) {
57
+ // That was easy
58
+ if ( !typeObj.namespaced || !typeObj.byNamespace || namespaces === null || typeObj.count === null) {
59
+ return typeObj.count;
60
+ }
61
+
62
+ let out = 0;
63
+
64
+ // Otherwise start with 0 and count up
65
+ for ( const namespace of namespaces ) {
66
+ out += typeObj.byNamespace[namespace]?.count || 0;
67
+ }
68
+
69
+ return out;
70
+ }
71
+
48
72
  export default {
49
73
 
74
+ /**
75
+ * Get all entries in the store. This might not mean all entries of this type
76
+ */
50
77
  all: (state, getters, rootState) => (type) => {
51
78
  type = getters.normalizeType(type);
52
79
 
@@ -64,19 +91,24 @@ export default {
64
91
  return state.types[type].list;
65
92
  },
66
93
 
67
- matching: (state, getters, rootState) => (type, selector, namespace) => {
68
- let all = getters['all'](type);
94
+ matching: (state, getters, rootState) => (type, selector, namespace, config = { skipSelector: false }) => {
95
+ let matching = getters['all'](type);
69
96
 
70
97
  // Filter first by namespace if one is provided, since this is efficient
71
- if (namespace) {
72
- all = all.filter((obj) => obj.namespace === namespace);
98
+ if (namespace && typeof namespace === 'string') {
99
+ matching = matching.filter((obj) => obj.namespace === namespace);
73
100
  }
74
101
 
75
102
  garbageCollect.gcUpdateLastAccessed({
76
103
  state, getters, rootState
77
104
  }, type);
78
105
 
79
- return all.filter((obj) => {
106
+ // Looks like a falsy selector is a thing, so if we're not interested in filtering by the selector... explicitly avoid it
107
+ if (config.skipSelector) {
108
+ return matching;
109
+ }
110
+
111
+ return matching.filter((obj) => {
80
112
  return matches(obj, selector);
81
113
  });
82
114
  },
@@ -94,30 +126,13 @@ export default {
94
126
  }
95
127
  },
96
128
 
129
+ /**
130
+ * Checks a schema for the given path
131
+ *
132
+ * Given that schema are primarily a rancher thing most logic is in the `steve` store
133
+ */
97
134
  pathExistsInSchema: (state, getters) => (type, path) => {
98
- let schema = getters.schemaFor(type);
99
- const parts = splitObjectPath(path);
100
-
101
- while ( parts.length ) {
102
- const key = parts.shift();
103
-
104
- type = schema.resourceFields?.[key]?.type;
105
-
106
- if ( !type ) {
107
- return false;
108
- }
109
-
110
- if ( parts.length ) {
111
- type = parseType(type).pop(); // Get the main part of array[map[something]] => something
112
- schema = getters.schemaFor(type);
113
-
114
- if ( !schema ) {
115
- return false;
116
- }
117
- }
118
- }
119
-
120
- return true;
135
+ return false;
121
136
  },
122
137
 
123
138
  // @TODO resolve difference between this and schemaFor and have only one of them.
@@ -188,17 +203,28 @@ export default {
188
203
  return out;
189
204
  },
190
205
 
191
- defaultFor: (state, getters) => (type) => {
192
- const schema = getters['schemaFor'](type);
206
+ defaultFor: (state, getters) => (type, rootSchema, schemaDefinitions = null) => {
207
+ let resourceFields;
193
208
 
194
- if ( !schema ) {
195
- return null;
209
+ if (!schemaDefinitions) {
210
+ // Depth 0. Get the schemaDefinitions that will contain the child schema resourceFields for recursive calls
211
+
212
+ schemaDefinitions = rootSchema.schemaDefinitions || {}; // norman...
213
+ resourceFields = rootSchema.resourceFields || {};
214
+ } else {
215
+ if (rootSchema.requiresResourceFields) {
216
+ resourceFields = schemaDefinitions[type]?.resourceFields || {};
217
+ } else {
218
+ const schema = getters['schemaFor'](type);
219
+
220
+ resourceFields = schema?.resourceFields || {};
221
+ }
196
222
  }
197
223
 
198
224
  const out = {};
199
225
 
200
- for ( const key in schema.resourceFields ) {
201
- const field = schema.resourceFields[key];
226
+ for ( const key in resourceFields ) {
227
+ const field = resourceFields[key];
202
228
 
203
229
  if ( !field ) {
204
230
  // Not much to do here...
@@ -206,12 +232,12 @@ export default {
206
232
  }
207
233
 
208
234
  const type = typeMunge(field.type);
209
- const mapOf = typeRef('map', type);
210
- const arrayOf = typeRef('array', type);
235
+ const mapOf = typeRef('map', type, field);
236
+ const arrayOf = typeRef('array', type, field);
211
237
  const referenceTo = typeRef('reference', type);
212
238
 
213
239
  if ( mapOf || type === 'map' || type === 'json' ) {
214
- out[key] = getters.defaultFor(type);
240
+ out[key] = getters.defaultFor(type, rootSchema, schemaDefinitions);
215
241
  } else if ( arrayOf || type === 'array' ) {
216
242
  out[key] = [];
217
243
  } else if ( referenceTo ) {
@@ -223,7 +249,7 @@ export default {
223
249
  out[key] = field['default'];
224
250
  }
225
251
  } else {
226
- out[key] = getters.defaultFor(type);
252
+ out[key] = getters.defaultFor(type, rootSchema, schemaDefinitions);
227
253
  }
228
254
  }
229
255
 
@@ -274,12 +300,39 @@ export default {
274
300
  return false;
275
301
  },
276
302
 
303
+ havePaginatedPage: (state, getters) => (type, opt) => {
304
+ if (!opt.pagination) {
305
+ return false;
306
+ }
307
+
308
+ type = getters.normalizeType(type);
309
+ const entry = state.types[type];
310
+
311
+ if ( entry?.havePage ) {
312
+ const { namespace: aNamespace = undefined, pagination: aPagination } = entry.havePage.request;
313
+ const { namespace: bNamespace = undefined, pagination: bPagination } = {
314
+ namespace: opt.namespaced,
315
+ pagination: opt.pagination
316
+ };
317
+
318
+ return entry.havePage && aNamespace === bNamespace && paginationUtils.paginationEqual(aPagination, bPagination);
319
+ }
320
+
321
+ return false;
322
+ },
323
+
277
324
  haveNamespace: (state, getters) => (type) => {
278
325
  type = getters.normalizeType(type);
279
326
 
280
327
  return state.types[type]?.haveNamespace || null;
281
328
  },
282
329
 
330
+ havePage: (state, getters) => (type) => {
331
+ type = getters.normalizeType(type);
332
+
333
+ return state.types[type]?.havePage || null;
334
+ },
335
+
283
336
  haveSelector: (state, getters) => (type, selector) => {
284
337
  type = getters.normalizeType(type);
285
338
  const entry = state.types[type];
@@ -301,7 +354,7 @@ export default {
301
354
 
302
355
  urlFor,
303
356
 
304
- urlOptions: () => (url, opt) => {
357
+ urlOptions: () => (url, opt, schema) => {
305
358
  return url;
306
359
  },
307
360
 
@@ -340,5 +393,62 @@ export default {
340
393
 
341
394
  gcIgnoreTypes: () => {
342
395
  return {};
396
+ },
397
+
398
+ /**
399
+ * For the given type, and it's settings, find the number of resources associated with it
400
+ *
401
+ * This takes into account if the type is namespaced.
402
+ *
403
+ * Used in currently two places
404
+ * - Type
405
+ * - getTree
406
+ *
407
+ * @param typeObj see inners for properties. must have at least `name` (resource type)
408
+ *
409
+ */
410
+ count: (state, getters, rootState, rootGetters) => (typeObj) => {
411
+ let _typeObj = typeObj;
412
+ const { name: type, count } = _typeObj;
413
+
414
+ if (!type) {
415
+ throw new Error(`Resource type required to calc count: ${ JSON.stringify(typeObj) }`);
416
+ }
417
+
418
+ if (!count) {
419
+ const schema = getters.schemaFor(type);
420
+ const counts = getters.all(COUNT)?.[0]?.counts || {};
421
+ const count = counts[type];
422
+
423
+ // This object aligns with `Type.vue` `type`
424
+ _typeObj = {
425
+ count: count ? count.summary.count || 0 : null,
426
+ byNamespace: count ? count.namespaces : {},
427
+ revision: count ? count.revision : null,
428
+ namespaced: schema?.attributes?.namespaced
429
+ };
430
+ }
431
+
432
+ const namespaces = _typeObj?.namespaced ? Object.keys(rootGetters.activeNamespaceCache || {}) : [];
433
+
434
+ return matchingCounts(_typeObj, namespaces.length ? namespaces : null);
435
+ },
436
+
437
+ generation: (state, getters) => (type) => {
438
+ type = getters.normalizeType(type);
439
+ const entry = state.types[type];
440
+
441
+ if ( entry ) {
442
+ return entry.generation;
443
+ }
444
+
445
+ return undefined;
446
+ },
447
+
448
+ paginationEnabled: (state, getters, rootState, rootGetters) => (type = null) => {
449
+ const store = state.config.namespace;
450
+ const resource = type ? { id: type } : null;
451
+
452
+ return paginationUtils.isEnabled({ rootGetters }, { store, resource });
343
453
  }
344
454
  };