@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.
- package/assets/data/aws-regions.json +9 -0
- package/assets/images/vendor/openid.svg +18 -0
- package/assets/styles/app.scss +1 -2
- package/assets/styles/fonts/_icons.scss +3 -3
- package/assets/styles/global/_columns.scss +1 -1
- package/assets/styles/global/_labeled-input.scss +1 -0
- package/assets/styles/global/_layout.scss +99 -0
- package/assets/styles/themes/_csp.scss +2 -2
- package/assets/styles/themes/_dark.scss +8 -2
- package/assets/styles/themes/_light.scss +2 -1
- package/assets/styles/themes/_suse.scss +1 -1
- package/assets/styles/vendor/vue-select.scss +5 -0
- package/assets/translations/en-us.yaml +315 -64
- package/assets/translations/zh-hans.yaml +7 -31
- package/babel.config.js +8 -2
- package/chart/__tests__/S3.test.ts +9 -2
- package/chart/gatekeeper.vue +2 -11
- package/chart/istio.vue +1 -10
- package/chart/logging/index.vue +2 -11
- package/chart/monitoring/alerting/index.vue +7 -21
- package/chart/monitoring/grafana/index.vue +61 -2
- package/chart/monitoring/index.vue +52 -26
- package/chart/monitoring/prometheus/index.vue +39 -45
- package/chart/rancher-backup/S3.vue +11 -9
- package/chart/rancher-backup/index.vue +18 -15
- package/cloud-credential/__tests__/harvester.test.ts +18 -0
- package/cloud-credential/azure.vue +4 -17
- package/cloud-credential/generic.vue +18 -9
- package/cloud-credential/harvester.vue +11 -3
- package/components/AlertTable.vue +17 -7
- package/components/AppModal.vue +167 -0
- package/components/AssignTo.vue +7 -4
- package/components/AsyncButton.vue +27 -5
- package/components/BackLink.vue +4 -4
- package/components/BannerGraphic.vue +1 -0
- package/components/BrandImage.vue +47 -1
- package/components/Carousel.vue +15 -8
- package/components/Certificates.vue +161 -0
- package/components/ClusterBadge.vue +12 -3
- package/components/ClusterIconMenu.vue +55 -12
- package/components/ClusterProviderIcon.vue +14 -3
- package/components/CodeMirror.vue +111 -17
- package/components/CommunityLinks.vue +12 -8
- package/components/CopyCode.vue +6 -2
- package/components/CopyToClipboard.vue +2 -1
- package/components/CopyToClipboardText.vue +14 -9
- package/components/CreateDriver.vue +81 -0
- package/components/CruResource.vue +52 -27
- package/components/DetailTop.vue +2 -2
- package/components/Dialog.vue +6 -5
- package/components/DisableAuthProviderModal.vue +14 -8
- package/components/DraggableZone.vue +2 -2
- package/components/EtcdInfoBanner.vue +5 -5
- package/components/ExplorerMembers.vue +3 -3
- package/components/ExplorerProjectsNamespaces.vue +31 -7
- package/components/FixedBanner.vue +48 -36
- package/components/GlobalRoleBindings.vue +26 -0
- package/components/GrafanaDashboard.vue +6 -4
- package/components/IconOrSvg.vue +1 -1
- package/components/Import.vue +10 -6
- package/components/Inactivity.vue +1 -5
- package/components/KeyValueView.vue +14 -10
- package/components/Markdown.vue +16 -12
- package/components/MessageLink.vue +2 -2
- package/components/ModalWithCard.vue +5 -8
- package/components/MoveModal.vue +35 -33
- package/components/PodSecurityAdmission.vue +3 -3
- package/components/PromptChangePassword.vue +33 -33
- package/components/PromptModal.vue +11 -21
- package/components/PromptRemove.vue +12 -17
- package/components/PromptRestore.vue +18 -16
- package/components/Questions/__tests__/Boolean.test.ts +9 -19
- package/components/Questions/__tests__/Float.test.ts +9 -19
- package/components/Questions/__tests__/Int.test.ts +9 -19
- package/components/Questions/__tests__/String.test.ts +9 -19
- package/components/Questions/__tests__/Yaml.test.ts +9 -20
- package/components/Questions/__tests__/utils/questions-defaults.ts +20 -0
- package/components/Questions/index.vue +19 -3
- package/components/ResourceCancelModal.vue +34 -29
- package/components/ResourceDetail/Masthead.vue +48 -16
- package/components/ResourceDetail/index.vue +6 -4
- package/components/ResourceList/Masthead.vue +10 -9
- package/components/ResourceList/index.vue +65 -14
- package/components/ResourceTable.vue +87 -21
- package/components/ResourceYaml.vue +35 -5
- package/components/SelectIconGrid.vue +3 -3
- package/components/SideNav.vue +50 -94
- package/components/SingleClusterInfo.vue +4 -4
- package/components/SortableTable/THead.vue +33 -21
- package/components/SortableTable/filtering.js +9 -1
- package/components/SortableTable/grouping.js +8 -1
- package/components/SortableTable/index.vue +143 -44
- package/components/SortableTable/paging.js +36 -7
- package/components/SortableTable/selection.js +2 -1
- package/components/SortableTable/sorting.js +24 -7
- package/components/StatusTable.vue +5 -1
- package/components/Tabbed/index.vue +18 -1
- package/components/TableDataUserIcon.vue +47 -0
- package/components/TypeDescription.vue +1 -0
- package/components/Wizard.vue +1 -0
- package/components/YamlEditor.vue +1 -0
- package/components/__tests__/AppModal.test.ts +98 -0
- package/components/__tests__/AsyncButton.test.ts +1 -3
- package/components/__tests__/BackLink.test.ts +1 -1
- package/components/__tests__/ButtonGroup.test.ts +3 -6
- package/components/__tests__/Carousel.test.ts +43 -0
- package/components/__tests__/Certificates.test.ts +29 -0
- package/components/__tests__/CodeMirror.test.ts +87 -0
- package/components/__tests__/CopyCode.test.ts +5 -4
- package/components/__tests__/CruResource.test.ts +10 -9
- package/components/__tests__/EtcdInfoBanner.test.ts +37 -0
- package/components/__tests__/FixedBanner.test.ts +5 -20
- package/components/__tests__/NamespaceFilter.test.ts +9 -18
- package/components/__tests__/TabTitle.test.ts +129 -0
- package/components/auth/AzureWarning.vue +2 -2
- package/components/auth/RoleDetailEdit.vue +10 -0
- package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
- package/components/auth/login/oidc.vue +7 -1
- package/components/fleet/FleetBundles.vue +5 -11
- package/components/fleet/FleetClusters.vue +9 -9
- package/components/fleet/FleetIntro.vue +11 -17
- package/components/fleet/FleetNoWorkspaces.vue +2 -2
- package/components/fleet/FleetRepos.vue +63 -27
- package/components/fleet/FleetResources.vue +6 -1
- package/components/fleet/FleetStatus.vue +3 -3
- package/components/fleet/FleetSummary.vue +35 -30
- package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
- package/components/fleet/__tests__/FleetSummary.test.ts +316 -0
- package/components/form/ArrayList.vue +22 -18
- package/components/form/ArrayListSelect.vue +5 -0
- package/components/form/BannerSettings.vue +3 -0
- package/components/form/ClusterAppearance.vue +132 -0
- package/components/form/ColorInput.vue +1 -0
- package/components/form/Error.vue +3 -3
- package/components/form/FileSelector.vue +1 -0
- package/components/form/Footer.vue +2 -2
- package/components/form/GitPicker.vue +83 -38
- package/components/form/KeyValue.vue +70 -48
- package/components/form/LabeledSelect.vue +145 -41
- package/components/form/Labels.vue +3 -1
- package/components/form/NameNsDescription.vue +26 -9
- package/components/form/Password.vue +3 -1
- package/components/form/ResourceLabeledSelect.vue +187 -0
- package/components/form/ResourceTabs/index.vue +31 -15
- package/components/form/SecretSelector.vue +93 -18
- package/components/form/SelectOrCreateAuthSecret.vue +132 -59
- package/components/form/SimpleSecretSelector.vue +88 -28
- package/components/form/Taints.vue +13 -7
- package/components/form/__tests__/BannerSettings.test.ts +53 -0
- package/components/form/__tests__/KeyValue.test.ts +120 -11
- package/components/form/__tests__/LabeledSelect.test.ts +0 -18
- package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +25 -15
- package/components/form/__tests__/Taints.test.ts +70 -0
- package/components/form/labeled-select-utils/labeled-select-pagination.ts +151 -0
- package/components/form/labeled-select-utils/labeled-select.utils.ts +122 -0
- package/components/formatter/AppSummaryGraph.vue +2 -2
- package/components/formatter/Checked.vue +11 -3
- package/components/formatter/CloudCredPublicData.vue +30 -0
- package/components/formatter/ClusterLink.vue +2 -2
- package/components/formatter/ClusterProvider.vue +1 -18
- package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
- package/components/formatter/FleetSummaryGraph.vue +25 -12
- package/components/formatter/ImagePercentageBar.vue +0 -4
- package/components/formatter/IngressTarget.vue +18 -7
- package/components/formatter/Link.vue +2 -2
- package/components/formatter/LinkDetail.vue +2 -2
- package/components/formatter/LinkDetailImage.vue +2 -2
- package/components/formatter/LinkName.vue +2 -2
- package/components/formatter/LiveDuration.vue +1 -1
- package/components/formatter/PercentageBar.vue +1 -1
- package/components/formatter/PrincipalGroupBindings.vue +2 -2
- package/components/formatter/SecretType.vue +2 -2
- package/components/formatter/VirtualServiceGateways.vue +2 -2
- package/components/formatter/WorkloadDetailEndpoints.vue +12 -22
- package/components/formatter/__tests__/Checked.test.ts +19 -0
- package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
- package/components/formatter/__tests__/WorkloadDetailEndpoints.test.ts +81 -0
- package/components/nav/Group.vue +9 -7
- package/components/nav/Header.vue +85 -46
- package/components/nav/Jump.vue +19 -9
- package/components/nav/NamespaceFilter.vue +8 -1
- package/components/nav/TopLevelMenu.vue +392 -136
- package/components/nav/Type.vue +71 -106
- package/components/nav/WindowManager/ContainerLogs.vue +120 -19
- package/components/nav/WindowManager/ContainerShell.vue +6 -1
- package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
- package/components/nav/WindowManager/index.vue +11 -10
- package/components/nav/__tests__/TopLevelMenu.test.ts +400 -6
- package/components/nav/__tests__/Type.test.ts +322 -97
- package/components/nuxt/nuxt-child.js +9 -78
- package/components/nuxt/nuxt-error.vue +1 -1
- package/components/nuxt/nuxt-link.client.js +13 -95
- package/{layouts → components/templates}/blank.vue +1 -1
- package/{layouts → components/templates}/default.vue +11 -101
- package/{layouts → components/templates}/error.vue +13 -26
- package/{layouts → components/templates}/home.vue +4 -1
- package/{layouts → components/templates}/plain.vue +4 -1
- package/{layouts → components/templates}/standalone.vue +1 -5
- package/{layouts → components/templates}/unauthenticated.vue +2 -3
- package/composables/useCompactInput.test.ts +36 -0
- package/composables/useCompactInput.ts +20 -0
- package/composables/useLabeledFormElement.test.ts +135 -0
- package/composables/useLabeledFormElement.ts +138 -0
- package/config/harvester-manager-types.js +2 -0
- package/config/home-links.js +2 -1
- package/config/labels-annotations.js +2 -1
- package/config/middleware.js +0 -6
- package/config/pagination-table-headers.js +57 -0
- package/config/pod-security-admission.ts +1 -1
- package/config/private-label.js +21 -1
- package/config/product/auth.js +1 -0
- package/config/product/explorer.js +166 -45
- package/config/product/fleet.js +6 -1
- package/config/product/legacy.js +2 -11
- package/config/product/manager.js +51 -25
- package/config/query-params.js +2 -0
- package/config/roles.ts +23 -0
- package/config/router/index.js +23 -0
- package/config/router/navigation-guards/attempt-first-login.js +73 -0
- package/config/router/navigation-guards/authentication.js +63 -0
- package/config/router/navigation-guards/i18n.js +13 -0
- package/config/router/navigation-guards/index.js +16 -0
- package/config/router/navigation-guards/load-initial-settings.js +15 -0
- package/config/router/routes.js +487 -0
- package/config/settings.ts +31 -2
- package/config/store.js +8 -4
- package/config/system-namespaces.js +3 -0
- package/config/table-headers.js +66 -1
- package/config/types.js +35 -20
- package/config/uiplugins.js +10 -5
- package/core/plugin-helpers.js +4 -6
- package/core/plugin-routes.ts +56 -114
- package/core/plugin.ts +18 -11
- package/core/plugins-loader.js +7 -9
- package/core/plugins.js +289 -285
- package/core/types-provisioning.ts +7 -0
- package/creators/app/app.package.json +2 -1
- package/creators/app/files/.eslintignore +0 -2
- package/creators/app/files/.gitlab-ci.yml +14 -0
- package/creators/app/files/.vscode/settings.json +0 -1
- package/creators/app/init +19 -0
- package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +2 -6
- package/creators/pkg/files/.github/workflows/build-extension-charts.yml +2 -6
- package/creators/pkg/init +32 -0
- package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +119 -0
- package/detail/__tests__/service.test.ts +62 -0
- package/detail/catalog.cattle.io.app.vue +1 -1
- package/detail/cis.cattle.io.clusterscan.vue +14 -3
- package/detail/fleet.cattle.io.bundle.vue +1 -1
- package/detail/fleet.cattle.io.cluster.vue +11 -1
- package/detail/fleet.cattle.io.gitrepo.vue +15 -9
- package/detail/namespace.vue +2 -2
- package/detail/networking.k8s.io.ingress.vue +52 -19
- package/detail/node.vue +22 -3
- package/detail/provisioning.cattle.io.cluster.vue +31 -13
- package/detail/service.vue +1 -1
- package/detail/workload/index.vue +1 -0
- package/dialog/AddCustomBadgeDialog.vue +318 -161
- package/dialog/DeactivateDriverDialog.vue +137 -0
- package/dialog/RollbackWorkloadDialog.vue +2 -2
- package/dialog/RotateCertificatesDialog.vue +0 -21
- package/dialog/ScaleMachineDownDialog.vue +34 -17
- package/directives/clean-html.js +15 -0
- package/directives/clean-tooltip.js +32 -0
- package/directives/focus.js +41 -0
- package/directives/int-number.js +21 -0
- package/directives/positive-int-number.js +19 -0
- package/directives/trim-whitespace.js +19 -0
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +3 -2
- package/edit/__tests__/kontainerDriver.test.ts +107 -0
- package/edit/__tests__/management.cattle.io.clusterroletemplatebinding.test.ts +12 -1
- package/edit/__tests__/management.cattle.io.setting.test.ts +2 -1
- package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +2 -3
- package/edit/__tests__/nodeDriver.test.ts +107 -0
- package/edit/__tests__/service.test.ts +85 -0
- package/edit/__tests__/ui.cattle.io.navlink.test.ts +3 -1
- package/edit/auth/AuthProviderWarningBanners.vue +34 -0
- package/edit/auth/__tests__/AuthProviderWarningBanners.test.ts +19 -0
- package/edit/auth/__tests__/azuread.test.ts +241 -0
- package/edit/auth/__tests__/oidc.test.ts +137 -0
- package/edit/auth/azuread.vue +133 -31
- package/edit/auth/github.vue +5 -17
- package/edit/auth/googleoauth.vue +6 -23
- package/edit/auth/ldap/index.vue +5 -17
- package/edit/auth/oidc.vue +143 -42
- package/edit/auth/saml.vue +5 -14
- package/edit/catalog.cattle.io.clusterrepo.vue +177 -9
- package/edit/cis.cattle.io.clusterscan.vue +5 -2
- package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
- package/edit/cloudcredential.vue +28 -4
- package/edit/configmap.vue +10 -4
- package/edit/fleet.cattle.io.gitrepo.vue +3 -1
- package/edit/helm.cattle.io.projecthelmchart.vue +29 -19
- package/edit/kontainerDriver.vue +65 -0
- package/edit/logging-flow/Match.vue +10 -9
- package/edit/logging-flow/index.vue +4 -19
- package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +232 -2
- package/edit/logging.banzaicloud.io.output/index.vue +43 -26
- package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +3 -3
- package/edit/management.cattle.io.project.vue +3 -53
- package/edit/management.cattle.io.setting.vue +52 -2
- package/edit/management.cattle.io.user.vue +2 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +10 -7
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +21 -16
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +2 -2
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +1 -1
- package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +15 -3
- package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +4 -1
- package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +2 -0
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +2 -0
- package/edit/networking.k8s.io.ingress/Rules.vue +8 -3
- package/edit/networking.k8s.io.ingress/index.vue +64 -8
- package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -0
- package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +6 -2
- package/edit/networking.k8s.io.networkpolicy/__tests__/{PolicyRuleTarget.spec.ts → PolicyRuleTarget.test.ts} +46 -7
- package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → selectors.test.ts} +1 -1
- package/edit/networking.k8s.io.networkpolicy/index.vue +2 -0
- package/edit/nodeDriver.vue +65 -0
- package/edit/persistentvolume/index.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +33 -16
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +276 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +3 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +77 -13
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +391 -0
- package/edit/provisioning.cattle.io.cluster/import.vue +4 -4
- package/edit/provisioning.cattle.io.cluster/index.vue +126 -51
- package/edit/provisioning.cattle.io.cluster/rke2.vue +325 -791
- package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +217 -0
- package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +123 -129
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
- package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
- package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +1 -0
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
- package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +190 -0
- package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +3 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +148 -0
- package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
- package/edit/resources.cattle.io.backup.vue +139 -124
- package/edit/resources.cattle.io.restore.vue +146 -126
- package/edit/service.vue +13 -0
- package/edit/serviceaccount.vue +46 -4
- package/edit/token.vue +3 -1
- package/edit/workload/Upgrading.vue +3 -2
- package/edit/workload/__tests__/Job.test.ts +1 -3
- package/edit/workload/__tests__/Upgrading.test.ts +2 -2
- package/edit/workload/index.vue +2 -1
- package/edit/workload/mixins/workload.js +35 -2
- package/edit/workload/storage/emptyDir.vue +2 -2
- package/initialize/App.vue +75 -0
- package/initialize/app-extended.js +128 -0
- package/initialize/entry-helpers.js +546 -0
- package/initialize/entry.js +32 -0
- package/initialize/install-components.js +23 -0
- package/initialize/install-directives.js +59 -0
- package/initialize/install-plugins.js +123 -0
- package/list/__tests__/workload.test.ts +1 -1
- package/list/catalog.cattle.io.app.vue +1 -0
- package/list/cis.cattle.io.clusterscan.vue +16 -10
- package/list/group.principal.vue +2 -2
- package/list/management.cattle.io.feature.vue +16 -16
- package/list/management.cattle.io.setting.vue +1 -0
- package/list/management.cattle.io.user.vue +13 -4
- package/list/networking.k8s.io.ingress.vue +36 -0
- package/list/node.vue +212 -73
- package/list/provisioning.cattle.io.cluster.vue +17 -4
- package/list/ui.cattle.io.navlink.vue +2 -2
- package/list/workload.vue +22 -0
- package/machine-config/__tests__/vmwarevsphere-pool-config-merge.test.ts +30 -0
- package/machine-config/__tests__/vmwarevsphere.test.ts +1 -3
- package/machine-config/amazonec2.vue +1 -1
- package/machine-config/azure.vue +2 -1
- package/machine-config/generic.vue +11 -15
- package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
- package/machine-config/vmwarevsphere.vue +31 -27
- package/middleware/authenticated.js +23 -399
- package/mixins/__tests__/chart.test.ts +48 -6
- package/mixins/__tests__/create-edit-view.test.ts +2 -3
- package/mixins/auth-config.js +5 -9
- package/mixins/brand.js +102 -96
- package/mixins/chart.js +27 -13
- package/mixins/create-edit-view/index.js +2 -2
- package/mixins/fetch.client.js +42 -48
- package/mixins/labeled-form-element.ts +27 -2
- package/mixins/page-actions.js +7 -5
- package/mixins/resource-fetch-api-pagination.js +304 -0
- package/mixins/resource-fetch-namespaced.js +1 -1
- package/mixins/resource-fetch.js +46 -5
- package/models/__tests__/cluster.test.ts +44 -0
- package/models/__tests__/fleet.cattle.io.cluster.test.ts +36 -0
- package/models/__tests__/management.cattle.io.cluster.test.ts +23 -0
- package/models/__tests__/management.cattle.io.node.ts +85 -0
- package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
- package/models/__tests__/namespace.test.ts +49 -9
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +241 -0
- package/models/__tests__/schema.tests.ts +24 -0
- package/models/__tests__/secret.test.ts +37 -0
- package/models/__tests__/steve-schema.test.ts +73 -0
- package/models/__tests__/storage.k8s.io.storageclass.test.ts +22 -0
- package/models/__tests__/workload.test.ts +91 -0
- package/models/catalog.cattle.io.app.js +8 -0
- package/models/catalog.cattle.io.clusterrepo.js +9 -1
- package/models/catalog.cattle.io.uiplugin.js +7 -8
- package/models/cis.cattle.io.clusterscan.js +29 -8
- package/models/cloudcredential.js +9 -1
- package/models/cluster/node.js +8 -4
- package/models/cluster/schema.js +6 -0
- package/models/cluster.js +33 -0
- package/models/cluster.x-k8s.io.machine.js +1 -1
- package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
- package/models/driver.js +63 -0
- package/models/fleet.cattle.io.cluster.js +27 -11
- package/models/fleet.cattle.io.gitrepo.js +66 -13
- package/models/helm.cattle.io.projecthelmchart.js +1 -1
- package/models/kontainerdriver.js +85 -0
- package/models/management/schema.js +6 -0
- package/models/management.cattle.io.authconfig.js +3 -2
- package/models/management.cattle.io.cluster.js +16 -7
- package/models/management.cattle.io.globalrole.js +2 -0
- package/models/management.cattle.io.kontainerdriver.js +1 -0
- package/models/management.cattle.io.node.js +18 -14
- package/models/management.cattle.io.nodepool.js +17 -0
- package/models/management.cattle.io.project.js +0 -36
- package/models/management.cattle.io.setting.js +11 -7
- package/models/management.cattle.io.user.js +2 -2
- package/models/monitoring.coreos.com.receiver.js +3 -1
- package/models/monitoring.coreos.com.route.js +1 -1
- package/models/namespace.js +1 -1
- package/models/networking.k8s.io.ingress.js +2 -1
- package/models/nodedriver.js +85 -0
- package/models/pod.js +20 -0
- package/models/provisioning.cattle.io.cluster.js +125 -10
- package/models/schema.js +28 -7
- package/models/secret.js +126 -18
- package/models/service.js +2 -0
- package/models/steve-schema.ts +254 -0
- package/models/storage.k8s.io.storageclass.js +1 -1
- package/models/workload.js +17 -0
- package/models/workload.service.js +18 -0
- package/package.json +18 -14
- package/pages/about.vue +12 -6
- package/pages/account/create-key.vue +0 -1
- package/pages/account/index.vue +7 -3
- package/pages/auth/login.vue +106 -103
- package/pages/auth/logout.vue +2 -4
- package/pages/auth/setup.vue +92 -66
- package/pages/auth/verify.vue +30 -24
- package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +2 -17
- package/pages/c/_cluster/apps/charts/chart.vue +54 -9
- package/pages/c/_cluster/apps/charts/index.vue +99 -69
- package/pages/c/_cluster/apps/charts/install.helpers.js +2 -13
- package/pages/c/_cluster/apps/charts/install.vue +12 -11
- package/pages/c/_cluster/auth/config/_id.vue +0 -6
- package/pages/c/_cluster/auth/config/index.vue +15 -9
- package/pages/c/_cluster/auth/roles/index.vue +8 -10
- package/pages/c/_cluster/ecm/index.vue +0 -2
- package/pages/c/_cluster/explorer/ConfigBadge.vue +13 -8
- package/pages/c/_cluster/explorer/EventsTable.vue +18 -0
- package/pages/c/_cluster/explorer/__tests__/index.test.ts +181 -0
- package/pages/c/_cluster/explorer/index.vue +253 -91
- package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
- package/pages/c/_cluster/explorer/tools/index.vue +10 -6
- package/pages/c/_cluster/fleet/index.vue +89 -94
- package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +89 -0
- package/pages/c/_cluster/longhorn/index.vue +52 -17
- package/pages/c/_cluster/manager/cloudCredential/index.vue +18 -25
- package/pages/c/_cluster/manager/drivers/kontainerDriver/_id.vue +12 -0
- package/pages/c/_cluster/manager/drivers/kontainerDriver/create.vue +15 -0
- package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +91 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/_id.vue +12 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/create.vue +15 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +60 -0
- package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
- package/pages/c/_cluster/manager/pages/_page.vue +4 -5
- package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
- package/pages/c/_cluster/monitoring/route-receiver/index.vue +2 -2
- package/pages/c/_cluster/neuvector/index.vue +1 -0
- package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
- package/pages/c/_cluster/settings/banners.vue +86 -10
- package/pages/c/_cluster/settings/brand.vue +261 -38
- package/pages/c/_cluster/settings/index.vue +4 -6
- package/pages/c/_cluster/settings/links.vue +3 -2
- package/pages/c/_cluster/settings/performance.vue +71 -3
- package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +12 -8
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
- package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
- package/pages/c/_cluster/uiplugins/InstallDialog.vue +55 -19
- package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +36 -301
- package/pages/c/_cluster/uiplugins/UninstallDialog.vue +14 -6
- package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +52 -106
- package/pages/c/_cluster/uiplugins/index.vue +38 -54
- package/pages/diagnostic.vue +2 -2
- package/pages/fail-whale.vue +103 -42
- package/pages/home.vue +81 -24
- package/pages/prefs.vue +8 -4
- package/pages/support/index.vue +14 -10
- package/pkg/auto-import.js +1 -1
- package/plugins/axios.js +0 -36
- package/plugins/back-button.js +3 -5
- package/plugins/clean-html-directive.js +5 -30
- package/plugins/clean-html.js +53 -0
- package/plugins/clean-tooltip-directive.js +6 -31
- package/plugins/codemirror-loader.js +1 -1
- package/plugins/codemirror.js +41 -9
- package/plugins/dashboard-store/__tests__/mutations.test.ts +389 -0
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
- package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
- package/plugins/dashboard-store/actions.js +132 -25
- package/plugins/dashboard-store/classify.js +1 -18
- package/plugins/dashboard-store/getters.js +154 -44
- package/plugins/dashboard-store/index.js +0 -111
- package/plugins/dashboard-store/mutations.js +150 -52
- package/plugins/dashboard-store/resource-class.js +77 -127
- package/plugins/directives.js +6 -39
- package/plugins/ember-cookie.js +13 -0
- package/plugins/global-formatters.js +26 -5
- package/plugins/i18n.js +89 -55
- package/plugins/int-number.js +6 -20
- package/plugins/plugin.js +3 -3
- package/plugins/positive-int-number.js +6 -17
- package/plugins/steve/__tests__/{getters.spec.ts → getters.test.ts} +81 -10
- package/plugins/steve/__tests__/mutations.test.ts +49 -0
- package/plugins/steve/__tests__/resource-utils.test.ts +159 -0
- package/plugins/steve/__tests__/steve-class.test.ts +59 -0
- package/plugins/steve/__tests__/subscribe.spec.ts +4 -1
- package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
- package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
- package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
- package/plugins/steve/actions.js +3 -38
- package/plugins/steve/getters.js +164 -61
- package/plugins/steve/hybrid-class.js +5 -1
- package/plugins/steve/mutations.js +24 -3
- package/plugins/steve/norman-class.js +142 -2
- package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
- package/plugins/steve/resource-utils.ts +38 -0
- package/plugins/steve/schema.d.ts +22 -0
- package/plugins/steve/steve-class.js +22 -0
- package/plugins/steve/steve-pagination-utils.ts +368 -0
- package/plugins/steve/subscribe.js +17 -76
- package/plugins/trim-whitespace.js +6 -34
- package/plugins/vue-js-modal.js +1 -1
- package/promptRemove/pod.vue +15 -7
- package/public/index.html +1 -0
- package/rancher-components/Accordion/Accordion.test.ts +45 -0
- package/rancher-components/Accordion/Accordion.vue +86 -0
- package/rancher-components/Accordion/index.ts +1 -0
- package/rancher-components/BadgeState/BadgeState.vue +3 -3
- package/rancher-components/Banner/Banner.test.ts +1 -5
- package/rancher-components/Banner/Banner.vue +2 -2
- package/rancher-components/Card/Card.vue +4 -4
- package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +18 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +57 -24
- package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
- package/rancher-components/Form/Radio/RadioButton.vue +13 -7
- package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/StringList/StringList.test.ts +270 -0
- package/rancher-components/StringList/StringList.vue +65 -26
- package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +69 -0
- package/scripts/clean +1 -1
- package/scripts/extension/bundle +19 -7
- package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +11 -0
- package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -0
- package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
- package/scripts/extension/helm/package/Dockerfile +1 -1
- package/scripts/extension/helm/scripts/package +11 -3
- package/scripts/extension/helm/scripts/patch +27 -0
- package/scripts/extension/parse-tag-name +4 -4
- package/scripts/extension/publish +25 -14
- package/scripts/publish-shell.sh +11 -1
- package/scripts/serve-pkgs +0 -2
- package/scripts/test-plugins-build.sh +87 -11
- package/scripts/vue-migrate.js +683 -0
- package/server/har-file.js +183 -0
- package/store/__tests__/catalog.test.ts +224 -0
- package/store/__tests__/type-map.test.ts +1122 -0
- package/store/auth.js +23 -4
- package/store/aws.js +53 -6
- package/store/catalog.js +22 -6
- package/store/cru-resource.ts +26 -0
- package/store/customisation.js +35 -0
- package/store/features.js +7 -4
- package/store/i18n.js +11 -0
- package/store/index.js +140 -49
- package/store/plugins.js +8 -4
- package/store/prefs.js +33 -38
- package/store/type-map.js +288 -213
- package/store/type-map.utils.ts +226 -0
- package/tsconfig.json +34 -9
- package/tsconfig.paths.json +21 -0
- package/types/components/labeledSelect.ts +50 -0
- package/types/resources/settings.d.ts +32 -0
- package/types/{userPreferences.d.ts → resources/userPreferences.d.ts} +0 -1
- package/types/shell/index.d.ts +1045 -770
- package/types/store/dashboard-store.types.ts +42 -0
- package/types/store/pagination.types.ts +457 -0
- package/types/store/type-map.ts +30 -0
- package/types/store/vuex.d.ts +9 -0
- package/types/vue-shim.d.ts +51 -0
- package/utils/__tests__/cluster.test.ts +20 -18
- package/utils/__tests__/create-yaml.test.ts +359 -2
- package/utils/__tests__/kontainer.test.ts +180 -0
- package/utils/__tests__/pod-security-admission.test.ts +1 -1
- package/utils/alertmanagerconfig.js +19 -0
- package/utils/array.ts +40 -1
- package/utils/async.ts +2 -0
- package/utils/auth.js +152 -4
- package/utils/axios.js +2 -21
- package/utils/azure.js +24 -0
- package/utils/banners.js +103 -0
- package/utils/clipboard.js +5 -0
- package/utils/cluster.js +1 -1
- package/utils/config.js +4 -0
- package/utils/create-yaml.js +59 -28
- package/utils/custom-validators.js +0 -2
- package/utils/error.js +41 -1
- package/utils/formatter.js +5 -3
- package/utils/git.ts +1 -1
- package/utils/install-redirect.js +1 -1
- package/utils/kontainer.ts +190 -0
- package/utils/object.js +24 -0
- package/utils/pagination-utils.ts +154 -0
- package/utils/pod-security-admission.ts +1 -1
- package/utils/router.js +86 -0
- package/utils/settings.ts +46 -0
- package/utils/time.js +2 -1
- package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
- package/utils/url.ts +1 -1
- package/utils/validators/formRules/__tests__/index.test.ts +70 -4
- package/utils/validators/formRules/index.ts +15 -9
- package/utils/validators/index.js +1 -0
- package/utils/validators/setting.js +6 -10
- package/utils/version.js +2 -1
- package/vue.config.js +377 -401
- package/.DS_Store +0 -0
- package/assets/images/providers/aks-black.svg +0 -28
- package/assets/images/providers/aks.svg +0 -31
- package/assets/styles/vendor/vue-js-modal.scss +0 -16
- package/components/ChartPsp.vue +0 -76
- package/components/EventsTable.vue +0 -67
- package/components/TabbedLinks/index.vue +0 -94
- package/components/__tests__/ChartPsp.test.ts +0 -75
- package/components/formatter/__tests__/ClusterProvider.test.ts +0 -28
- package/components/nuxt/nuxt-link.server.js +0 -16
- package/components/nuxt/nuxt.js +0 -101
- package/config/router.js +0 -408
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -237
- package/initialize/App.js +0 -198
- package/initialize/client.js +0 -875
- package/initialize/index.js +0 -364
- package/initialize/layouts.ts +0 -26
- package/middleware/i18n.js +0 -10
- package/middleware/unauthenticated.js +0 -22
- package/mixins/fetch.server.js +0 -73
- package/pages/c/_cluster/apps/index.vue +0 -17
- package/pages/c/_cluster/auth/index.vue +0 -19
- package/pages/c/_cluster/index.vue +0 -17
- package/pages/c/_cluster/legacy/index.vue +0 -22
- package/pages/c/_cluster/manager/index.vue +0 -22
- package/pages/c/_cluster/mcapps/index.vue +0 -21
- package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +0 -232
- package/pages/c/index.vue +0 -9
- package/pages/rio/mesh.vue +0 -508
- package/plugins/dashboard-store/__tests__/mutations.spec.ts +0 -406
- package/plugins/dashboard-store/rehydrate-all.js +0 -44
- package/plugins/portal-vue.js +0 -4
- package/plugins/portal.js +0 -4
- package/plugins/resize.js +0 -5
- package/plugins/shortkey.js +0 -4
- package/plugins/tooltip.js +0 -4
- package/plugins/transitions.js +0 -4
- package/plugins/v-select.js +0 -4
- package/plugins/vue-clipboard2.js +0 -4
- package/tsconfig.default.json +0 -46
- package/utils/group.js +0 -70
- package/utils/nuxt.js +0 -659
- package/utils/router.scrollBehavior.js +0 -80
- /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
- /package/models/__tests__/{node.ts → node.test.ts} +0 -0
- /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
- /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
- /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
- /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
- /package/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
|
@@ -45,7 +45,7 @@ export default {
|
|
|
45
45
|
const schema = this.schema;
|
|
46
46
|
|
|
47
47
|
if ( this.hasListComponent ) {
|
|
48
|
-
// If you provide your own list then call its
|
|
48
|
+
// If you provide your own list then call its fetch
|
|
49
49
|
const importer = this.listComponent;
|
|
50
50
|
const component = (await importer())?.default;
|
|
51
51
|
|
|
@@ -55,7 +55,7 @@ export default {
|
|
|
55
55
|
|
|
56
56
|
// If your list page has a fetch then it's responsible for populating rows itself
|
|
57
57
|
if ( component?.fetch ) {
|
|
58
|
-
this.
|
|
58
|
+
this.componentWillFetch = true;
|
|
59
59
|
}
|
|
60
60
|
|
|
61
61
|
// If the custom component supports it, ask it what resources it loads, so we can
|
|
@@ -68,15 +68,15 @@ export default {
|
|
|
68
68
|
}
|
|
69
69
|
}
|
|
70
70
|
|
|
71
|
-
if ( !this.
|
|
71
|
+
if ( !this.componentWillFetch ) {
|
|
72
72
|
if ( !schema ) {
|
|
73
73
|
store.dispatch('loadingError', new Error(this.t('nav.failWhale.resourceListNotFound', { resource }, true)));
|
|
74
74
|
|
|
75
75
|
return;
|
|
76
76
|
}
|
|
77
77
|
|
|
78
|
-
// See comment for `
|
|
79
|
-
if (!this.namespaceFilterRequired) {
|
|
78
|
+
// See comment for `namespaceFilter` and `pagination` watchers, skip fetch if we're not ready yet... and something is going to call fetch later on
|
|
79
|
+
if (!this.namespaceFilterRequired && (!this.canPaginate || this.refreshFlag)) {
|
|
80
80
|
await this.$fetchType(resource);
|
|
81
81
|
}
|
|
82
82
|
}
|
|
@@ -103,7 +103,11 @@ export default {
|
|
|
103
103
|
extensionType: ExtensionPoint.PANEL,
|
|
104
104
|
extensionLocation: PanelLocation.RESOURCE_LIST,
|
|
105
105
|
loadResources: [resource], // List of resources that will be loaded, this could be many (`Workloads`)
|
|
106
|
-
|
|
106
|
+
/**
|
|
107
|
+
* Will the custom component handle the fetch of resources....
|
|
108
|
+
* or will this instance fetch resources
|
|
109
|
+
*/
|
|
110
|
+
componentWillFetch: false,
|
|
107
111
|
// manual refresh
|
|
108
112
|
manualRefreshInit: false,
|
|
109
113
|
watch: false,
|
|
@@ -113,7 +117,7 @@ export default {
|
|
|
113
117
|
// incremental loading
|
|
114
118
|
loadIndeterminate: false,
|
|
115
119
|
// query param for simple filtering
|
|
116
|
-
useQueryParamsForSimpleFiltering: true
|
|
120
|
+
useQueryParamsForSimpleFiltering: true,
|
|
117
121
|
};
|
|
118
122
|
},
|
|
119
123
|
|
|
@@ -124,7 +128,7 @@ export default {
|
|
|
124
128
|
return [];
|
|
125
129
|
}
|
|
126
130
|
|
|
127
|
-
return this.$store.getters['type-map/headersFor'](this.schema);
|
|
131
|
+
return this.$store.getters['type-map/headersFor'](this.schema, this.canPaginate);
|
|
128
132
|
},
|
|
129
133
|
|
|
130
134
|
groupBy() {
|
|
@@ -138,6 +142,7 @@ export default {
|
|
|
138
142
|
},
|
|
139
143
|
|
|
140
144
|
watch: {
|
|
145
|
+
|
|
141
146
|
/**
|
|
142
147
|
* When a NS filter is required and the user selects a different one, kick off a new set of API requests
|
|
143
148
|
*
|
|
@@ -148,14 +153,46 @@ export default {
|
|
|
148
153
|
* This covers case 1
|
|
149
154
|
*/
|
|
150
155
|
namespaceFilter(neu, old) {
|
|
151
|
-
if (
|
|
152
|
-
|
|
156
|
+
if (neu && !this.componentWillFetch) {
|
|
157
|
+
if (sameContents(neu, old)) {
|
|
158
|
+
return;
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
this.$fetchType(this.resource);
|
|
153
162
|
}
|
|
163
|
+
},
|
|
154
164
|
|
|
155
|
-
|
|
165
|
+
/**
|
|
166
|
+
* When a pagination is required and the user changes page / sort / filter, kick off a new set of API requests
|
|
167
|
+
*
|
|
168
|
+
* ResourceList has two modes
|
|
169
|
+
* 1) ResourceList component handles API request to fetch resources
|
|
170
|
+
* 2) Custom list component handles API request to fetch resources
|
|
171
|
+
*
|
|
172
|
+
* This covers case 1
|
|
173
|
+
*/
|
|
174
|
+
pagination(neu, old) {
|
|
175
|
+
if (neu && !this.componentWillFetch && !this.paginationEqual(neu, old)) {
|
|
156
176
|
this.$fetchType(this.resource);
|
|
157
177
|
}
|
|
158
|
-
}
|
|
178
|
+
},
|
|
179
|
+
|
|
180
|
+
/**
|
|
181
|
+
* Monitor the rows to ensure deleting the last entry in a server-side paginated page doesn't
|
|
182
|
+
* result in an empty page
|
|
183
|
+
*/
|
|
184
|
+
rows(neu) {
|
|
185
|
+
if (!this.pagination) {
|
|
186
|
+
return;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
if (this.pagination.page > 1 && neu.length === 0) {
|
|
190
|
+
this.setPagination({
|
|
191
|
+
...this.pagination,
|
|
192
|
+
page: this.pagination.page - 1
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
},
|
|
159
196
|
},
|
|
160
197
|
|
|
161
198
|
created() {
|
|
@@ -184,6 +221,16 @@ export default {
|
|
|
184
221
|
{{ t('resourceList.nsFiltering') }}
|
|
185
222
|
</template>
|
|
186
223
|
</IconMessage>
|
|
224
|
+
<IconMessage
|
|
225
|
+
v-else-if="paginationNsFilterRequired"
|
|
226
|
+
:vertical="true"
|
|
227
|
+
:subtle="false"
|
|
228
|
+
icon="icon-filter_alt"
|
|
229
|
+
>
|
|
230
|
+
<template #message>
|
|
231
|
+
{{ t('resourceList.nsFilteringGeneric') }}
|
|
232
|
+
</template>
|
|
233
|
+
</IconMessage>
|
|
187
234
|
<div v-else>
|
|
188
235
|
<Masthead
|
|
189
236
|
v-if="showMasthead"
|
|
@@ -217,6 +264,7 @@ export default {
|
|
|
217
264
|
v-else
|
|
218
265
|
:schema="schema"
|
|
219
266
|
:rows="rows"
|
|
267
|
+
:alt-loading="canPaginate"
|
|
220
268
|
:loading="loading"
|
|
221
269
|
:headers="headers"
|
|
222
270
|
:group-by="groupBy"
|
|
@@ -225,11 +273,14 @@ export default {
|
|
|
225
273
|
:adv-filter-prevent-filtering-labels="advFilterPreventFilteringLabels"
|
|
226
274
|
:use-query-params-for-simple-filtering="useQueryParamsForSimpleFiltering"
|
|
227
275
|
:force-update-live-and-delayed="forceUpdateLiveAndDelayed"
|
|
276
|
+
:external-pagination-enabled="canPaginate"
|
|
277
|
+
:external-pagination-result="paginationResult"
|
|
278
|
+
@pagination-changed="paginationChanged"
|
|
228
279
|
/>
|
|
229
280
|
</div>
|
|
230
281
|
</template>
|
|
231
282
|
|
|
232
|
-
|
|
283
|
+
<style lang="scss" scoped>
|
|
233
284
|
.header {
|
|
234
285
|
position: relative;
|
|
235
286
|
}
|
|
@@ -245,4 +296,4 @@ export default {
|
|
|
245
296
|
top: 10px;
|
|
246
297
|
right: 10px;
|
|
247
298
|
}
|
|
248
|
-
|
|
299
|
+
</style>
|
|
@@ -59,6 +59,11 @@ export default {
|
|
|
59
59
|
required: false
|
|
60
60
|
},
|
|
61
61
|
|
|
62
|
+
altLoading: {
|
|
63
|
+
type: Boolean,
|
|
64
|
+
required: false
|
|
65
|
+
},
|
|
66
|
+
|
|
62
67
|
keyField: {
|
|
63
68
|
// Field that is unique for each row.
|
|
64
69
|
type: String,
|
|
@@ -97,6 +102,14 @@ export default {
|
|
|
97
102
|
default: 'sortableTable.paging.resource',
|
|
98
103
|
},
|
|
99
104
|
|
|
105
|
+
/**
|
|
106
|
+
* Additional params to pass to the pagingLabel translation
|
|
107
|
+
*/
|
|
108
|
+
pagingParams: {
|
|
109
|
+
type: Object,
|
|
110
|
+
default: null,
|
|
111
|
+
},
|
|
112
|
+
|
|
100
113
|
rowActions: {
|
|
101
114
|
type: Boolean,
|
|
102
115
|
default: true,
|
|
@@ -158,6 +171,16 @@ export default {
|
|
|
158
171
|
forceUpdateLiveAndDelayed: {
|
|
159
172
|
type: Number,
|
|
160
173
|
default: 0
|
|
174
|
+
},
|
|
175
|
+
|
|
176
|
+
externalPaginationEnabled: {
|
|
177
|
+
type: Boolean,
|
|
178
|
+
default: false
|
|
179
|
+
},
|
|
180
|
+
|
|
181
|
+
externalPaginationResult: {
|
|
182
|
+
type: Object,
|
|
183
|
+
default: null
|
|
161
184
|
}
|
|
162
185
|
},
|
|
163
186
|
|
|
@@ -176,24 +199,31 @@ export default {
|
|
|
176
199
|
},
|
|
177
200
|
|
|
178
201
|
data() {
|
|
179
|
-
const options = this.$store.getters[`type-map/optionsFor`](this.schema);
|
|
180
|
-
const listGroups = options?.listGroups || [];
|
|
181
|
-
const listGroupMapped = listGroups.reduce((acc, grp) => {
|
|
182
|
-
acc[grp.value] = grp;
|
|
183
|
-
|
|
184
|
-
return acc;
|
|
185
|
-
}, {});
|
|
186
|
-
|
|
187
202
|
// Confirm which store we're in, if schema isn't available we're probably showing a list with different types
|
|
188
203
|
const inStore = this.schema?.id ? this.$store.getters['currentStore'](this.schema.id) : undefined;
|
|
189
204
|
|
|
190
|
-
return {
|
|
191
|
-
listGroups, listGroupMapped, inStore
|
|
192
|
-
};
|
|
205
|
+
return { inStore };
|
|
193
206
|
},
|
|
194
207
|
|
|
195
208
|
computed: {
|
|
209
|
+
options() {
|
|
210
|
+
return this.$store.getters[`type-map/optionsFor`](this.schema, this.externalPaginationEnabled);
|
|
211
|
+
},
|
|
212
|
+
|
|
213
|
+
_listGroupMapped() {
|
|
214
|
+
return this.options?.listGroups?.reduce((acc, grp) => {
|
|
215
|
+
acc[grp.value] = grp;
|
|
216
|
+
|
|
217
|
+
return acc;
|
|
218
|
+
}, {});
|
|
219
|
+
},
|
|
220
|
+
|
|
221
|
+
_mandatorySort() {
|
|
222
|
+
return this.options?.listMandatorySort;
|
|
223
|
+
},
|
|
224
|
+
|
|
196
225
|
...mapGetters(['currentProduct']),
|
|
226
|
+
|
|
197
227
|
isNamespaced() {
|
|
198
228
|
if ( this.namespaced !== null ) {
|
|
199
229
|
return this.namespaced;
|
|
@@ -228,7 +258,7 @@ export default {
|
|
|
228
258
|
if ( this.headers ) {
|
|
229
259
|
headers = this.headers.slice();
|
|
230
260
|
} else {
|
|
231
|
-
headers = this.$store.getters['type-map/headersFor'](this.schema);
|
|
261
|
+
headers = this.$store.getters['type-map/headersFor'](this.schema, this.externalPaginationEnabled);
|
|
232
262
|
}
|
|
233
263
|
|
|
234
264
|
// add custom table columns provided by the extensions ExtensionPoint.TABLE_COL hook
|
|
@@ -275,7 +305,7 @@ export default {
|
|
|
275
305
|
}
|
|
276
306
|
|
|
277
307
|
// If we are grouping by a custom group, it may specify that we hide a specific column
|
|
278
|
-
const custom = this.
|
|
308
|
+
const custom = this._listGroupMapped?.[this.group];
|
|
279
309
|
|
|
280
310
|
if (custom?.hideColumn) {
|
|
281
311
|
const idx = headers.findIndex((header) => header.name === custom.hideColumn);
|
|
@@ -288,6 +318,9 @@ export default {
|
|
|
288
318
|
return headers;
|
|
289
319
|
},
|
|
290
320
|
|
|
321
|
+
/**
|
|
322
|
+
* Take rows and filter out entries given the namespace filter
|
|
323
|
+
*/
|
|
291
324
|
filteredRows() {
|
|
292
325
|
const isAll = this.$store.getters['isAllNamespaces'];
|
|
293
326
|
|
|
@@ -295,6 +328,7 @@ export default {
|
|
|
295
328
|
if (
|
|
296
329
|
!this.isNamespaced || // Resource type isn't namespaced
|
|
297
330
|
this.ignoreFilter || // Component owner strictly states no filtering
|
|
331
|
+
this.externalPaginationEnabled ||
|
|
298
332
|
(isAll && !this.currentProduct?.hideSystemResources) || // Need all
|
|
299
333
|
(this.inStore ? this.$store.getters[`${ this.inStore }/haveNamespace`](this.schema.id)?.length : false)// Store reports type has namespace filter, so rows already contain the correctly filtered resources
|
|
300
334
|
) {
|
|
@@ -336,7 +370,14 @@ export default {
|
|
|
336
370
|
const exists = this.groupOptions.find((g) => g.value === this._group);
|
|
337
371
|
|
|
338
372
|
if (!exists) {
|
|
339
|
-
|
|
373
|
+
// Attempt to find the default option in available options...
|
|
374
|
+
// if not use the first value in the options collection...
|
|
375
|
+
// and if not that just fall back to the default
|
|
376
|
+
if (this.groupOptions.find((g) => g.value === DEFAULT_GROUP)) {
|
|
377
|
+
return DEFAULT_GROUP;
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
return this.groupOptions[0]?.value || DEFAULT_GROUP;
|
|
340
381
|
}
|
|
341
382
|
|
|
342
383
|
return this._group;
|
|
@@ -349,7 +390,7 @@ export default {
|
|
|
349
390
|
showGrouping() {
|
|
350
391
|
if ( this.groupable === null ) {
|
|
351
392
|
const namespaceGroupable = this.$store.getters['isMultipleNamespaces'] && this.isNamespaced;
|
|
352
|
-
const customGroupable = this.listGroups
|
|
393
|
+
const customGroupable = !!this.options?.listGroups?.length;
|
|
353
394
|
|
|
354
395
|
return namespaceGroupable || customGroupable;
|
|
355
396
|
}
|
|
@@ -359,16 +400,19 @@ export default {
|
|
|
359
400
|
|
|
360
401
|
computedGroupBy() {
|
|
361
402
|
if ( this.groupBy ) {
|
|
403
|
+
// This probably comes from the type-map config for the resource (see ResourceList)
|
|
362
404
|
return this.groupBy;
|
|
363
405
|
}
|
|
364
406
|
|
|
365
407
|
if ( this.group === 'namespace' && this.showGrouping ) {
|
|
408
|
+
// This switches to group rows by a key which is the label for the group (??)
|
|
366
409
|
return 'groupByLabel';
|
|
367
410
|
}
|
|
368
411
|
|
|
369
|
-
const custom = this.
|
|
412
|
+
const custom = this._listGroupMapped?.[this.group];
|
|
370
413
|
|
|
371
|
-
if (custom
|
|
414
|
+
if (custom?.field) {
|
|
415
|
+
// Override the normal filtering
|
|
372
416
|
return custom.field;
|
|
373
417
|
}
|
|
374
418
|
|
|
@@ -376,6 +420,12 @@ export default {
|
|
|
376
420
|
},
|
|
377
421
|
|
|
378
422
|
groupOptions() {
|
|
423
|
+
// Ignore the defaults below, we have an override set of groups
|
|
424
|
+
// REPLACE (instead of SUPPLEMENT) defaults with listGroups (given listGroupsWillOverride is true)
|
|
425
|
+
if (this.options?.listGroupsWillOverride && !!this.options?.listGroups?.length) {
|
|
426
|
+
return this.options?.listGroups;
|
|
427
|
+
}
|
|
428
|
+
|
|
379
429
|
const standard = [
|
|
380
430
|
{
|
|
381
431
|
tooltipKey: 'resourceTable.groupBy.none',
|
|
@@ -389,10 +439,19 @@ export default {
|
|
|
389
439
|
},
|
|
390
440
|
];
|
|
391
441
|
|
|
392
|
-
|
|
442
|
+
// SUPPLEMENT (instead of REPLACE) defaults with listGroups (given listGroupsWillOverride is false)
|
|
443
|
+
if (!!this.options?.listGroups?.length) {
|
|
444
|
+
return standard.concat(this.options.listGroups);
|
|
445
|
+
}
|
|
446
|
+
|
|
447
|
+
return standard;
|
|
393
448
|
},
|
|
394
449
|
|
|
395
|
-
|
|
450
|
+
parsedPagingParams() {
|
|
451
|
+
if (this.pagingParams) {
|
|
452
|
+
return this.pagingParams;
|
|
453
|
+
}
|
|
454
|
+
|
|
396
455
|
if ( !this.schema ) {
|
|
397
456
|
return {
|
|
398
457
|
singularLabel: '',
|
|
@@ -405,6 +464,7 @@ export default {
|
|
|
405
464
|
pluralLabel: this.$store.getters['type-map/labelFor'](this.schema, 99),
|
|
406
465
|
};
|
|
407
466
|
},
|
|
467
|
+
|
|
408
468
|
},
|
|
409
469
|
|
|
410
470
|
methods: {
|
|
@@ -466,7 +526,7 @@ export default {
|
|
|
466
526
|
this.keyAction('detail');
|
|
467
527
|
}
|
|
468
528
|
}
|
|
469
|
-
}
|
|
529
|
+
},
|
|
470
530
|
};
|
|
471
531
|
</script>
|
|
472
532
|
|
|
@@ -477,12 +537,13 @@ export default {
|
|
|
477
537
|
:headers="_headers"
|
|
478
538
|
:rows="filteredRows"
|
|
479
539
|
:loading="loading"
|
|
540
|
+
:alt-loading="altLoading"
|
|
480
541
|
:group-by="computedGroupBy"
|
|
481
542
|
:group="group"
|
|
482
543
|
:group-options="groupOptions"
|
|
483
544
|
:search="search"
|
|
484
545
|
:paging="true"
|
|
485
|
-
:paging-params="
|
|
546
|
+
:paging-params="parsedPagingParams"
|
|
486
547
|
:paging-label="pagingLabel"
|
|
487
548
|
:row-actions="rowActions"
|
|
488
549
|
:table-actions="_showBulkActions"
|
|
@@ -496,8 +557,12 @@ export default {
|
|
|
496
557
|
:sort-generation-fn="safeSortGenerationFn"
|
|
497
558
|
:use-query-params-for-simple-filtering="useQueryParamsForSimpleFiltering"
|
|
498
559
|
:force-update-live-and-delayed="forceUpdateLiveAndDelayed"
|
|
560
|
+
:external-pagination-enabled="externalPaginationEnabled"
|
|
561
|
+
:external-pagination-result="externalPaginationResult"
|
|
562
|
+
:mandatory-sort="_mandatorySort"
|
|
499
563
|
@clickedActionButton="handleActionButtonClick"
|
|
500
564
|
@group-value-change="group = $event"
|
|
565
|
+
|
|
501
566
|
v-on="$listeners"
|
|
502
567
|
>
|
|
503
568
|
<template
|
|
@@ -505,6 +570,7 @@ export default {
|
|
|
505
570
|
#header-middle
|
|
506
571
|
>
|
|
507
572
|
<slot name="more-header-middle" />
|
|
573
|
+
|
|
508
574
|
<ButtonGroup
|
|
509
575
|
v-model="group"
|
|
510
576
|
:options="groupOptions"
|
|
@@ -190,6 +190,11 @@ export default {
|
|
|
190
190
|
|
|
191
191
|
cm.foldLinesMatching(/managedFields/);
|
|
192
192
|
|
|
193
|
+
// Allow the model to supply an array of json paths to fold other sections in the YAML for the given resource type
|
|
194
|
+
if (this.value?.yamlFolding) {
|
|
195
|
+
this.value.yamlFolding.forEach((path) => cm.foldYaml(path));
|
|
196
|
+
}
|
|
197
|
+
|
|
193
198
|
// regardless of edit or create we should probably fold all the comments so they dont get out of hand.
|
|
194
199
|
const saved = cm.getMode().fold;
|
|
195
200
|
|
|
@@ -357,9 +362,12 @@ export default {
|
|
|
357
362
|
:yamlPreview="preview"
|
|
358
363
|
:yamlSave="save"
|
|
359
364
|
:yamlUnpreview="unpreview"
|
|
365
|
+
:canDiff="canDiff"
|
|
360
366
|
>
|
|
361
367
|
<Footer
|
|
362
368
|
v-if="showFooter"
|
|
369
|
+
class="footer"
|
|
370
|
+
:class="{ 'edit': !isView }"
|
|
363
371
|
:mode="mode"
|
|
364
372
|
:errors="errors"
|
|
365
373
|
@save="save"
|
|
@@ -403,11 +411,29 @@ export default {
|
|
|
403
411
|
</template>
|
|
404
412
|
|
|
405
413
|
<style lang='scss' scoped>
|
|
406
|
-
.flex-content {
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
}
|
|
414
|
+
.flex-content {
|
|
415
|
+
display: flex;
|
|
416
|
+
flex-direction: column;
|
|
417
|
+
flex-grow: 1;
|
|
418
|
+
}
|
|
419
|
+
|
|
420
|
+
.footer {
|
|
421
|
+
margin-top: 20px;
|
|
422
|
+
right: 0;
|
|
423
|
+
position: sticky;
|
|
424
|
+
bottom: 0;
|
|
425
|
+
background-color: var(--header-bg);
|
|
426
|
+
|
|
427
|
+
// Overrides outlet padding
|
|
428
|
+
margin-left: -$space-m;
|
|
429
|
+
margin-right: -$space-m;
|
|
430
|
+
margin-bottom: -$space-m;
|
|
431
|
+
padding: $space-s $space-m;
|
|
432
|
+
|
|
433
|
+
&.edit {
|
|
434
|
+
border-top: var(--header-border-size) solid var(--header-border);
|
|
435
|
+
}
|
|
436
|
+
}
|
|
411
437
|
</style>
|
|
412
438
|
|
|
413
439
|
<style lang="scss">
|
|
@@ -419,6 +445,10 @@ export default {
|
|
|
419
445
|
footer .actions {
|
|
420
446
|
text-align: right;
|
|
421
447
|
}
|
|
448
|
+
|
|
449
|
+
.spacer-small {
|
|
450
|
+
padding: 0;
|
|
451
|
+
}
|
|
422
452
|
}
|
|
423
453
|
|
|
424
454
|
</style>
|
|
@@ -98,7 +98,7 @@ export default {
|
|
|
98
98
|
v-if="rows.length"
|
|
99
99
|
class="grid"
|
|
100
100
|
>
|
|
101
|
-
<
|
|
101
|
+
<component
|
|
102
102
|
:is="asLink ? 'a' : 'div'"
|
|
103
103
|
v-for="(r, idx) in rows"
|
|
104
104
|
:key="get(r, keyField)"
|
|
@@ -106,7 +106,7 @@ export default {
|
|
|
106
106
|
:target="get(r, targetField)"
|
|
107
107
|
:rel="rel"
|
|
108
108
|
class="item"
|
|
109
|
-
:data-testid="componentTestid + '-' +
|
|
109
|
+
:data-testid="componentTestid + '-' + get(r, nameField)"
|
|
110
110
|
:class="{
|
|
111
111
|
'has-description': !!get(r, descriptionField),
|
|
112
112
|
'has-side-label': !!get(r, sideLabelField), [colorFor(r, idx)]: true, disabled: get(r, disabledField) === true
|
|
@@ -154,7 +154,7 @@ export default {
|
|
|
154
154
|
>
|
|
155
155
|
{{ get(r, descriptionField) }}
|
|
156
156
|
</div>
|
|
157
|
-
</
|
|
157
|
+
</component>
|
|
158
158
|
</div>
|
|
159
159
|
<div
|
|
160
160
|
v-else
|