@rancher/shell 1.2.0 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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 +299 -63
- 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/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/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 +11 -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 +69 -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/__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/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 +84 -45
- package/components/nav/Jump.vue +19 -9
- package/components/nav/NamespaceFilter.vue +8 -1
- package/components/nav/TopLevelMenu.vue +391 -132
- 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/index.js +15 -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/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 +77 -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 +27 -9
- package/detail/service.vue +1 -1
- package/detail/workload/index.vue +1 -0
- package/dialog/AddCustomBadgeDialog.vue +318 -161
- package/dialog/DeactivateDriverDialog.vue +118 -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 +1 -0
- 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 +549 -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 +12 -14
- 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 -380
- 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 +62 -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 +68 -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 +68 -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 +17 -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 +9 -9
- 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 +94 -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 +63 -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 +53 -18
- 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/public/index.html +1 -0
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +13 -8
- package/rancher-components/components/BadgeState/BadgeState.vue +3 -3
- package/rancher-components/components/Banner/Banner.test.ts +1 -5
- package/rancher-components/components/Banner/Banner.vue +2 -2
- package/rancher-components/components/Card/Card.vue +4 -4
- package/rancher-components/components/Form/Checkbox/Checkbox.vue +4 -3
- package/rancher-components/components/Form/LabeledInput/LabeledInput.test.ts +18 -1
- package/rancher-components/components/Form/LabeledInput/LabeledInput.vue +57 -24
- package/rancher-components/components/Form/Radio/RadioButton.test.ts +1 -3
- package/rancher-components/components/Form/Radio/RadioButton.vue +13 -7
- package/rancher-components/components/Form/Radio/RadioGroup.vue +4 -3
- package/rancher-components/components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
- package/rancher-components/components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/components/StringList/StringList.test.ts +270 -0
- package/rancher-components/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 +139 -48
- 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 +1042 -767
- 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 +92 -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 +186 -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/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/rancher-components/components/BadgeState/BadgeState.spec.ts +0 -12
- 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/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
|
@@ -29,30 +29,17 @@ import { getParent } from '@shell/utils/dom';
|
|
|
29
29
|
// NOTE: This is populated by a plugin (formatters.js) to avoid issues with plugins
|
|
30
30
|
export const FORMATTERS = {};
|
|
31
31
|
|
|
32
|
-
export const COLUMN_BREAKPOINTS = {
|
|
33
|
-
/**
|
|
34
|
-
* Only show column if at tablet width or wider
|
|
35
|
-
*/
|
|
36
|
-
TABLET: 'tablet',
|
|
37
|
-
/**
|
|
38
|
-
* Only show column if at laptop width or wider
|
|
39
|
-
*/
|
|
40
|
-
LAPTOP: 'laptop',
|
|
41
|
-
/**
|
|
42
|
-
* Only show column if at desktop width or wider
|
|
43
|
-
*/
|
|
44
|
-
DESKTOP: 'desktop'
|
|
45
|
-
};
|
|
46
|
-
|
|
47
32
|
// @TODO:
|
|
48
33
|
// Fixed header/scrolling
|
|
49
34
|
|
|
50
35
|
// Data Flow:
|
|
51
36
|
// rows prop
|
|
52
|
-
//
|
|
53
|
-
//
|
|
54
|
-
//
|
|
55
|
-
//
|
|
37
|
+
// --> sorting.js arrangedRows
|
|
38
|
+
// --> filtering.js handleFiltering()
|
|
39
|
+
// --> filtering.js filteredRows
|
|
40
|
+
// --> paging.js pageRows
|
|
41
|
+
// --> grouping.js groupedRows
|
|
42
|
+
// --> index.vue displayedRows
|
|
56
43
|
|
|
57
44
|
export default {
|
|
58
45
|
name: 'SortableTable',
|
|
@@ -100,6 +87,16 @@ export default {
|
|
|
100
87
|
required: false
|
|
101
88
|
},
|
|
102
89
|
|
|
90
|
+
/**
|
|
91
|
+
* Alt Loading - True: Always show table rows and obscure them when `loading`. Intended for use with server-side pagination.
|
|
92
|
+
*
|
|
93
|
+
* Alt Loading - False: Hide the table rows when `loading`. Intended when all resources are provided up front.
|
|
94
|
+
*/
|
|
95
|
+
altLoading: {
|
|
96
|
+
type: Boolean,
|
|
97
|
+
required: false
|
|
98
|
+
},
|
|
99
|
+
|
|
103
100
|
groupBy: {
|
|
104
101
|
// Field to group rows by, row[groupBy] must be something that can be a map key
|
|
105
102
|
type: String,
|
|
@@ -164,6 +161,11 @@ export default {
|
|
|
164
161
|
default: false,
|
|
165
162
|
},
|
|
166
163
|
|
|
164
|
+
subRowsDescription: {
|
|
165
|
+
type: Boolean,
|
|
166
|
+
default: true,
|
|
167
|
+
},
|
|
168
|
+
|
|
167
169
|
subExpandable: {
|
|
168
170
|
type: Boolean,
|
|
169
171
|
default: false,
|
|
@@ -266,7 +268,7 @@ export default {
|
|
|
266
268
|
*/
|
|
267
269
|
noDataKey: {
|
|
268
270
|
type: String,
|
|
269
|
-
default: 'sortableTable.noData'
|
|
271
|
+
default: 'sortableTable.noData' // i18n-uses sortableTable.noData
|
|
270
272
|
},
|
|
271
273
|
|
|
272
274
|
/**
|
|
@@ -282,6 +284,14 @@ export default {
|
|
|
282
284
|
default: null,
|
|
283
285
|
},
|
|
284
286
|
|
|
287
|
+
/**
|
|
288
|
+
* The list will always be sorted by these regardless of what the user has selected
|
|
289
|
+
*/
|
|
290
|
+
mandatorySort: {
|
|
291
|
+
type: Array,
|
|
292
|
+
default: null,
|
|
293
|
+
},
|
|
294
|
+
|
|
285
295
|
/**
|
|
286
296
|
* Allows you to link to a custom detail page for data that
|
|
287
297
|
* doesn't have a class model. For example, a receiver configuration
|
|
@@ -313,6 +323,22 @@ export default {
|
|
|
313
323
|
forceUpdateLiveAndDelayed: {
|
|
314
324
|
type: Number,
|
|
315
325
|
default: 0
|
|
326
|
+
},
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* True if pagination is executed outside of the component
|
|
330
|
+
*/
|
|
331
|
+
externalPaginationEnabled: {
|
|
332
|
+
type: Boolean,
|
|
333
|
+
default: false
|
|
334
|
+
},
|
|
335
|
+
|
|
336
|
+
/**
|
|
337
|
+
* If `externalPaginationEnabled` is true this will be used as the current page
|
|
338
|
+
*/
|
|
339
|
+
externalPaginationResult: {
|
|
340
|
+
type: Object,
|
|
341
|
+
default: null
|
|
316
342
|
}
|
|
317
343
|
},
|
|
318
344
|
|
|
@@ -327,12 +353,18 @@ export default {
|
|
|
327
353
|
}
|
|
328
354
|
|
|
329
355
|
return {
|
|
330
|
-
|
|
331
|
-
expanded:
|
|
356
|
+
refreshButtonPhase: ASYNC_BUTTON_STATES.WAITING,
|
|
357
|
+
expanded: {},
|
|
332
358
|
searchQuery,
|
|
333
359
|
eventualSearchQuery,
|
|
334
|
-
|
|
335
|
-
|
|
360
|
+
subMatches: null,
|
|
361
|
+
actionOfInterest: null,
|
|
362
|
+
loadingDelay: false,
|
|
363
|
+
debouncedPaginationChanged: null,
|
|
364
|
+
/**
|
|
365
|
+
* The is the bool the DOM uses to show loading state. it's proxied from `loading` to avoid blipping the indicator (see usages)
|
|
366
|
+
*/
|
|
367
|
+
isLoading: false,
|
|
336
368
|
};
|
|
337
369
|
},
|
|
338
370
|
|
|
@@ -346,12 +378,14 @@ export default {
|
|
|
346
378
|
|
|
347
379
|
this._onScroll = this.onScroll.bind(this);
|
|
348
380
|
$main?.addEventListener('scroll', this._onScroll);
|
|
381
|
+
|
|
382
|
+
this.debouncedPaginationChanged();
|
|
349
383
|
},
|
|
350
384
|
|
|
351
385
|
beforeDestroy() {
|
|
352
|
-
clearTimeout(this.loadingDelayTimer);
|
|
353
386
|
clearTimeout(this._scrollTimer);
|
|
354
387
|
clearTimeout(this._loadingDelayTimer);
|
|
388
|
+
clearTimeout(this._altLoadingDelayTimer);
|
|
355
389
|
clearTimeout(this._liveColumnsTimer);
|
|
356
390
|
clearTimeout(this._delayedColumnsTimer);
|
|
357
391
|
clearTimeout(this.manualRefreshTimer);
|
|
@@ -383,21 +417,27 @@ export default {
|
|
|
383
417
|
descending(neu, old) {
|
|
384
418
|
this.watcherUpdateLiveAndDelayed(neu, old);
|
|
385
419
|
},
|
|
420
|
+
|
|
386
421
|
searchQuery(neu, old) {
|
|
387
422
|
this.watcherUpdateLiveAndDelayed(neu, old);
|
|
388
423
|
},
|
|
424
|
+
|
|
389
425
|
sortFields(neu, old) {
|
|
390
426
|
this.watcherUpdateLiveAndDelayed(neu, old);
|
|
391
427
|
},
|
|
428
|
+
|
|
392
429
|
groupBy(neu, old) {
|
|
393
430
|
this.watcherUpdateLiveAndDelayed(neu, old);
|
|
394
431
|
},
|
|
432
|
+
|
|
395
433
|
namespaces(neu, old) {
|
|
396
434
|
this.watcherUpdateLiveAndDelayed(neu, old);
|
|
397
435
|
},
|
|
436
|
+
|
|
398
437
|
page(neu, old) {
|
|
399
438
|
this.watcherUpdateLiveAndDelayed(neu, old);
|
|
400
439
|
},
|
|
440
|
+
|
|
401
441
|
forceUpdateLiveAndDelayed(neu, old) {
|
|
402
442
|
this.watcherUpdateLiveAndDelayed(neu, old);
|
|
403
443
|
},
|
|
@@ -418,17 +458,40 @@ export default {
|
|
|
418
458
|
manualRefreshLoadingFinished: {
|
|
419
459
|
handler(neu, old) {
|
|
420
460
|
// this is merely to update the manual refresh button status
|
|
421
|
-
this.
|
|
461
|
+
this.refreshButtonPhase = !neu ? ASYNC_BUTTON_STATES.WAITING : ASYNC_BUTTON_STATES.ACTION;
|
|
422
462
|
if (neu && neu !== old) {
|
|
423
463
|
this.$nextTick(() => this.updateLiveAndDelayed());
|
|
424
464
|
}
|
|
425
465
|
},
|
|
426
466
|
immediate: true
|
|
427
|
-
}
|
|
467
|
+
},
|
|
468
|
+
|
|
469
|
+
loading: {
|
|
470
|
+
handler(neu, old) {
|
|
471
|
+
// Always ensure the Refresh button phase aligns with loading state (to ensure external phase changes which can then reset the internal phase changed by click)
|
|
472
|
+
this.refreshButtonPhase = neu ? ASYNC_BUTTON_STATES.WAITING : ASYNC_BUTTON_STATES.ACTION;
|
|
473
|
+
|
|
474
|
+
if (this.altLoading) {
|
|
475
|
+
// Delay setting the actual loading indicator. This should avoid flashing up the indicator if the API responds quickly
|
|
476
|
+
if (neu) {
|
|
477
|
+
this._altLoadingDelayTimer = setTimeout(() => {
|
|
478
|
+
this.isLoading = true;
|
|
479
|
+
}, 200); // this should be higher than the targetted quick response
|
|
480
|
+
} else {
|
|
481
|
+
clearTimeout(this._altLoadingDelayTimer);
|
|
482
|
+
this.isLoading = false;
|
|
483
|
+
}
|
|
484
|
+
} else {
|
|
485
|
+
this.isLoading = neu;
|
|
486
|
+
}
|
|
487
|
+
},
|
|
488
|
+
immediate: true
|
|
489
|
+
},
|
|
428
490
|
},
|
|
429
491
|
|
|
430
492
|
created() {
|
|
431
493
|
this.debouncedRefreshTableData = debounce(this.refreshTableData, 500);
|
|
494
|
+
this.debouncedPaginationChanged = debounce(this.paginationChanged, 50);
|
|
432
495
|
},
|
|
433
496
|
|
|
434
497
|
computed: {
|
|
@@ -439,11 +502,16 @@ export default {
|
|
|
439
502
|
},
|
|
440
503
|
|
|
441
504
|
initalLoad() {
|
|
442
|
-
return !!(!this.
|
|
505
|
+
return !!(!this.isLoading && !this._didinit && this.rows?.length);
|
|
443
506
|
},
|
|
444
507
|
|
|
445
508
|
manualRefreshLoadingFinished() {
|
|
446
|
-
|
|
509
|
+
const res = !!(!this.isLoading && this._didinit && this.rows?.length && !this.isManualRefreshLoading);
|
|
510
|
+
|
|
511
|
+
// Always ensure the Refresh button phase aligns with loading state (regardless of if manualRefreshLoadingFinished has changed or not)
|
|
512
|
+
this.refreshButtonPhase = !res || this.loading ? ASYNC_BUTTON_STATES.WAITING : ASYNC_BUTTON_STATES.ACTION;
|
|
513
|
+
|
|
514
|
+
return res;
|
|
447
515
|
},
|
|
448
516
|
|
|
449
517
|
fullColspan() {
|
|
@@ -543,6 +611,7 @@ export default {
|
|
|
543
611
|
'body-dividers': this.bodyDividers,
|
|
544
612
|
'overflow-y': this.overflowY,
|
|
545
613
|
'overflow-x': this.overflowX,
|
|
614
|
+
'alt-loading': this.altLoading && this.isLoading
|
|
546
615
|
};
|
|
547
616
|
},
|
|
548
617
|
|
|
@@ -771,6 +840,12 @@ export default {
|
|
|
771
840
|
// console.warn(`Performance: Table valueFor: ${ col.name } ${ col.value }`); // eslint-disable-line no-console
|
|
772
841
|
|
|
773
842
|
const expr = col.value || col.name;
|
|
843
|
+
|
|
844
|
+
if (!expr) {
|
|
845
|
+
console.error('No path has been defined for this column, unable to get value of cell', col); // eslint-disable-line no-console
|
|
846
|
+
|
|
847
|
+
return '';
|
|
848
|
+
}
|
|
774
849
|
const out = get(row, expr);
|
|
775
850
|
|
|
776
851
|
if ( out === null || out === undefined ) {
|
|
@@ -879,7 +954,7 @@ export default {
|
|
|
879
954
|
|
|
880
955
|
showSubRow(row, keyField) {
|
|
881
956
|
const hasInjectedSubRows = this.subRows && (!this.subExpandable || this.expanded[get(row, keyField)]);
|
|
882
|
-
const hasStateDescription = row.stateDescription;
|
|
957
|
+
const hasStateDescription = this.subRowsDescription && row.stateDescription;
|
|
883
958
|
|
|
884
959
|
return hasInjectedSubRows || hasStateDescription;
|
|
885
960
|
},
|
|
@@ -898,6 +973,23 @@ export default {
|
|
|
898
973
|
event,
|
|
899
974
|
targetElement: this.$refs[`actionButton${ i }`][0],
|
|
900
975
|
});
|
|
976
|
+
},
|
|
977
|
+
|
|
978
|
+
paginationChanged() {
|
|
979
|
+
if (!this.externalPaginationEnabled) {
|
|
980
|
+
return;
|
|
981
|
+
}
|
|
982
|
+
|
|
983
|
+
this.$emit('pagination-changed', {
|
|
984
|
+
page: this.page,
|
|
985
|
+
perPage: this.perPage,
|
|
986
|
+
filter: {
|
|
987
|
+
searchFields: this.searchFields,
|
|
988
|
+
searchQuery: this.searchQuery
|
|
989
|
+
},
|
|
990
|
+
sort: this.sortFields,
|
|
991
|
+
descending: this.descending
|
|
992
|
+
});
|
|
901
993
|
}
|
|
902
994
|
}
|
|
903
995
|
};
|
|
@@ -1026,10 +1118,9 @@ export default {
|
|
|
1026
1118
|
<slot name="header-right" />
|
|
1027
1119
|
<AsyncButton
|
|
1028
1120
|
v-if="isTooManyItemsToAutoUpdate"
|
|
1029
|
-
v-clean-tooltip="t('performance.manualRefresh.buttonTooltip')"
|
|
1030
1121
|
class="manual-refresh"
|
|
1031
|
-
mode="refresh"
|
|
1032
|
-
:current-phase="
|
|
1122
|
+
mode="manual-refresh"
|
|
1123
|
+
:current-phase="refreshButtonPhase"
|
|
1033
1124
|
@click="debouncedRefreshTableData"
|
|
1034
1125
|
/>
|
|
1035
1126
|
<div
|
|
@@ -1122,7 +1213,7 @@ export default {
|
|
|
1122
1213
|
:default-sort-by="_defaultSortBy"
|
|
1123
1214
|
:descending="descending"
|
|
1124
1215
|
:no-rows="noRows"
|
|
1125
|
-
:loading="
|
|
1216
|
+
:loading="isLoading && !loadingDelay"
|
|
1126
1217
|
:no-results="noResults"
|
|
1127
1218
|
@on-toggle-all="onToggleAll"
|
|
1128
1219
|
@on-sort-change="changeSort"
|
|
@@ -1132,9 +1223,9 @@ export default {
|
|
|
1132
1223
|
/>
|
|
1133
1224
|
|
|
1134
1225
|
<!-- Don't display anything if we're loading and the delay has yet to pass -->
|
|
1135
|
-
<div v-if="
|
|
1226
|
+
<div v-if="isLoading && !loadingDelay" />
|
|
1136
1227
|
|
|
1137
|
-
<tbody v-else-if="
|
|
1228
|
+
<tbody v-else-if="isLoading && !altLoading">
|
|
1138
1229
|
<slot name="loading">
|
|
1139
1230
|
<tr>
|
|
1140
1231
|
<td :colspan="fullColspan">
|
|
@@ -1379,7 +1470,8 @@ export default {
|
|
|
1379
1470
|
<button
|
|
1380
1471
|
type="button"
|
|
1381
1472
|
class="btn btn-sm role-multi-action"
|
|
1382
|
-
|
|
1473
|
+
data-testid="pagination-first"
|
|
1474
|
+
:disabled="page == 1 || loading"
|
|
1383
1475
|
@click="goToPage('first')"
|
|
1384
1476
|
>
|
|
1385
1477
|
<i class="icon icon-chevron-beginning" />
|
|
@@ -1387,7 +1479,8 @@ export default {
|
|
|
1387
1479
|
<button
|
|
1388
1480
|
type="button"
|
|
1389
1481
|
class="btn btn-sm role-multi-action"
|
|
1390
|
-
|
|
1482
|
+
data-testid="pagination-prev"
|
|
1483
|
+
:disabled="page == 1 || loading"
|
|
1391
1484
|
@click="goToPage('prev')"
|
|
1392
1485
|
>
|
|
1393
1486
|
<i class="icon icon-chevron-left" />
|
|
@@ -1398,7 +1491,8 @@ export default {
|
|
|
1398
1491
|
<button
|
|
1399
1492
|
type="button"
|
|
1400
1493
|
class="btn btn-sm role-multi-action"
|
|
1401
|
-
|
|
1494
|
+
data-testid="pagination-next"
|
|
1495
|
+
:disabled="page == totalPages || loading"
|
|
1402
1496
|
@click="goToPage('next')"
|
|
1403
1497
|
>
|
|
1404
1498
|
<i class="icon icon-chevron-right" />
|
|
@@ -1406,7 +1500,8 @@ export default {
|
|
|
1406
1500
|
<button
|
|
1407
1501
|
type="button"
|
|
1408
1502
|
class="btn btn-sm role-multi-action"
|
|
1409
|
-
|
|
1503
|
+
data-testid="pagination-last"
|
|
1504
|
+
:disabled="page == totalPages || loading"
|
|
1410
1505
|
@click="goToPage('last')"
|
|
1411
1506
|
>
|
|
1412
1507
|
<i class="icon icon-chevron-end" />
|
|
@@ -1444,7 +1539,11 @@ export default {
|
|
|
1444
1539
|
</div>
|
|
1445
1540
|
</template>
|
|
1446
1541
|
|
|
1447
|
-
|
|
1542
|
+
<style lang="scss" scoped>
|
|
1543
|
+
.sortable-table.alt-loading {
|
|
1544
|
+
opacity: 0.5;
|
|
1545
|
+
pointer-events: none;
|
|
1546
|
+
}
|
|
1448
1547
|
|
|
1449
1548
|
.manual-refresh {
|
|
1450
1549
|
height: 40px;
|
|
@@ -1608,9 +1707,9 @@ export default {
|
|
|
1608
1707
|
margin-left: 10px;
|
|
1609
1708
|
min-width: 180px;
|
|
1610
1709
|
}
|
|
1611
|
-
|
|
1710
|
+
</style>
|
|
1612
1711
|
|
|
1613
|
-
|
|
1712
|
+
<style lang="scss">
|
|
1614
1713
|
//
|
|
1615
1714
|
// Important: Almost all selectors in here need to be ">"-ed together so they
|
|
1616
1715
|
// apply only to the current table, not one nested inside another table.
|
|
@@ -1942,4 +2041,4 @@ export default {
|
|
|
1942
2041
|
min-width: 200px;
|
|
1943
2042
|
}
|
|
1944
2043
|
}
|
|
1945
|
-
|
|
2044
|
+
</style>
|
|
@@ -2,27 +2,45 @@ import { ROWS_PER_PAGE } from '@shell/store/prefs';
|
|
|
2
2
|
|
|
3
3
|
export default {
|
|
4
4
|
computed: {
|
|
5
|
+
totalRows() {
|
|
6
|
+
if (this.externalPaginationEnabled) {
|
|
7
|
+
return this.externalPaginationResult?.count || 0;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
return this.filteredRows.length;
|
|
11
|
+
},
|
|
12
|
+
|
|
5
13
|
indexFrom() {
|
|
6
14
|
return Math.max(0, 1 + this.perPage * (this.page - 1));
|
|
7
15
|
},
|
|
8
16
|
|
|
9
17
|
indexTo() {
|
|
10
|
-
return Math.min(this.
|
|
18
|
+
return Math.min(this.totalRows, this.indexFrom + this.perPage - 1);
|
|
11
19
|
},
|
|
12
20
|
|
|
13
21
|
totalPages() {
|
|
14
|
-
return Math.ceil(this.
|
|
22
|
+
return Math.ceil(this.totalRows / this.perPage );
|
|
15
23
|
},
|
|
16
24
|
|
|
17
25
|
showPaging() {
|
|
18
|
-
|
|
26
|
+
if (!this.paging) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
const havePages = this.totalPages > 1;
|
|
31
|
+
|
|
32
|
+
if (this.altLoading) {
|
|
33
|
+
return havePages;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
return !this.loading && havePages;
|
|
19
37
|
},
|
|
20
38
|
|
|
21
39
|
pagingDisplay() {
|
|
22
40
|
const opt = {
|
|
23
41
|
...(this.pagingParams || {}),
|
|
24
42
|
|
|
25
|
-
count: this.
|
|
43
|
+
count: this.totalRows,
|
|
26
44
|
pages: this.totalPages,
|
|
27
45
|
from: this.indexFrom,
|
|
28
46
|
to: this.indexTo,
|
|
@@ -32,7 +50,9 @@ export default {
|
|
|
32
50
|
},
|
|
33
51
|
|
|
34
52
|
pagedRows() {
|
|
35
|
-
if (
|
|
53
|
+
if (this.externalPaginationEnabled) {
|
|
54
|
+
return this.rows;
|
|
55
|
+
} else if ( this.paging ) {
|
|
36
56
|
return this.filteredRows.slice(this.indexFrom - 1, this.indexTo);
|
|
37
57
|
} else {
|
|
38
58
|
return this.filteredRows;
|
|
@@ -51,12 +71,21 @@ export default {
|
|
|
51
71
|
// Go to the last page if we end up "past" the last page because the table changed
|
|
52
72
|
|
|
53
73
|
const from = this.indexFrom;
|
|
54
|
-
const last = this.
|
|
74
|
+
const last = this.totalRows;
|
|
55
75
|
|
|
56
76
|
if ( this.totalPages > 0 && this.page > 1 && from > last ) {
|
|
57
77
|
this.setPage(this.totalPages);
|
|
58
78
|
}
|
|
59
|
-
}
|
|
79
|
+
},
|
|
80
|
+
|
|
81
|
+
page() {
|
|
82
|
+
this.debouncedPaginationChanged();
|
|
83
|
+
},
|
|
84
|
+
|
|
85
|
+
perPage() {
|
|
86
|
+
this.debouncedPaginationChanged();
|
|
87
|
+
},
|
|
88
|
+
|
|
60
89
|
},
|
|
61
90
|
|
|
62
91
|
methods: {
|
|
@@ -46,9 +46,10 @@ export default {
|
|
|
46
46
|
// NOTE: The logic here could be simplified and made more performant
|
|
47
47
|
bulkActionsForSelection() {
|
|
48
48
|
let disableAll = false;
|
|
49
|
+
|
|
49
50
|
// pagedRows is all rows in the current page
|
|
50
51
|
const all = this.pagedRows;
|
|
51
|
-
const allRows = this.arrangedRows;
|
|
52
|
+
const allRows = this.arrangedRows || all;
|
|
52
53
|
let selected = this.selectedRows;
|
|
53
54
|
|
|
54
55
|
// Nothing is selected
|
|
@@ -1,5 +1,12 @@
|
|
|
1
1
|
import { sortBy } from '@shell/utils/sort';
|
|
2
|
-
import {
|
|
2
|
+
import { uniq } from '@shell/utils/array';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Always sort by something, this is the best guess on properties
|
|
6
|
+
*
|
|
7
|
+
* Can be overriden
|
|
8
|
+
*/
|
|
9
|
+
const DEFAULT_MANDATORY_SORT = ['nameSort', 'id'];
|
|
3
10
|
|
|
4
11
|
export default {
|
|
5
12
|
computed: {
|
|
@@ -21,15 +28,15 @@ export default {
|
|
|
21
28
|
fromColumn = [fromColumn];
|
|
22
29
|
}
|
|
23
30
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
addObject(out, 'nameSort');
|
|
27
|
-
addObject(out, 'id');
|
|
28
|
-
|
|
29
|
-
return out;
|
|
31
|
+
// return the sorting based on grouping, user selection and fallback
|
|
32
|
+
return uniq([...fromGroup, ...fromColumn].concat(...(this.mandatorySort || DEFAULT_MANDATORY_SORT)));
|
|
30
33
|
},
|
|
31
34
|
|
|
32
35
|
arrangedRows() {
|
|
36
|
+
if (this.externalPaginationEnabled) {
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
|
|
33
40
|
let key;
|
|
34
41
|
|
|
35
42
|
if ( this.sortGenerationFn ) {
|
|
@@ -101,4 +108,14 @@ export default {
|
|
|
101
108
|
this.setPage(1);
|
|
102
109
|
},
|
|
103
110
|
},
|
|
111
|
+
|
|
112
|
+
watch: {
|
|
113
|
+
sortFields() {
|
|
114
|
+
this.debouncedPaginationChanged();
|
|
115
|
+
},
|
|
116
|
+
|
|
117
|
+
descending() {
|
|
118
|
+
this.debouncedPaginationChanged();
|
|
119
|
+
}
|
|
120
|
+
}
|
|
104
121
|
};
|
|
@@ -3,6 +3,8 @@ import {
|
|
|
3
3
|
LAST_UPDATED, TYPE, REASON, MESSAGE, STATUS
|
|
4
4
|
} from '@shell/config/table-headers';
|
|
5
5
|
import SortableTable from '@shell/components/SortableTable';
|
|
6
|
+
import { copyTextToClipboard } from '@shell/utils/clipboard';
|
|
7
|
+
import { exceptionToErrorsArray } from '@shell/utils/error';
|
|
6
8
|
export default {
|
|
7
9
|
components: { SortableTable },
|
|
8
10
|
props: {
|
|
@@ -31,12 +33,14 @@ export default {
|
|
|
31
33
|
$event.stopPropagation();
|
|
32
34
|
$event.preventDefault();
|
|
33
35
|
|
|
34
|
-
|
|
36
|
+
copyTextToClipboard(this.$slots.default[0].text).then(() => {
|
|
35
37
|
this.copied = true;
|
|
36
38
|
|
|
37
39
|
setTimeout(() => {
|
|
38
40
|
this.copied = false;
|
|
39
41
|
}, 2000);
|
|
42
|
+
}).catch((e) => {
|
|
43
|
+
this.$emit('error', exceptionToErrorsArray(e));
|
|
40
44
|
});
|
|
41
45
|
},
|
|
42
46
|
}
|
|
@@ -19,6 +19,11 @@ export default {
|
|
|
19
19
|
default: false
|
|
20
20
|
},
|
|
21
21
|
|
|
22
|
+
hideSingleTab: {
|
|
23
|
+
type: Boolean,
|
|
24
|
+
default: false
|
|
25
|
+
},
|
|
26
|
+
|
|
22
27
|
showTabsAddRemove: {
|
|
23
28
|
type: Boolean,
|
|
24
29
|
default: false
|
|
@@ -86,6 +91,11 @@ export default {
|
|
|
86
91
|
sortedTabs() {
|
|
87
92
|
return sortBy(this.tabs, ['weight:desc', 'labelDisplay', 'name']);
|
|
88
93
|
},
|
|
94
|
+
|
|
95
|
+
// hide tabs based on tab count IF flag is active
|
|
96
|
+
hideTabs() {
|
|
97
|
+
return this.hideSingleTab && this.sortedTabs.length === 1;
|
|
98
|
+
}
|
|
89
99
|
},
|
|
90
100
|
|
|
91
101
|
watch: {
|
|
@@ -223,13 +233,18 @@ export default {
|
|
|
223
233
|
</script>
|
|
224
234
|
|
|
225
235
|
<template>
|
|
226
|
-
<div
|
|
236
|
+
<div
|
|
237
|
+
:class="{'side-tabs': !!sideTabs, 'tabs-only': tabsOnly }"
|
|
238
|
+
data-testid="tabbed"
|
|
239
|
+
>
|
|
227
240
|
<ul
|
|
241
|
+
v-if="!hideTabs"
|
|
228
242
|
ref="tablist"
|
|
229
243
|
role="tablist"
|
|
230
244
|
class="tabs"
|
|
231
245
|
:class="{'clearfix':!sideTabs, 'vertical': sideTabs, 'horizontal': !sideTabs}"
|
|
232
246
|
tabindex="0"
|
|
247
|
+
data-testid="tabbed-block"
|
|
233
248
|
@keydown.right.prevent="selectNext(1)"
|
|
234
249
|
@keydown.left.prevent="selectNext(-1)"
|
|
235
250
|
@keydown.down.prevent="selectNext(1)"
|
|
@@ -279,6 +294,7 @@ export default {
|
|
|
279
294
|
<button
|
|
280
295
|
type="button"
|
|
281
296
|
class="btn bg-transparent"
|
|
297
|
+
data-testid="tab-list-add"
|
|
282
298
|
@click="tabAddClicked"
|
|
283
299
|
>
|
|
284
300
|
<i class="icon icon-plus" />
|
|
@@ -287,6 +303,7 @@ export default {
|
|
|
287
303
|
type="button"
|
|
288
304
|
class="btn bg-transparent"
|
|
289
305
|
:disabled="!sortedTabs.length"
|
|
306
|
+
data-testid="tab-list-remove"
|
|
290
307
|
@click="tabRemoveClicked"
|
|
291
308
|
>
|
|
292
309
|
<i class="icon icon-minus" />
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import { computed } from 'vue';
|
|
3
|
+
|
|
4
|
+
import { ucFirst } from '@shell/utils/string';
|
|
5
|
+
|
|
6
|
+
const props = defineProps<{
|
|
7
|
+
userState: string,
|
|
8
|
+
isActive: boolean
|
|
9
|
+
}>();
|
|
10
|
+
|
|
11
|
+
const iconClass = computed(() => {
|
|
12
|
+
const userIcon = `icon-user-${ props.isActive ? 'check' : 'xmark' }`;
|
|
13
|
+
const iconColor = `icon-color-${ props.isActive ? 'green' : 'red' }`;
|
|
14
|
+
|
|
15
|
+
return {
|
|
16
|
+
icon: true,
|
|
17
|
+
'icon-lg': true,
|
|
18
|
+
[userIcon]: true,
|
|
19
|
+
[iconColor]: true,
|
|
20
|
+
};
|
|
21
|
+
});
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<template>
|
|
25
|
+
<div class="icon-center">
|
|
26
|
+
<i
|
|
27
|
+
v-tooltip="ucFirst(userState)"
|
|
28
|
+
:class="iconClass"
|
|
29
|
+
/>
|
|
30
|
+
</div>
|
|
31
|
+
</template>
|
|
32
|
+
|
|
33
|
+
<style lang="scss" scoped>
|
|
34
|
+
.icon-center {
|
|
35
|
+
display: flex;
|
|
36
|
+
flex-direction: row;
|
|
37
|
+
justify-content: center;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
.icon-color-green {
|
|
41
|
+
color: var(--success);
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
.icon-color-red {
|
|
45
|
+
color: var(--error);
|
|
46
|
+
}
|
|
47
|
+
</style>
|
|
@@ -25,6 +25,7 @@ export default {
|
|
|
25
25
|
if (this.resource === CATALOG.CLUSTER_REPO) {
|
|
26
26
|
key = !this.currentCluster || this.currentCluster.isLocal ? 'typeDescription."catalog.cattle.io.clusterrepo.local"' : 'typeDescription."catalog.cattle.io.clusterrepo"';
|
|
27
27
|
} else {
|
|
28
|
+
// i18n-uses typeDescription.*
|
|
28
29
|
key = `typeDescription."${ this.resource }"`;
|
|
29
30
|
}
|
|
30
31
|
|
package/components/Wizard.vue
CHANGED