dashboard-shell-shell 3.0.2-rc.105 → 3.0.5-test.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.
- package/assets/data/aws-regions.json +3 -0
- package/assets/icons/demo.css:Zone.Identifier +0 -0
- package/assets/icons/demo_index.html:Zone.Identifier +0 -0
- package/assets/icons/iconfont.css:Zone.Identifier +0 -0
- package/assets/icons/iconfont.js:Zone.Identifier +0 -0
- package/assets/icons/iconfont.json:Zone.Identifier +0 -0
- package/assets/icons/iconfont.ttf:Zone.Identifier +0 -0
- package/assets/icons/iconfont.woff2:Zone.Identifier +0 -0
- package/assets/icons/iconfont.woff:Zone.Identifier +0 -0
- package/assets/images/icons/document.svg +3 -0
- package/assets/images/key.svg +17 -0
- package/assets/images/providers/sks.svg +1 -0
- package/assets/images/vendor/cognito.svg +1 -0
- package/assets/styles/app.scss +3 -0
- package/assets/styles/base/_basic.scss +10 -0
- package/assets/styles/base/_spacing.scss +29 -0
- package/assets/styles/base/_variables.scss +16 -10
- package/assets/styles/global/_labeled-input.scss +1 -1
- package/assets/styles/global/_layout.scss +1 -1
- package/assets/styles/themes/_dark.scss +30 -0
- package/assets/styles/themes/_light.scss +80 -2
- package/assets/translations/en-us.yaml +822 -105
- package/assets/translations/zh-hans.yaml +13 -3
- package/chart/__tests__/S3.test.ts +2 -1
- package/chart/monitoring/index.vue +1 -1
- package/cloud-credential/gcp.vue +9 -1
- package/components/ActionMenuShell.vue +3 -7
- package/components/AppModal.vue +9 -28
- package/components/AsyncButton.vue +2 -0
- package/components/BrandImage.vue +0 -21
- package/components/Certificates.vue +5 -0
- package/components/CodeMirror.vue +3 -3
- package/components/CommunityLinks.vue +3 -58
- package/components/ConfigMapSettings/Settings.vue +377 -0
- package/components/ConfigMapSettings/index.vue +354 -0
- package/components/CruResource.vue +103 -16
- package/components/DetailText.vue +61 -11
- package/components/Drawer/Chrome.vue +115 -0
- package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
- package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +106 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
- package/components/Drawer/ResourceDetailDrawer/composables.ts +53 -0
- package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
- package/components/Drawer/ResourceDetailDrawer/index.vue +123 -0
- package/components/ExplorerProjectsNamespaces.vue +46 -29
- package/components/FilterPanel.vue +156 -0
- package/components/FixedBanner.vue +19 -5
- package/components/{fleet/ForceDirectedTreeChart/index.vue → ForceDirectedTreeChart.vue} +47 -41
- package/components/GrowlManager.vue +16 -15
- package/components/IconOrSvg.vue +19 -35
- package/components/KeyValueView.vue +1 -1
- package/components/LandingPagePreference.vue +2 -0
- package/components/Loading.vue +1 -1
- package/components/LocaleSelector.vue +10 -2
- package/components/PaginatedResourceTable.vue +53 -1
- package/components/ProgressBarMulti.vue +1 -0
- package/components/PromptModal.vue +38 -7
- package/components/PromptRemove.vue +5 -1
- package/components/PromptRestore.vue +22 -44
- package/components/RelatedResources.vue +4 -12
- package/components/Resource/Detail/Additional.vue +46 -0
- package/components/Resource/Detail/Card/PodsCard/Bubble.vue +13 -0
- package/components/Resource/Detail/Card/PodsCard/composable.ts +30 -0
- package/components/Resource/Detail/Card/PodsCard/index.vue +118 -0
- package/components/Resource/Detail/Card/ResourceUsageCard/composable.ts +51 -0
- package/components/Resource/Detail/Card/ResourceUsageCard/index.vue +79 -0
- package/components/Resource/Detail/Card/Scaler.vue +89 -0
- package/components/Resource/Detail/Card/StateCard/composables.ts +112 -0
- package/components/Resource/Detail/Card/StateCard/index.vue +39 -0
- package/components/Resource/Detail/Card/VerticalGap.vue +11 -0
- package/components/Resource/Detail/Card/__tests__/Card.test.ts +36 -0
- package/components/Resource/Detail/Card/__tests__/PodsCard.test.ts +84 -0
- package/components/Resource/Detail/Card/__tests__/ResourceUsageCard.test.ts +72 -0
- package/components/Resource/Detail/Card/__tests__/Scaler.test.ts +87 -0
- package/components/Resource/Detail/Card/__tests__/StateCard.test.ts +53 -0
- package/components/Resource/Detail/Card/__tests__/VerticalGap.test.ts +14 -0
- package/components/Resource/Detail/Card/__tests__/index.test.ts +36 -0
- package/components/Resource/Detail/Card/index.vue +56 -0
- package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +19 -0
- package/components/Resource/Detail/Metadata/Annotations/composable.ts +12 -0
- package/components/Resource/Detail/Metadata/Annotations/index.vue +31 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/index.test.ts +103 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +72 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +317 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +140 -0
- package/components/Resource/Detail/Metadata/KeyValue.vue +140 -0
- package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +18 -0
- package/components/Resource/Detail/Metadata/Labels/composable.ts +12 -0
- package/components/Resource/Detail/Metadata/Labels/index.vue +31 -0
- package/components/Resource/Detail/Metadata/Rectangle.vue +34 -0
- package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +107 -0
- package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +24 -0
- package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
- package/components/Resource/Detail/Metadata/__tests__/index.test.ts +91 -0
- package/components/Resource/Detail/Metadata/composables.ts +81 -0
- package/components/Resource/Detail/Metadata/index.vue +88 -0
- package/components/Resource/Detail/Page.vue +37 -0
- package/components/Resource/Detail/PercentageBar.vue +40 -0
- package/components/Resource/Detail/ResourceRow.vue +138 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
- package/components/Resource/Detail/SpacedRow.vue +14 -0
- package/components/Resource/Detail/StatusBar.vue +59 -0
- package/components/Resource/Detail/StatusRow.vue +61 -0
- package/components/Resource/Detail/TitleBar/Title.vue +14 -0
- package/components/Resource/Detail/TitleBar/Top.vue +14 -0
- package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +17 -0
- package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +17 -0
- package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
- package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +142 -0
- package/components/Resource/Detail/TitleBar/composables.ts +46 -0
- package/components/Resource/Detail/TitleBar/index.vue +204 -0
- package/components/Resource/Detail/Top/index.vue +34 -0
- package/components/Resource/Detail/__tests__/Page.test.ts +32 -0
- package/components/Resource/Detail/composables.ts +45 -0
- package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
- package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
- package/components/ResourceDetail/Masthead/index.vue +65 -0
- package/components/ResourceDetail/Masthead/latest.vue +44 -0
- package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +0 -1
- package/components/ResourceDetail/__tests__/index.test.ts +135 -0
- package/components/ResourceDetail/index.vue +75 -575
- package/components/ResourceDetail/legacy.vue +564 -0
- package/components/ResourceList/Masthead.vue +49 -8
- package/components/ResourceList/index.vue +3 -2
- package/components/ResourceTable.vue +59 -85
- package/components/ResourceYaml.vue +15 -2
- package/components/RichTranslation.vue +106 -0
- package/components/SlideInPanelManager.vue +116 -14
- package/components/SortableTable/index.vue +14 -5
- package/components/SortableTable/paging.js +15 -16
- package/components/SortableTable/selection.js +22 -10
- package/components/StateDot/index.vue +28 -0
- package/components/StatusBadge.vue +6 -4
- package/components/SubtleLink.vue +25 -0
- package/components/Tabbed/Tab.vue +1 -1
- package/components/Tabbed/index.vue +61 -64
- package/components/Wizard.vue +16 -3
- package/components/YamlEditor.vue +1 -2
- package/components/__tests__/AsyncButton.test.ts +39 -0
- package/components/__tests__/ConfigMapSettings.test.ts +376 -0
- package/components/__tests__/CruResource.test.ts +63 -0
- package/components/__tests__/FilterPanel.test.ts +81 -0
- package/components/__tests__/GrowlManager.test.ts +0 -25
- package/components/__tests__/PromptModal.test.ts +146 -0
- package/components/__tests__/PromptRestore.test.ts +1 -65
- package/components/__tests__/RichTranslation.test.ts +115 -0
- package/components/auth/AuthBanner.vue +15 -14
- package/components/auth/Principal.vue +0 -1
- package/components/auth/RoleDetailEdit.vue +44 -4
- package/components/auth/login/ldap.vue +2 -2
- package/components/auth/login/oidc.vue +6 -1
- package/components/fleet/FleetApplications.vue +174 -0
- package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
- package/components/fleet/FleetClusterTargets/index.vue +455 -0
- package/components/fleet/FleetClusters.vue +25 -6
- package/components/fleet/FleetGitRepoPaths.vue +476 -0
- package/components/fleet/FleetHelmOps.vue +123 -0
- package/components/fleet/FleetIntro.vue +58 -28
- package/components/fleet/FleetNoWorkspaces.vue +5 -1
- package/components/fleet/FleetOCIStorageSecret.vue +171 -0
- package/components/fleet/FleetRepos.vue +37 -80
- package/components/fleet/FleetResources.vue +69 -27
- package/components/fleet/FleetSummary.vue +26 -51
- package/components/fleet/FleetValuesFrom.vue +295 -0
- package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
- package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
- package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +213 -0
- package/components/fleet/__tests__/FleetSummary.test.ts +39 -39
- package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
- package/components/fleet/dashboard/Empty.vue +73 -0
- package/components/fleet/dashboard/ResourceCard.vue +184 -0
- package/components/fleet/dashboard/ResourceCardSummary.vue +195 -0
- package/components/fleet/dashboard/ResourceDetails.vue +194 -0
- package/components/fleet/dashboard/ResourcePanel.vue +384 -0
- package/components/form/ArrayList.vue +144 -116
- package/components/form/BannerSettings.vue +117 -50
- package/components/form/ChangePassword.vue +3 -1
- package/components/form/ColorInput.vue +35 -6
- package/components/form/FileImageSelector.vue +1 -1
- package/components/form/Footer.vue +10 -4
- package/components/form/KeyValue.vue +94 -66
- package/components/form/LabeledSelect.vue +72 -54
- package/components/form/Labels.vue +91 -21
- package/components/form/MatchExpressions.vue +58 -11
- package/components/form/NameNsDescription.vue +8 -4
- package/components/form/Networking.vue +24 -19
- package/components/form/NotificationSettings.vue +15 -1
- package/components/form/ResourceLabeledSelect.vue +22 -8
- package/components/form/ResourceSelector.vue +27 -23
- package/components/form/ResourceTabs/index.vue +7 -1
- package/components/form/SSHKnownHosts/index.vue +14 -11
- package/components/form/SecretSelector.vue +18 -2
- package/components/form/Select.vue +57 -26
- package/components/form/SelectOrCreateAuthSecret.vue +6 -3
- package/components/form/SimpleSecretSelector.vue +17 -4
- package/components/form/Taints.vue +21 -2
- package/components/form/UnitInput.vue +21 -0
- package/components/form/ValueFromResource.vue +31 -19
- package/components/form/__tests__/ArrayList.test.ts +32 -0
- package/components/form/__tests__/ColorInput.test.ts +35 -0
- package/components/form/__tests__/KeyValue.test.ts +36 -0
- package/components/form/__tests__/LabeledSelect.test.ts +79 -2
- package/components/form/__tests__/Labels.test.ts +360 -0
- package/components/form/__tests__/MatchExpressions.test.ts +16 -13
- package/components/form/__tests__/Networking.test.ts +116 -0
- package/components/form/__tests__/SSHKnownHosts.test.ts +11 -2
- package/components/form/__tests__/Select.test.ts +37 -1
- package/components/form/__tests__/UnitInput.test.ts +23 -1
- package/components/form/labeled-select-utils/labeled-select-pagination.ts +3 -38
- package/components/formatter/ClusterLink.vue +5 -8
- package/components/formatter/Description.vue +30 -0
- package/components/formatter/FleetApplicationClustersReady.vue +77 -0
- package/components/formatter/FleetApplicationSource.vue +79 -0
- package/components/formatter/FleetSummaryGraph.vue +7 -0
- package/components/formatter/PodImages.vue +1 -1
- package/components/formatter/WorkloadHealthScale.vue +1 -1
- package/components/formatter/__tests__/ClusterLink.test.ts +2 -32
- package/components/formatter/__tests__/LiveDate.test.ts +10 -2
- package/components/google/AccountAccess.vue +209 -0
- package/components/google/types/gcp.d.ts +136 -0
- package/components/google/types/index.d.ts +101 -0
- package/components/google/util/__mocks__/gcp.ts +465 -0
- package/components/google/util/formatter.ts +82 -0
- package/components/google/util/gcp.ts +134 -0
- package/components/google/util/index.d.ts +11 -0
- package/components/nav/Favorite.vue +1 -1
- package/components/nav/Group.vue +5 -0
- package/components/nav/Header.vue +24 -38
- package/components/nav/NamespaceFilter.vue +142 -85
- package/components/nav/NotificationCenter/Notification.vue +484 -0
- package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
- package/components/nav/NotificationCenter/index.vue +148 -0
- package/components/nav/TopLevelMenu.helper.ts +55 -34
- package/components/nav/TopLevelMenu.vue +11 -0
- package/components/nav/Type.vue +4 -1
- package/components/nav/WindowManager/ContainerLogs.vue +87 -61
- package/components/nav/WindowManager/ContainerLogsActions.vue +76 -0
- package/components/nav/WindowManager/index.vue +3 -2
- package/components/templates/default.vue +0 -3
- package/components/templates/plain.vue +0 -3
- package/composables/drawer.ts +26 -0
- package/composables/focusTrap.ts +3 -3
- package/composables/resources.test.ts +63 -0
- package/composables/resources.ts +38 -0
- package/composables/useI18n.ts +12 -11
- package/composables/useIsNewDetailPageEnabled.ts +17 -0
- package/config/labels-annotations.js +22 -11
- package/config/pagination-table-headers.js +8 -1
- package/config/private-label.js +0 -1
- package/config/product/auth.js +20 -3
- package/config/product/{cis.js → compliance.js} +23 -26
- package/config/product/explorer.js +49 -17
- package/config/product/fleet.js +77 -17
- package/config/product/manager.js +1 -29
- package/config/product/settings.js +23 -11
- package/config/query-params.js +16 -1
- package/config/roles.ts +2 -1
- package/config/router/navigation-guards/authentication.js +51 -2
- package/config/router/navigation-guards/index.js +5 -59
- package/config/router/routes.js +65 -31
- package/config/secret.ts +15 -0
- package/config/settings.ts +33 -16
- package/config/store.js +2 -0
- package/config/system-namespaces.js +1 -1
- package/config/table-headers.js +92 -31
- package/config/types.js +18 -7
- package/config/version.js +1 -1
- package/core/plugin-helpers.ts +3 -2
- package/core/plugin.ts +32 -7
- package/core/types.ts +25 -7
- package/detail/catalog.cattle.io.app.vue +5 -1
- package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
- package/detail/fleet.cattle.io.bundle.vue +70 -6
- package/detail/fleet.cattle.io.cluster.vue +28 -15
- package/detail/fleet.cattle.io.gitrepo.vue +11 -2
- package/detail/fleet.cattle.io.helmop.vue +157 -0
- package/detail/management.cattle.io.fleetworkspace.vue +18 -27
- package/detail/management.cattle.io.oidcclient.vue +369 -0
- package/detail/namespace.vue +0 -3
- package/detail/node.vue +20 -16
- package/detail/pod.vue +2 -2
- package/detail/provisioning.cattle.io.cluster.vue +16 -50
- package/detail/service.vue +10 -2
- package/detail/workload/index.vue +48 -39
- package/dialog/AddCustomBadgeDialog.vue +0 -1
- package/{pages/c/_cluster/uiplugins/AddExtensionRepos.vue → dialog/AddExtensionReposDialog.vue} +72 -42
- package/dialog/AddonConfigConfirmationDialog.vue +1 -1
- package/dialog/AssignToDialog.vue +176 -0
- package/dialog/ChangePasswordDialog.vue +106 -0
- package/{pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue → dialog/DeveloperLoadExtensionDialog.vue} +74 -71
- package/dialog/DisableAuthProviderDialog.vue +101 -0
- package/dialog/DrainNode.vue +1 -1
- package/{pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue → dialog/ExtensionCatalogInstallDialog.vue} +100 -88
- package/{pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue → dialog/ExtensionCatalogUninstallDialog.vue} +87 -66
- package/dialog/FeatureFlagListDialog.vue +288 -0
- package/dialog/ForceMachineRemoveDialog.vue +1 -1
- package/dialog/GenericPrompt.vue +1 -1
- package/dialog/HelmOpForceUpdateDialog.vue +132 -0
- package/{components/Import.vue → dialog/ImportDialog.vue} +8 -13
- package/{pages/c/_cluster/uiplugins/InstallDialog.vue → dialog/InstallExtensionDialog.vue} +124 -106
- package/{components/form/SSHKnownHosts → dialog}/KnownHostsEditDialog.vue +52 -62
- package/dialog/MoveNamespaceDialog.vue +157 -0
- package/dialog/OidcClientSecretDialog.vue +117 -0
- package/dialog/RedeployWorkloadDialog.vue +164 -0
- package/dialog/RotateEncryptionKeyDialog.vue +10 -30
- package/dialog/ScalePoolDownDialog.vue +1 -1
- package/{components/nav/Jump.vue → dialog/SearchDialog.vue} +34 -14
- package/{pages/c/_cluster/uiplugins/UninstallDialog.vue → dialog/UninstallExtensionDialog.vue} +67 -58
- package/dialog/WechatDialog.vue +57 -0
- package/{components/form/SSHKnownHosts → dialog}/__tests__/KnownHostsEditDialog.test.ts +15 -34
- package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +60 -68
- package/edit/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
- package/edit/__tests__/service.test.ts +2 -1
- package/edit/auth/ldap/__tests__/config.test.ts +14 -0
- package/edit/auth/ldap/config.vue +24 -0
- package/edit/auth/oidc.vue +159 -93
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
- package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
- package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
- package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
- package/edit/configmap.vue +8 -2
- package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
- package/edit/fleet.cattle.io.gitrepo.vue +70 -256
- package/edit/fleet.cattle.io.helmop.vue +786 -0
- package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
- package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
- package/edit/logging-flow/index.vue +1 -0
- package/edit/logging.banzaicloud.io.output/index.vue +2 -1
- package/edit/logging.banzaicloud.io.output/providers/awsElasticsearch.vue +5 -6
- package/edit/management.cattle.io.fleetworkspace.vue +44 -10
- package/edit/management.cattle.io.oidcclient.vue +162 -0
- package/edit/management.cattle.io.project.vue +4 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/auth.vue +3 -3
- package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
- package/edit/monitoring.coreos.com.route.vue +1 -0
- package/edit/namespace.vue +2 -4
- package/edit/networking.istio.io.destinationrule/index.vue +4 -1
- package/edit/networking.k8s.io.ingress/Certificate.vue +11 -3
- package/edit/networking.k8s.io.ingress/__tests__/Certificate.test.ts +37 -0
- package/edit/networking.k8s.io.ingress/index.vue +4 -1
- package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +3 -14
- package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +57 -62
- package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +10 -16
- package/edit/networking.k8s.io.networkpolicy/__tests__/PolicyRuleTarget.test.ts +72 -41
- package/edit/networking.k8s.io.networkpolicy/__tests__/utils/mock.json +17 -1
- package/edit/networking.k8s.io.networkpolicy/index.vue +23 -31
- package/edit/node.vue +1 -0
- package/edit/persistentvolume/index.vue +4 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +26 -12
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +69 -2
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/rke2-test-data.ts +58 -0
- package/edit/provisioning.cattle.io.cluster/index.vue +21 -73
- package/edit/provisioning.cattle.io.cluster/rke2.vue +535 -428
- package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +48 -39
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +5 -3
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +2 -2
- package/edit/resources.cattle.io.restore.vue +1 -1
- package/edit/secret/basic.vue +1 -0
- package/edit/secret/index.vue +127 -15
- package/edit/service.vue +17 -29
- package/edit/serviceaccount.vue +4 -1
- package/edit/storage.k8s.io.storageclass/index.vue +4 -1
- package/edit/workload/index.vue +11 -15
- package/edit/workload/mixins/workload.js +0 -2
- package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
- package/list/fleet.cattle.io.gitrepo.vue +1 -1
- package/list/fleet.cattle.io.helmop.vue +108 -0
- package/list/harvesterhci.io.management.cluster.vue +0 -17
- package/list/management.cattle.io.feature.vue +4 -288
- package/list/management.cattle.io.oidcclient.vue +108 -0
- package/list/management.cattle.io.user.vue +13 -20
- package/list/namespace.vue +6 -2
- package/list/node.vue +2 -0
- package/list/projectsecret.vue +345 -0
- package/list/secret.vue +109 -0
- package/list/workload.vue +6 -2
- package/machine-config/__tests__/vmwarevsphere.test.ts +5 -7
- package/machine-config/amazonec2.vue +3 -24
- package/machine-config/components/GCEImage.vue +374 -0
- package/machine-config/google.vue +617 -0
- package/machine-config/vmwarevsphere.vue +7 -17
- package/mixins/__tests__/brand.spec.ts +170 -0
- package/mixins/auth-config.js +8 -1
- package/mixins/brand.js +16 -17
- package/mixins/create-edit-view/impl.js +10 -1
- package/mixins/create-edit-view/index.js +5 -0
- package/mixins/preset.js +100 -0
- package/mixins/resource-fetch-api-pagination.js +73 -44
- package/mixins/resource-fetch.js +18 -8
- package/mixins/resource-table-watch.js +45 -0
- package/mixins/vue-select-overrides.js +1 -4
- package/models/__tests__/chart.test.ts +296 -0
- package/models/__tests__/fleet.cattle.io.gitrepo.test.ts +1 -1
- package/models/__tests__/fleet.cattle.io.helmop.test.ts +224 -0
- package/models/__tests__/node.test.ts +7 -63
- package/models/__tests__/workload.test.ts +1 -0
- package/models/chart.js +157 -2
- package/models/cluster/node.js +2 -1
- package/models/cluster.js +32 -2
- package/models/cluster.x-k8s.io.machinedeployment.js +11 -2
- package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
- package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
- package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
- package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
- package/models/fleet-application.js +297 -0
- package/models/fleet.cattle.io.bundle.js +9 -8
- package/models/fleet.cattle.io.cluster.js +21 -4
- package/models/fleet.cattle.io.gitrepo.js +46 -382
- package/models/fleet.cattle.io.helmop.js +202 -0
- package/models/management.cattle.io.authconfig.js +1 -0
- package/models/management.cattle.io.cluster.js +0 -20
- package/models/management.cattle.io.feature.js +7 -1
- package/models/management.cattle.io.fleetworkspace.js +14 -1
- package/models/management.cattle.io.node.js +7 -22
- package/models/management.cattle.io.nodepool.js +12 -0
- package/models/management.cattle.io.oidcclient.js +18 -0
- package/models/management.cattle.io.registration.js +3 -0
- package/models/management.cattle.io.setting.js +0 -1
- package/models/namespace.js +12 -1
- package/models/provisioning.cattle.io.cluster.js +60 -97
- package/models/secret.js +157 -2
- package/models/service.js +28 -9
- package/models/storage.k8s.io.storageclass.js +2 -2
- package/models/workload.js +91 -51
- package/package.json +6 -5
- package/pages/about.vue +17 -61
- package/pages/account/index.vue +9 -1
- package/pages/auth/login.vue +3 -38
- package/pages/auth/verify.vue +13 -1
- package/pages/c/_cluster/apps/charts/AddRepoLink.vue +36 -0
- package/pages/c/_cluster/apps/charts/AppChartCardFooter.vue +80 -0
- package/pages/c/_cluster/apps/charts/AppChartCardSubHeader.vue +57 -0
- package/pages/c/_cluster/apps/charts/StatusLabel.vue +33 -0
- package/pages/c/_cluster/apps/charts/index.vue +501 -468
- package/pages/c/_cluster/apps/charts/install.vue +0 -1
- package/pages/c/_cluster/auth/roles/index.vue +19 -48
- package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
- package/pages/c/_cluster/explorer/EventsTable.vue +1 -1
- package/pages/c/_cluster/explorer/index.vue +14 -3
- package/pages/c/_cluster/explorer/projectsecret.vue +34 -0
- package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
- package/pages/c/_cluster/fleet/__tests__/index.test.ts +720 -0
- package/pages/c/_cluster/fleet/application/_resource/_id.vue +14 -0
- package/pages/c/_cluster/fleet/application/_resource/create.vue +14 -0
- package/pages/c/_cluster/fleet/application/create.vue +341 -0
- package/pages/c/_cluster/fleet/application/index.vue +139 -0
- package/pages/c/_cluster/fleet/graph/config.js +277 -0
- package/pages/c/_cluster/fleet/index.vue +866 -328
- package/pages/c/_cluster/fleet/settings/index.vue +229 -0
- package/pages/c/_cluster/longhorn/index.vue +5 -2
- package/pages/c/_cluster/settings/banners.vue +56 -2
- package/pages/c/_cluster/settings/brand.vue +2 -1
- package/pages/c/_cluster/settings/performance.vue +7 -26
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
- package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +4 -7
- package/pages/c/_cluster/uiplugins/index.vue +98 -55
- package/pages/explorer/resource/detail/configmap.vue +42 -0
- package/pages/explorer/resource/detail/projectsecret.vue +9 -0
- package/pages/explorer/resource/detail/secret.vue +63 -0
- package/pages/home.vue +8 -104
- package/pages/prefs.vue +0 -1
- package/pages/support/index.vue +4 -6
- package/plugins/clean-html.js +2 -0
- package/plugins/dashboard-store/__tests__/actions.test.ts +4 -1
- package/plugins/dashboard-store/__tests__/normalize.test.ts +223 -0
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +191 -0
- package/plugins/dashboard-store/__tests__/utils/normalize-usecases.ts +1526 -0
- package/plugins/dashboard-store/actions.js +212 -55
- package/plugins/dashboard-store/getters.js +112 -24
- package/plugins/dashboard-store/mutations.js +61 -12
- package/plugins/dashboard-store/normalize.js +29 -19
- package/plugins/dashboard-store/resource-class.js +132 -49
- package/plugins/steve/__tests__/getters.test.ts +19 -12
- package/plugins/steve/__tests__/steve-class.test.ts +1 -0
- package/plugins/steve/__tests__/subscribe.spec.ts +324 -1
- package/plugins/steve/actions.js +37 -24
- package/plugins/steve/getters.js +47 -12
- package/plugins/steve/resourceWatcher.js +10 -3
- package/plugins/steve/steve-class.js +5 -0
- package/plugins/steve/steve-pagination-utils.ts +225 -43
- package/plugins/steve/subscribe.js +418 -53
- package/plugins/steve/worker/web-worker.advanced.js +5 -1
- package/rancher-components/Banner/Banner.test.ts +51 -3
- package/rancher-components/Banner/Banner.vue +37 -6
- package/rancher-components/Form/Checkbox/Checkbox.test.ts +59 -1
- package/rancher-components/Form/Checkbox/Checkbox.vue +27 -9
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +51 -0
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +21 -3
- package/rancher-components/Form/Radio/RadioButton.test.ts +36 -1
- package/rancher-components/Form/Radio/RadioButton.vue +21 -5
- package/rancher-components/Form/Radio/RadioGroup.test.ts +60 -0
- package/rancher-components/Form/Radio/RadioGroup.vue +81 -38
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +4 -0
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +22 -1
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
- package/rancher-components/RcButton/RcButton.vue +1 -1
- package/rancher-components/RcDropdown/RcDropdown.test.ts +98 -0
- package/rancher-components/RcDropdown/RcDropdown.vue +6 -0
- package/rancher-components/RcDropdown/RcDropdownItem.vue +8 -55
- package/rancher-components/RcDropdown/RcDropdownItemCheckbox.vue +69 -0
- package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +93 -0
- package/rancher-components/RcDropdown/RcDropdownMenu.vue +7 -8
- package/rancher-components/RcDropdown/index.ts +2 -0
- package/rancher-components/RcDropdown/useDropdownContext.ts +21 -0
- package/rancher-components/RcDropdown/useDropdownItem.ts +92 -0
- package/rancher-components/RcItemCard/RcItemCard.test.ts +189 -0
- package/rancher-components/RcItemCard/RcItemCard.vue +430 -0
- package/rancher-components/RcItemCard/RcItemCardAction.vue +24 -0
- package/rancher-components/RcItemCard/index.ts +2 -0
- package/rancher-components/StringList/StringList.vue +1 -1
- package/scripts/extension/publish +1 -1
- package/static/loading-indicator.html +1 -1
- package/store/action-menu.js +26 -56
- package/store/auth.js +3 -0
- package/store/catalog.js +85 -25
- package/store/features.js +0 -1
- package/store/growl.js +97 -8
- package/store/i18n.js +1 -1
- package/store/index.js +44 -14
- package/store/notifications.ts +426 -0
- package/store/prefs.js +2 -8
- package/store/slideInPanel.ts +6 -0
- package/store/type-map.js +35 -19
- package/store/type-map.utils.ts +49 -6
- package/store/uiplugins.ts +15 -1
- package/types/fleet.d.ts +60 -1
- package/types/kube/kube-api.ts +34 -0
- package/types/notifications/index.ts +74 -0
- package/types/resources/fleet.d.ts +43 -0
- package/types/resources/pod-security-admission.ts +36 -0
- package/types/resources/settings.d.ts +107 -0
- package/types/resources/userPreferences.d.ts +13 -0
- package/types/shell/index.d.ts +971 -745
- package/types/store/dashboard-store.types.ts +57 -4
- package/types/store/pagination.types.ts +41 -9
- package/types/store/subscribe.types.ts +50 -0
- package/utils/__mocks__/tabbable.js +13 -0
- package/utils/__tests__/back-off.test.ts +354 -0
- package/utils/__tests__/create-yaml.test.ts +235 -0
- package/utils/__tests__/fleet.test.ts +148 -0
- package/utils/__tests__/kontainer.test.ts +19 -0
- package/utils/__tests__/object.test.ts +54 -1
- package/utils/__tests__/string.test.ts +273 -1
- package/utils/__tests__/time.test.ts +31 -0
- package/utils/auth.js +41 -6
- package/utils/back-off.ts +176 -0
- package/utils/cluster.js +24 -20
- package/utils/create-yaml.js +103 -9
- package/utils/crypto/encryption.ts +103 -0
- package/utils/cspAdaptor.ts +51 -0
- package/utils/error.js +4 -5
- package/utils/fleet-types.ts +0 -0
- package/utils/fleet.ts +204 -74
- package/utils/grafana.js +1 -0
- package/utils/kontainer.ts +3 -5
- package/utils/object.js +36 -12
- package/utils/pagination-utils.ts +50 -3
- package/utils/pagination-wrapper.ts +132 -50
- package/utils/perf-setting.utils.ts +28 -0
- package/utils/release-notes.ts +48 -0
- package/utils/router.js +4 -4
- package/utils/selector-typed.ts +210 -0
- package/utils/selector.js +29 -6
- package/utils/settings.ts +4 -1
- package/utils/string.js +24 -0
- package/utils/style.ts +39 -0
- package/utils/{time.js → time.ts} +25 -6
- package/utils/uiplugins.ts +41 -8
- package/utils/v-sphere.ts +5 -1
- package/utils/validators/formRules/__tests__/index.test.ts +76 -6
- package/utils/validators/formRules/index.ts +99 -4
- package/utils/window.js +11 -7
- package/.DS_Store +0 -0
- package/components/AssignTo.vue +0 -199
- package/components/DisableAuthProviderModal.vue +0 -115
- package/components/MoveModal.vue +0 -167
- package/components/PromptChangePassword.vue +0 -123
- package/components/ResourceList/Masthead-btn.vue +0 -225
- package/components/__tests__/ApplicationCard.test.ts +0 -27
- package/components/cards/ApplicationCard.vue +0 -145
- package/components/fleet/FleetBundleResources.vue +0 -86
- package/components/fleet/ForceDirectedTreeChart/chartIcons.js +0 -17
- package/components/formatter/RKETemplateName.vue +0 -37
- package/config/product/legacy.js +0 -62
- package/config/secret.js +0 -14
- package/dialog/SaveAsRKETemplateDialog.vue +0 -139
- package/models/etcdbackup.js +0 -45
- package/pages/auth copy/login.vue +0 -595
- package/pages/auth copy/logout.vue +0 -47
- package/pages/auth copy/setup.vue +0 -523
- package/pages/auth copy/verify.vue +0 -203
- package/pages/c/_cluster/fleet/GitRepoGraphConfig.js +0 -249
- package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
- package/pages/c/_cluster/legacy/project/_page.vue +0 -57
- package/pages/c/_cluster/legacy/project/index.vue +0 -32
- package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
|
@@ -7,8 +7,11 @@ import { classify } from '@shell/plugins/dashboard-store/classify';
|
|
|
7
7
|
import { normalizeType } from './normalize';
|
|
8
8
|
import garbageCollect from '@shell/utils/gc/gc';
|
|
9
9
|
import { addSchemaIndexFields } from '@shell/plugins/steve/schema.utils';
|
|
10
|
-
import { addParam } from '@shell/utils/url';
|
|
10
|
+
import { addParam, parse } from '@shell/utils/url';
|
|
11
11
|
import { conditionalDepaginate } from '@shell/store/type-map.utils';
|
|
12
|
+
import { STEVE_WATCH_MODE } from '@shell/types/store/subscribe.types';
|
|
13
|
+
import { FilterArgs } from '@shell/types/store/pagination.types';
|
|
14
|
+
import { isLabelSelectorEmpty, labelSelectorToSelector } from '@shell/utils/selector-typed';
|
|
12
15
|
|
|
13
16
|
export const _ALL = 'all';
|
|
14
17
|
export const _MERGE = 'merge';
|
|
@@ -76,6 +79,29 @@ const findAllGetter = (getters, type, opt) => {
|
|
|
76
79
|
return opt.namespaced ? getters.matching(type, null, opt.namespaced, { skipSelector: true }) : getters.all(type);
|
|
77
80
|
};
|
|
78
81
|
|
|
82
|
+
const createFindWatchArg = ({
|
|
83
|
+
type, id, opt, res
|
|
84
|
+
}) => {
|
|
85
|
+
const revision = typeof opt.revision !== 'undefined' ? opt.revision : res?.metadata?.resourceVersion;
|
|
86
|
+
const watchMsg = {
|
|
87
|
+
type,
|
|
88
|
+
id,
|
|
89
|
+
// Although not used by sockets, we need this for when resyncWatch calls find... which needs namespace to construct the url
|
|
90
|
+
namespace: opt.namespaced,
|
|
91
|
+
revision: revision || '',
|
|
92
|
+
force: opt.forceWatch === true,
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const idx = id.indexOf('/');
|
|
96
|
+
|
|
97
|
+
if ( idx > 0 ) {
|
|
98
|
+
watchMsg.namespace = id.substr(0, idx);
|
|
99
|
+
watchMsg.id = id.substr(idx + 1);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
return watchMsg;
|
|
103
|
+
};
|
|
104
|
+
|
|
79
105
|
export default {
|
|
80
106
|
request() {
|
|
81
107
|
throw new Error('Not Implemented');
|
|
@@ -83,9 +109,17 @@ export default {
|
|
|
83
109
|
|
|
84
110
|
loadSchemas,
|
|
85
111
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
112
|
+
/**
|
|
113
|
+
* Load a page of data for a given type. Given the response will continue until there are no pages left to fetch
|
|
114
|
+
*
|
|
115
|
+
* Used for incremental loading when enabled
|
|
116
|
+
*
|
|
117
|
+
* If we're in the non-vai world paginate via native limit/next (pageByLimit)
|
|
118
|
+
* If we're in the vai world paginate via page number (pageByNumber)
|
|
119
|
+
*/
|
|
120
|
+
async loadDataPage(ctx, {
|
|
121
|
+
type, opt, pageByLimit, pageByNumber
|
|
122
|
+
}) {
|
|
89
123
|
const { getters, commit, dispatch } = ctx;
|
|
90
124
|
|
|
91
125
|
type = getters.normalizeType(type);
|
|
@@ -99,6 +133,17 @@ export default {
|
|
|
99
133
|
const loadCount = getters['loadCounter'](type);
|
|
100
134
|
|
|
101
135
|
try {
|
|
136
|
+
if (pageByLimit) {
|
|
137
|
+
opt.url = pageByLimit.next;
|
|
138
|
+
} else if (pageByNumber) {
|
|
139
|
+
const { url, page, pageSize } = pageByNumber;
|
|
140
|
+
|
|
141
|
+
opt.url = addParam(url, 'page', `${ page }`);
|
|
142
|
+
opt.url = addParam(opt.url, 'pagesize', `${ pageSize }`);
|
|
143
|
+
} else {
|
|
144
|
+
throw Error('loadDataPage requires either pageByLimit or pageByNumber');
|
|
145
|
+
}
|
|
146
|
+
|
|
102
147
|
const res = await dispatch('request', { opt, type });
|
|
103
148
|
|
|
104
149
|
const newLoadCount = getters['loadCounter'](type);
|
|
@@ -115,12 +160,19 @@ export default {
|
|
|
115
160
|
data: res.data,
|
|
116
161
|
});
|
|
117
162
|
|
|
118
|
-
if (res.pagination?.next) {
|
|
163
|
+
if (pageByLimit && res.pagination?.next) {
|
|
164
|
+
dispatch('loadDataPage', {
|
|
165
|
+
type,
|
|
166
|
+
opt,
|
|
167
|
+
pageByLimit: { next: res.pagination.next },
|
|
168
|
+
});
|
|
169
|
+
} else if (pageByNumber && pageByNumber.page !== pageByNumber.pages) {
|
|
119
170
|
dispatch('loadDataPage', {
|
|
120
171
|
type,
|
|
121
|
-
opt
|
|
122
|
-
|
|
123
|
-
|
|
172
|
+
opt,
|
|
173
|
+
pageByNumber: {
|
|
174
|
+
...pageByNumber,
|
|
175
|
+
page: pageByNumber.page + 1,
|
|
124
176
|
}
|
|
125
177
|
});
|
|
126
178
|
} else {
|
|
@@ -155,7 +207,6 @@ export default {
|
|
|
155
207
|
|
|
156
208
|
opt = opt || {};
|
|
157
209
|
type = getters.normalizeType(type);
|
|
158
|
-
|
|
159
210
|
if ( !getters.typeRegistered(type) ) {
|
|
160
211
|
commit('registerType', type);
|
|
161
212
|
}
|
|
@@ -193,6 +244,7 @@ export default {
|
|
|
193
244
|
|
|
194
245
|
console.log(`Find All: [${ ctx.state.config.namespace }] ${ type }`); // eslint-disable-line no-console
|
|
195
246
|
opt = opt || {};
|
|
247
|
+
opt.isCollection = true;
|
|
196
248
|
opt.url = getters.urlFor(type, null, opt);
|
|
197
249
|
opt.stream = opt.stream !== false && load !== _NONE;
|
|
198
250
|
opt.depaginate = conditionalDepaginate(typeOptions?.depaginate, { ctx, args: { type, opt } });
|
|
@@ -200,10 +252,10 @@ export default {
|
|
|
200
252
|
let skipHaveAll = false;
|
|
201
253
|
|
|
202
254
|
// if it's incremental loading, we do two parallel requests
|
|
203
|
-
//
|
|
255
|
+
// one for a limit of 100, to quickly show data
|
|
204
256
|
// another one with 1st page of the subset of the resource we are fetching
|
|
205
257
|
// the default is 4 pages, but it can be changed on mixin/resource-fetch.js
|
|
206
|
-
let
|
|
258
|
+
let pageByLimit, pageByNumber;
|
|
207
259
|
|
|
208
260
|
if (opt.incremental) {
|
|
209
261
|
commit('incrementLoadCounter', type);
|
|
@@ -212,14 +264,23 @@ export default {
|
|
|
212
264
|
dispatch('resource-fetch/updateManualRefreshIsLoading', true, { root: true });
|
|
213
265
|
}
|
|
214
266
|
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
267
|
+
if (opt.incremental.pageByNumber && getters.isSteveCacheUrl(parse(opt.url).path)) {
|
|
268
|
+
// Set the configuration for the rest of the incremental requests
|
|
269
|
+
pageByNumber = {
|
|
270
|
+
url: opt.url,
|
|
271
|
+
page: 1,
|
|
272
|
+
pages: opt.incremental.increments,
|
|
273
|
+
pageSize: opt.incremental.resourcesPerIncrement,
|
|
274
|
+
};
|
|
275
|
+
// this is where we "hijack" the limit for the dispatch('request') some lines below and therefore have 2 initial requests in parallel
|
|
276
|
+
opt.url = addParam(opt.url, 'pagesize', `${ opt.incremental.quickLoadCount }`);
|
|
277
|
+
} else {
|
|
278
|
+
// Set the configuration for the rest of the incremental requests
|
|
279
|
+
pageByLimit = { next: addParam(opt.url, 'limit', `${ opt.incremental.resourcesPerIncrement }`) };
|
|
280
|
+
// this is where we "hijack" the limit for the dispatch('request') some lines below and therefore have 2 initial requests in parallel
|
|
281
|
+
opt.url = addParam(opt.url, 'limit', `${ opt.incremental.quickLoadCount }`);
|
|
282
|
+
}
|
|
219
283
|
|
|
220
|
-
// this is where we "hijack" the limit for the dispatch('request') some lines below
|
|
221
|
-
// and therefore have 2 initial requests in parallel
|
|
222
|
-
opt.url = addParam(opt.url, 'limit', '100');
|
|
223
284
|
skipHaveAll = true;
|
|
224
285
|
|
|
225
286
|
// since we are forcing a request, clear the haveAll
|
|
@@ -333,7 +394,9 @@ export default {
|
|
|
333
394
|
|
|
334
395
|
if (opt.incremental) {
|
|
335
396
|
// This needs to come after the loadAll (which resets state) so supplements via loadDataPage aren't lost
|
|
336
|
-
dispatch('loadDataPage', {
|
|
397
|
+
dispatch('loadDataPage', {
|
|
398
|
+
type, opt, pageByLimit, pageByNumber
|
|
399
|
+
});
|
|
337
400
|
}
|
|
338
401
|
}
|
|
339
402
|
|
|
@@ -362,13 +425,18 @@ export default {
|
|
|
362
425
|
},
|
|
363
426
|
|
|
364
427
|
/**
|
|
428
|
+
* If result not already cached, make a http request to fetch a specific set of resources
|
|
429
|
+
*
|
|
430
|
+
* This accepts all the new sql-cache backed api features (sort, filter, etc)
|
|
365
431
|
*
|
|
366
432
|
* @param {*} ctx
|
|
367
433
|
* @param { {type: string, opt: ActionFindPageArgs} } opt
|
|
434
|
+
* @returns @ActionFindPageResponse
|
|
368
435
|
*/
|
|
369
436
|
async findPage(ctx, { type, opt }) {
|
|
370
437
|
const { getters, commit, dispatch } = ctx;
|
|
371
438
|
|
|
439
|
+
// of type @ActionFindPageArgs
|
|
372
440
|
opt = opt || {};
|
|
373
441
|
|
|
374
442
|
if (!opt.pagination) {
|
|
@@ -383,12 +451,24 @@ export default {
|
|
|
383
451
|
commit('registerType', type);
|
|
384
452
|
}
|
|
385
453
|
|
|
454
|
+
// of type @STEVE_WATCH_PARAMS
|
|
455
|
+
const watchArgs = {
|
|
456
|
+
type,
|
|
457
|
+
namespace: opt.watchNamespace || opt.namespaced, // it could be either apparently
|
|
458
|
+
force: opt.forceWatch === true,
|
|
459
|
+
mode: STEVE_WATCH_MODE.RESOURCE_CHANGES,
|
|
460
|
+
};
|
|
461
|
+
|
|
386
462
|
// No need to request the resources if we have them already
|
|
387
463
|
if (!opt.transient && !opt.force && getters['havePaginatedPage'](type, opt)) {
|
|
464
|
+
if (opt.watch !== false ) {
|
|
465
|
+
dispatch('watch', watchArgs);
|
|
466
|
+
}
|
|
467
|
+
|
|
388
468
|
return findAllGetter(getters, type, opt);
|
|
389
469
|
}
|
|
390
470
|
|
|
391
|
-
console.log(`Find Page: [${ ctx.state.config.namespace }] ${ type }. Page: ${ opt.pagination.page }. Size: ${ opt.pagination.pageSize }`); // eslint-disable-line no-console
|
|
471
|
+
console.log(`Find Page: [${ ctx.state.config.namespace }] ${ type }. Page: ${ opt.pagination.page }. Size: ${ opt.pagination.pageSize }. Sort: ${ opt.pagination.sort.map((s) => s.field).join(', ') }`); // eslint-disable-line no-console
|
|
392
472
|
opt = opt || {};
|
|
393
473
|
opt.url = getters.urlFor(type, null, opt);
|
|
394
474
|
|
|
@@ -408,11 +488,7 @@ export default {
|
|
|
408
488
|
return Promise.reject(e);
|
|
409
489
|
}
|
|
410
490
|
|
|
411
|
-
|
|
412
|
-
type,
|
|
413
|
-
all: true,
|
|
414
|
-
});
|
|
415
|
-
|
|
491
|
+
// Of type @StorePagination
|
|
416
492
|
const pagination = opt.pagination ? {
|
|
417
493
|
request: {
|
|
418
494
|
namespace: opt.namespaced,
|
|
@@ -429,11 +505,16 @@ export default {
|
|
|
429
505
|
commit('loadPage', {
|
|
430
506
|
ctx,
|
|
431
507
|
type,
|
|
432
|
-
data:
|
|
508
|
+
data: out.data,
|
|
433
509
|
pagination,
|
|
510
|
+
revision: out.revision,
|
|
434
511
|
});
|
|
435
512
|
}
|
|
436
513
|
|
|
514
|
+
if ( !opt.transient && opt.watch !== false ) {
|
|
515
|
+
dispatch('watch', watchArgs);
|
|
516
|
+
}
|
|
517
|
+
|
|
437
518
|
if (opt.hasManualRefresh) {
|
|
438
519
|
dispatch('resource-fetch/updateManualRefreshIsLoading', false, { root: true });
|
|
439
520
|
}
|
|
@@ -441,11 +522,73 @@ export default {
|
|
|
441
522
|
garbageCollect.gcUpdateLastAccessed(ctx, type);
|
|
442
523
|
|
|
443
524
|
return opt.transient ? {
|
|
444
|
-
data: out.data,
|
|
525
|
+
data: await dispatch('createMany', out.data), // Return classified objects
|
|
445
526
|
pagination
|
|
446
527
|
} : findAllGetter(getters, type, opt);
|
|
447
528
|
},
|
|
448
529
|
|
|
530
|
+
/**
|
|
531
|
+
* Find results matching a kube `labelSelector` object
|
|
532
|
+
*
|
|
533
|
+
* If result not already cached, make a http request to fetch resources matching the selector/s
|
|
534
|
+
*
|
|
535
|
+
* This is different if vai based pagination is on
|
|
536
|
+
* a) Pagination Enabled - use the new sql-cache backed api - findPage
|
|
537
|
+
* b) Pagination Disabled - use the old 'native kube api' - findMatching
|
|
538
|
+
*
|
|
539
|
+
* Filter is defined via the kube labelSelector object (see KubeLabelSelector)
|
|
540
|
+
*
|
|
541
|
+
* opt: @ActionFindLabelSelectorArgs
|
|
542
|
+
* @returns @ActionFindMatchingResponse (resources[], or if transient { data: resources[], pagination: StorePagination })
|
|
543
|
+
*/
|
|
544
|
+
async findLabelSelector(ctx, {
|
|
545
|
+
type,
|
|
546
|
+
context,
|
|
547
|
+
matching: {
|
|
548
|
+
namespace,
|
|
549
|
+
labelSelector
|
|
550
|
+
},
|
|
551
|
+
opt
|
|
552
|
+
}) {
|
|
553
|
+
const { getters, dispatch } = ctx;
|
|
554
|
+
const args = {
|
|
555
|
+
id: type,
|
|
556
|
+
context,
|
|
557
|
+
};
|
|
558
|
+
|
|
559
|
+
opt = opt || {};
|
|
560
|
+
|
|
561
|
+
if (getters[`paginationEnabled`]?.(args)) {
|
|
562
|
+
if (isLabelSelectorEmpty(labelSelector)) {
|
|
563
|
+
throw new Error(`labelSelector must not be empty when using findLabelSelector (avoid fetching all resources)`);
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
// opt of type ActionFindPageArgs
|
|
567
|
+
return dispatch('findPage', {
|
|
568
|
+
type,
|
|
569
|
+
opt: {
|
|
570
|
+
...opt,
|
|
571
|
+
namespaced: namespace,
|
|
572
|
+
pagination: new FilterArgs({ labelSelector }),
|
|
573
|
+
transient: opt?.transient !== undefined ? opt.transient : false // Call this out explicitly here, as by default findX methods ar eusually be cached AND watched
|
|
574
|
+
}
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
|
|
578
|
+
// opt of type ActionFindPageArgs
|
|
579
|
+
const findMatching = await dispatch('findMatching', {
|
|
580
|
+
type,
|
|
581
|
+
selector: labelSelectorToSelector(labelSelector),
|
|
582
|
+
opt,
|
|
583
|
+
namespace,
|
|
584
|
+
});
|
|
585
|
+
|
|
586
|
+
return opt.transient ? { data: findMatching } : findMatching;
|
|
587
|
+
},
|
|
588
|
+
|
|
589
|
+
/**
|
|
590
|
+
* opt: @ActionFindMatchingArgs
|
|
591
|
+
*/
|
|
449
592
|
async findMatching(ctx, {
|
|
450
593
|
type,
|
|
451
594
|
selector,
|
|
@@ -463,7 +606,13 @@ export default {
|
|
|
463
606
|
if ( !getters.typeRegistered(type) ) {
|
|
464
607
|
commit('registerType', type);
|
|
465
608
|
}
|
|
466
|
-
|
|
609
|
+
|
|
610
|
+
if ( opt.force !== true && getters['haveSelector'](type, selector)) {
|
|
611
|
+
return getters.all(type);
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
// Optimisation - We can pretend like we've fetched a specific selectors worth instead of replacing ALL pods with only SOME
|
|
615
|
+
if ( opt.force !== true && getters['haveAll'](type)) {
|
|
467
616
|
return getters.matching( type, selector, namespace );
|
|
468
617
|
}
|
|
469
618
|
|
|
@@ -471,6 +620,8 @@ export default {
|
|
|
471
620
|
|
|
472
621
|
opt = opt || {};
|
|
473
622
|
opt.labelSelector = selector;
|
|
623
|
+
opt.isCollection = true;
|
|
624
|
+
opt.namespaced = namespace;
|
|
474
625
|
opt.url = getters.urlFor(type, null, opt);
|
|
475
626
|
opt.depaginate = conditionalDepaginate(typeOptions?.depaginate, { ctx, args: { type, opt } });
|
|
476
627
|
|
|
@@ -499,7 +650,7 @@ export default {
|
|
|
499
650
|
|
|
500
651
|
garbageCollect.gcUpdateLastAccessed(ctx, type);
|
|
501
652
|
|
|
502
|
-
return getters.
|
|
653
|
+
return getters.all(type);
|
|
503
654
|
},
|
|
504
655
|
|
|
505
656
|
// opt:
|
|
@@ -529,6 +680,12 @@ export default {
|
|
|
529
680
|
out = getters.byId(type, id);
|
|
530
681
|
|
|
531
682
|
if ( out ) {
|
|
683
|
+
if ( opt.watch !== false ) {
|
|
684
|
+
dispatch('watch', createFindWatchArg({
|
|
685
|
+
type, id, opt, res: undefined
|
|
686
|
+
}));
|
|
687
|
+
}
|
|
688
|
+
|
|
532
689
|
return out;
|
|
533
690
|
}
|
|
534
691
|
}
|
|
@@ -541,26 +698,9 @@ export default {
|
|
|
541
698
|
await dispatch('load', { data: res });
|
|
542
699
|
|
|
543
700
|
if ( opt.watch !== false ) {
|
|
544
|
-
|
|
545
|
-
type,
|
|
546
|
-
|
|
547
|
-
// Although not used by sockets, we need this for when resyncWatch calls find... which needs namespace to construct the url
|
|
548
|
-
namespace: opt.namespaced,
|
|
549
|
-
// Override the revision. Used in cases where we need to avoid using the resource's own revision which would be `too old`.
|
|
550
|
-
// For the above case opt.revision will be `null`. If left as `undefined` the subscribe mechanism will try to determine a revision
|
|
551
|
-
// from resources in store (which would be this one, with the too old revision)
|
|
552
|
-
revision: typeof opt.revision !== 'undefined' ? opt.revision : res?.metadata?.resourceVersion,
|
|
553
|
-
force: opt.forceWatch === true,
|
|
554
|
-
};
|
|
555
|
-
|
|
556
|
-
const idx = id.indexOf('/');
|
|
557
|
-
|
|
558
|
-
if ( idx > 0 ) {
|
|
559
|
-
watchMsg.namespace = id.substr(0, idx);
|
|
560
|
-
watchMsg.id = id.substr(idx + 1);
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
dispatch('watch', watchMsg);
|
|
701
|
+
dispatch('watch', createFindWatchArg({
|
|
702
|
+
type, id, opt, res
|
|
703
|
+
}));
|
|
564
704
|
}
|
|
565
705
|
|
|
566
706
|
out = getters.byId(type, id);
|
|
@@ -570,7 +710,15 @@ export default {
|
|
|
570
710
|
return out;
|
|
571
711
|
},
|
|
572
712
|
|
|
573
|
-
|
|
713
|
+
/**
|
|
714
|
+
* Add or update the given resource in the store
|
|
715
|
+
*
|
|
716
|
+
* invalidatePageCache
|
|
717
|
+
* - if something calls `load` then the cache no longer has a page so we invalidate it
|
|
718
|
+
* - however on resource create or remove this can lead to lists showing nothing... before the new page is fetched
|
|
719
|
+
* - for those cases avoid invaliding the page cache
|
|
720
|
+
*/
|
|
721
|
+
load(ctx, { data, existing, invalidatePageCache }) {
|
|
574
722
|
const { getters, commit } = ctx;
|
|
575
723
|
|
|
576
724
|
let type = normalizeType(data.type);
|
|
@@ -603,7 +751,8 @@ export default {
|
|
|
603
751
|
commit('load', {
|
|
604
752
|
ctx,
|
|
605
753
|
data,
|
|
606
|
-
existing
|
|
754
|
+
existing,
|
|
755
|
+
invalidatePageCache // Avoid havePage invalidation
|
|
607
756
|
});
|
|
608
757
|
|
|
609
758
|
if ( type === SCHEMA ) {
|
|
@@ -671,13 +820,21 @@ export default {
|
|
|
671
820
|
return classify(ctx, resource.toJSON(), true);
|
|
672
821
|
},
|
|
673
822
|
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
823
|
+
/**
|
|
824
|
+
* Remove all cached entries for a resource and stop watches
|
|
825
|
+
*/
|
|
826
|
+
forgetType({ commit, dispatch, state }, type, compareWatches) {
|
|
827
|
+
// Stop all known watches
|
|
677
828
|
state.started
|
|
678
|
-
.filter((entry) => entry.type === type)
|
|
829
|
+
.filter((entry) => compareWatches ? compareWatches(entry) : entry.type === type)
|
|
679
830
|
.forEach((entry) => dispatch('unwatch', entry));
|
|
680
831
|
|
|
832
|
+
// Stop all known back-off watch processes for this type
|
|
833
|
+
dispatch('resetWatchBackOff', {
|
|
834
|
+
type, compareWatches, resetStarted: false
|
|
835
|
+
});
|
|
836
|
+
|
|
837
|
+
// Remove entries from store
|
|
681
838
|
commit('forgetType', type);
|
|
682
839
|
},
|
|
683
840
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
import { SCHEMA, COUNT } from '@shell/config/types';
|
|
2
|
+
import { SCHEMA, COUNT, POD } 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';
|
|
@@ -9,7 +9,11 @@ import { keyFieldFor, normalizeType } from './normalize';
|
|
|
9
9
|
import { lookup } from './model-loader';
|
|
10
10
|
import garbageCollect from '@shell/utils/gc/gc';
|
|
11
11
|
import paginationUtils from '@shell/utils/pagination-utils';
|
|
12
|
+
import { labelSelectorToSelector } from '@shell/utils/selector-typed';
|
|
12
13
|
|
|
14
|
+
/**
|
|
15
|
+
* opt: ActionFindPageArgs
|
|
16
|
+
*/
|
|
13
17
|
export const urlFor = (state, getters) => (type, id, opt) => {
|
|
14
18
|
opt = opt || {};
|
|
15
19
|
type = getters.normalizeType(type);
|
|
@@ -46,6 +50,33 @@ export const urlFor = (state, getters) => (type, id, opt) => {
|
|
|
46
50
|
return url;
|
|
47
51
|
};
|
|
48
52
|
|
|
53
|
+
function resourceCount(rootGetters, getters, typeObj) {
|
|
54
|
+
let _typeObj = typeObj;
|
|
55
|
+
const { name: type, count } = _typeObj;
|
|
56
|
+
|
|
57
|
+
if (!type) {
|
|
58
|
+
throw new Error(`Resource type required to calc count: ${ JSON.stringify(typeObj) }`);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
if (!count) {
|
|
62
|
+
const schema = getters.schemaFor(type);
|
|
63
|
+
const counts = getters.all(COUNT)?.[0]?.counts || {};
|
|
64
|
+
const count = counts[type];
|
|
65
|
+
|
|
66
|
+
// This object aligns with `Type.vue` `type`
|
|
67
|
+
_typeObj = {
|
|
68
|
+
count: count ? count.summary.count || 0 : null,
|
|
69
|
+
byNamespace: count ? count.namespaces : {},
|
|
70
|
+
revision: count ? count.revision : null,
|
|
71
|
+
namespaced: schema?.attributes?.namespaced
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
const namespaces = _typeObj?.namespaced && !rootGetters.isAllNamespaces ? Object.keys(rootGetters.activeNamespaceCache || {}) : [];
|
|
76
|
+
|
|
77
|
+
return matchingCounts(_typeObj, namespaces.length ? namespaces : null);
|
|
78
|
+
}
|
|
79
|
+
|
|
49
80
|
/**
|
|
50
81
|
* Find the number of resources given
|
|
51
82
|
* - if the type is namespaced
|
|
@@ -91,12 +122,59 @@ export default {
|
|
|
91
122
|
return state.types[type].list;
|
|
92
123
|
},
|
|
93
124
|
|
|
125
|
+
/**
|
|
126
|
+
* This is a _manual_ application of the selector against whatever is in the store
|
|
127
|
+
*
|
|
128
|
+
* The store must be populated with enough resources to make this valid
|
|
129
|
+
*
|
|
130
|
+
* It's like `matching` except
|
|
131
|
+
* - it accepts a kube labelSelector object (see KubeLabelSelector)
|
|
132
|
+
* - if the store already has the selector and only the selector just return it, otherwise run through `matching`
|
|
133
|
+
*/
|
|
134
|
+
matchingLabelSelector: (state, getters, rootState) => (type, labelSelector, namespace) => {
|
|
135
|
+
type = getters.normalizeType(type);
|
|
136
|
+
const selector = labelSelectorToSelector(labelSelector);
|
|
137
|
+
const page = getters['havePage'](type, selector)?.request;
|
|
138
|
+
|
|
139
|
+
// Does the store contain the result of a vai backed api request?
|
|
140
|
+
if (
|
|
141
|
+
page?.namespace === namespace &&
|
|
142
|
+
page?.pagination?.filters?.length === 0 &&
|
|
143
|
+
page?.pagination.labelSelector &&
|
|
144
|
+
selector === labelSelectorToSelector(page?.pagination.labelSelector
|
|
145
|
+
)
|
|
146
|
+
) {
|
|
147
|
+
return getters.all(type);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Does the store contain the result of a specific labelSelector request?
|
|
151
|
+
if (getters['haveSelector'](type, selector)) {
|
|
152
|
+
return getters.all(type);
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
if (getters['havePage'](type)) {
|
|
156
|
+
return getters.all(type);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Does the store have all and we can pretend like it contains a result of a labelSelector?
|
|
160
|
+
if (getters['haveAll'](type)) {
|
|
161
|
+
return getters.matching( type, selector, namespace );
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
return [];
|
|
165
|
+
},
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* This is a _manual_ application of the selector against whatever is in the store
|
|
169
|
+
*
|
|
170
|
+
* The store must be populated with enough resources to make this valid
|
|
171
|
+
*/
|
|
94
172
|
matching: (state, getters, rootState) => (type, selector, namespace, config = { skipSelector: false }) => {
|
|
95
173
|
let matching = getters['all'](type);
|
|
96
174
|
|
|
97
175
|
// Filter first by namespace if one is provided, since this is efficient
|
|
98
176
|
if (namespace && typeof namespace === 'string') {
|
|
99
|
-
matching = matching.filter((obj) => obj.namespace === namespace);
|
|
177
|
+
matching = type === POD ? getters['podsByNamespace'](namespace) : matching.filter((obj) => obj.namespace === namespace);
|
|
100
178
|
}
|
|
101
179
|
|
|
102
180
|
garbageCollect.gcUpdateLastAccessed({
|
|
@@ -327,6 +405,9 @@ export default {
|
|
|
327
405
|
return state.types[type]?.haveNamespace || null;
|
|
328
406
|
},
|
|
329
407
|
|
|
408
|
+
/**
|
|
409
|
+
* Returns (type: string ) => StorePagination
|
|
410
|
+
*/
|
|
330
411
|
havePage: (state, getters) => (type) => {
|
|
331
412
|
type = getters.normalizeType(type);
|
|
332
413
|
|
|
@@ -408,30 +489,13 @@ export default {
|
|
|
408
489
|
*
|
|
409
490
|
*/
|
|
410
491
|
count: (state, getters, rootState, rootGetters) => (typeObj) => {
|
|
411
|
-
|
|
412
|
-
const { name: type, count } = _typeObj;
|
|
492
|
+
const subTypes = rootGetters['type-map/optionsFor'](typeObj.name).subTypes || [];
|
|
413
493
|
|
|
414
|
-
if (
|
|
415
|
-
|
|
494
|
+
if (subTypes.length) {
|
|
495
|
+
return subTypes.reduce((acc, type) => acc + resourceCount(rootGetters, getters, { name: type }), 0);
|
|
416
496
|
}
|
|
417
497
|
|
|
418
|
-
|
|
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 && !rootGetters.isAllNamespaces ? Object.keys(rootGetters.activeNamespaceCache || {}) : [];
|
|
433
|
-
|
|
434
|
-
return matchingCounts(_typeObj, namespaces.length ? namespaces : null);
|
|
498
|
+
return resourceCount(rootGetters, getters, typeObj);
|
|
435
499
|
},
|
|
436
500
|
|
|
437
501
|
generation: (state, getters) => (type) => {
|
|
@@ -445,7 +509,17 @@ export default {
|
|
|
445
509
|
return undefined;
|
|
446
510
|
},
|
|
447
511
|
|
|
512
|
+
/**
|
|
513
|
+
* Determine if server-side pagination (SSP) is enabled
|
|
514
|
+
*
|
|
515
|
+
* If args is falsy just check the Feature Flag
|
|
516
|
+
*
|
|
517
|
+
* Otherwise args should reference a resource who's compatibility with SSP will also be checked
|
|
518
|
+
*/
|
|
448
519
|
paginationEnabled: (state, getters, rootState, rootGetters) => (args) => {
|
|
520
|
+
if (!args) {
|
|
521
|
+
return paginationUtils.isSteveCacheEnabled({ rootGetters });
|
|
522
|
+
}
|
|
449
523
|
const id = typeof args === 'object' ? args.id : args;
|
|
450
524
|
const context = typeof args === 'object' ? args.context : undefined;
|
|
451
525
|
|
|
@@ -453,5 +527,19 @@ export default {
|
|
|
453
527
|
const resource = id || context ? { id, context } : null;
|
|
454
528
|
|
|
455
529
|
return paginationUtils.isEnabled({ rootGetters }, { store, resource });
|
|
456
|
-
}
|
|
530
|
+
},
|
|
531
|
+
|
|
532
|
+
/**
|
|
533
|
+
* Is the url path a rancher steve one?
|
|
534
|
+
*
|
|
535
|
+
* Can be used to change behaviour given steve api
|
|
536
|
+
*/
|
|
537
|
+
isSteveUrl: (state) => () => false,
|
|
538
|
+
|
|
539
|
+
/**
|
|
540
|
+
* Is the url path a rancher steve one AND the steve cache is enabled?
|
|
541
|
+
*
|
|
542
|
+
* Can be used to change behaviour given steve cache api functionality
|
|
543
|
+
*/
|
|
544
|
+
isSteveCacheUrl: (state) => () => false,
|
|
457
545
|
};
|