@rancher/shell 3.0.12-rc.1 → 3.0.12-rc.3
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/apis/impl/apis.ts +6 -0
- package/apis/index.ts +26 -0
- package/apis/intf/resources-api/cluster-api.ts +18 -0
- package/apis/intf/resources-api/mgmt-api.ts +15 -0
- package/apis/intf/resources-api/resource-base.ts +107 -0
- package/apis/intf/resources-api/resource-constants.ts +147 -0
- package/apis/intf/resources-api/resources-api.ts +143 -0
- package/apis/intf/resources.ts +49 -0
- package/apis/intf/{modal.ts → shell-api/modal.ts} +21 -26
- package/apis/intf/shell-api/proxy.ts +216 -0
- package/apis/intf/{slide-in.ts → shell-api/slide-in.ts} +4 -3
- package/apis/intf/{system.ts → shell-api/system.ts} +4 -1
- package/apis/intf/shell.ts +12 -6
- package/apis/resources/__tests__/resources-api-class.test.ts +550 -0
- package/apis/resources/index.ts +22 -0
- package/apis/resources/resources-api-class.ts +187 -0
- package/apis/shell/__tests__/proxy.test.ts +369 -0
- package/apis/shell/index.ts +8 -1
- package/apis/shell/modal.ts +4 -1
- package/apis/shell/notifications.ts +9 -6
- package/apis/shell/proxy.ts +256 -0
- package/apis/shell/slide-in.ts +4 -1
- package/apis/vue-shim.d.ts +2 -1
- package/assets/data/aws-regions.json +4 -0
- package/assets/fonts/lato/LatoLatin-Black.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Black.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-BlackItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-BlackItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Bold.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Bold.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-BoldItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-BoldItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Heavy.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Heavy.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-HeavyItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-HeavyItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Italic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Italic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Light.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Light.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-LightItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-LightItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Medium.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Medium.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-MediumItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-MediumItalic.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Regular.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Regular.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-Semibold.woff +0 -0
- package/assets/fonts/lato/LatoLatin-Semibold.woff2 +0 -0
- package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff +0 -0
- package/assets/fonts/lato/LatoLatin-SemiboldItalic.woff2 +0 -0
- package/assets/images/providers/entraid-black.svg +4 -0
- package/assets/images/providers/entraid.svg +9 -0
- package/assets/images/vendor/entraid.svg +9 -0
- package/assets/styles/app.scss +0 -1
- package/assets/styles/base/_variables.scss +2 -0
- package/assets/styles/fonts/_fontstack.scss +132 -8
- package/assets/translations/en-us.yaml +41 -22
- package/assets/translations/zh-hans.yaml +4 -8
- package/chart/__tests__/S3.test.ts +10 -3
- package/chart/monitoring/index.vue +10 -1
- package/components/ActionDropdownShell.vue +2 -1
- package/components/CountBox.vue +20 -0
- package/components/CreateDriver.vue +0 -12
- package/components/CruResourceFooter.vue +9 -5
- package/components/DetailText.vue +12 -3
- package/components/ExplorerProjectsNamespaces.vue +1 -1
- package/components/InstallHelmCharts.vue +2 -2
- package/components/LandingPagePreference.vue +14 -5
- package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +15 -1
- package/components/Resource/Detail/Metadata/index.vue +6 -0
- package/components/Resource/Detail/ResourcePopover/index.vue +12 -1
- package/components/Resource/Detail/SpacedRow.vue +3 -1
- package/components/Resource/Detail/TitleBar/index.vue +10 -11
- package/components/ResourceList/Masthead.vue +12 -8
- package/components/SelectIconGrid.vue +5 -10
- package/components/SingleClusterInfo.vue +1 -0
- package/components/SortableTable/__tests__/sorting.test.ts +126 -0
- package/components/SortableTable/index.vue +6 -9
- package/components/SortableTable/selection.js +23 -5
- package/components/SortableTable/sorting.js +6 -3
- package/components/Wizard.vue +14 -13
- package/components/__tests__/CountBox.test.ts +72 -0
- package/components/__tests__/DetailText.test.ts +113 -0
- package/components/fleet/FleetBundles.vue +100 -12
- package/components/fleet/FleetClusterTargets/index.vue +54 -15
- package/components/fleet/__tests__/FleetClusterTargets.test.ts +149 -115
- package/components/fleet/__tests__/FleetClusters.test.ts +12 -12
- package/components/form/InputWithSelect.vue +18 -10
- package/components/form/KeyValue.vue +17 -1
- package/components/form/LabeledSelect.vue +101 -26
- package/components/form/NameNsDescription.vue +11 -0
- package/components/form/Security.vue +6 -2
- package/components/form/Select.vue +73 -56
- package/components/form/ServiceNameSelect.vue +13 -11
- package/components/form/WorkloadPorts.vue +2 -7
- package/components/form/__tests__/KeyValue.test.ts +66 -0
- package/components/form/__tests__/NodeScheduling.test.ts +9 -0
- package/components/form/__tests__/Security.test.ts +76 -0
- package/components/form/labeled-select-utils/useLabeledSelectPagination.ts +138 -0
- package/components/formatter/Autoscaler.vue +4 -4
- package/components/formatter/ClusterKubeVersion.vue +27 -0
- package/components/formatter/ClusterLink.vue +1 -7
- package/components/formatter/ClusterProvider.vue +6 -10
- package/components/formatter/FleetSummaryGraph.vue +0 -3
- package/components/formatter/MachineSummaryGraph.vue +1 -1
- package/components/formatter/PodsUsage.vue +2 -2
- package/components/formatter/__tests__/Autoscaler.test.ts +19 -22
- package/components/formatter/__tests__/FleetSummaryGraph.test.ts +216 -0
- package/components/formatter/__tests__/PodsUsage.test.ts +6 -10
- package/components/nav/Group.vue +7 -6
- package/components/nav/Header.vue +24 -3
- package/components/nav/NamespaceFilter.vue +2 -2
- package/components/nav/NotificationCenter/Notification.vue +4 -1
- package/components/nav/NotificationCenter/NotificationHeader.vue +20 -8
- package/components/nav/NotificationCenter/__tests__/NotificationHeader.test.ts +80 -0
- package/components/nav/TopLevelMenu.helper.ts +15 -3
- package/components/nav/TopLevelMenu.vue +16 -5
- package/components/nav/Type.vue +8 -7
- package/components/nav/WindowManager/index.vue +2 -1
- package/components/nav/WorkspaceSwitcher.vue +13 -0
- package/components/nav/__tests__/Group.test.ts +67 -0
- package/components/nav/__tests__/Header.test.ts +235 -0
- package/components/nav/__tests__/TopLevelMenu.test.ts +145 -21
- package/components/nav/__tests__/Type.test.ts +20 -3
- package/components/templates/default.vue +34 -4
- package/components/templates/home.vue +30 -25
- package/components/templates/plain.vue +31 -26
- package/components/templates/standalone.vue +17 -0
- package/composables/useFormValidation.ts +93 -0
- package/composables/useLabeledFormElement.ts +10 -2
- package/composables/useLabeledSelect.ts +60 -0
- package/composables/useUserRetentionValidation.ts +1 -49
- package/composables/useVeeValidateField.test.ts +159 -0
- package/composables/useVeeValidateField.ts +67 -0
- package/config/cookies.js +0 -1
- package/config/labels-annotations.js +1 -0
- package/config/pagination-table-headers.js +18 -1
- package/config/product/manager.js +82 -21
- package/config/query-params.js +1 -0
- package/config/router/routes.js +6 -8
- package/config/table-headers.js +20 -1
- package/config/types.js +2 -1
- package/core/__tests__/plugin-products.test.ts +1505 -30
- package/core/plugin-products-base.ts +137 -20
- package/core/plugin-products-helpers.ts +5 -4
- package/core/plugin-products.ts +4 -0
- package/core/plugin-types.ts +129 -4
- package/core/plugin.ts +15 -7
- package/core/productDebugger.js +9 -4
- package/core/types-provisioning.ts +43 -30
- package/core/types.ts +58 -19
- package/detail/__tests__/management.cattle.io.fleetworkspace.test.ts +128 -0
- package/detail/__tests__/pod.test.ts +41 -0
- package/detail/harvesterhci.io.management.cluster.vue +6 -2
- package/detail/management.cattle.io.fleetworkspace.vue +49 -0
- package/detail/pod.vue +1 -1
- package/detail/provisioning.cattle.io.cluster.vue +4 -10
- package/edit/__tests__/fleet.cattle.io.helmop.test.ts +9 -0
- package/edit/__tests__/kontainerDriver.test.ts +0 -13
- package/edit/__tests__/nodeDriver.test.ts +5 -11
- package/edit/__tests__/resources.cattle.io.restore.test.ts +9 -0
- package/edit/auditlog.cattle.io.auditpolicy/__tests__/__snapshots__/General.test.ts.snap +6 -0
- package/edit/auth/__tests__/azuread.test.ts +217 -34
- package/edit/auth/__tests__/oidc.test.ts +54 -0
- package/edit/auth/azuread.vue +123 -15
- package/edit/auth/oidc.vue +10 -2
- package/edit/kontainerDriver.vue +1 -2
- package/edit/networking.k8s.io.ingress/DefaultBackend.vue +13 -4
- package/edit/networking.k8s.io.ingress/RulePath.vue +8 -4
- package/edit/networking.k8s.io.ingress/index.vue +75 -20
- package/edit/nodeDriver.vue +0 -2
- package/edit/provisioning.cattle.io.cluster/AgentEnv.vue +1 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/AgentEnv.test.ts +25 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/MachinePool.test.ts +104 -0
- package/edit/provisioning.cattle.io.cluster/index.vue +81 -106
- package/edit/provisioning.cattle.io.cluster/rke2.vue +8 -4
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +11 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/RegistryConfigs.vue +37 -4
- package/edit/provisioning.cattle.io.cluster/tabs/registries/__tests__/RegistryConfigs.test.ts +132 -7
- package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +2 -1
- package/edit/secret/__tests__/ssh.test.ts +5 -6
- package/edit/secret/basic.vue +31 -0
- package/edit/secret/index.vue +68 -17
- package/edit/secret/registry.vue +38 -0
- package/edit/secret/ssh.vue +29 -0
- package/edit/secret/tls.vue +30 -0
- package/edit/service.vue +4 -4
- package/edit/workload/Upgrading.vue +3 -3
- package/edit/workload/__tests__/Upgrading.test.ts +6 -9
- package/edit/workload/mixins/workload.js +2 -1
- package/initialize/App.vue +29 -2
- package/initialize/install-plugins.js +0 -2
- package/list/__tests__/management.cattle.io.feature.test.ts +105 -0
- package/list/catalog.cattle.io.app.vue +25 -5
- package/list/fleet.cattle.io.bundle.vue +7 -104
- package/list/fleet.cattle.io.clusterregistrationtoken.vue +20 -0
- package/list/management.cattle.io.feature.vue +1 -1
- package/list/management.cattle.io.fleetworkspace.vue +8 -0
- package/list/provisioning.cattle.io.cluster.vue +262 -180
- package/list/utils/management.cattle.io.cluster.utils.ts +128 -0
- package/machine-config/amazonec2.vue +1 -0
- package/mixins/__tests__/chart.test.ts +112 -0
- package/mixins/brand.js +2 -1
- package/mixins/chart.js +50 -15
- package/mixins/resource-fetch-api-pagination.js +41 -5
- package/models/__tests__/catalog.cattle.io.app.test.ts +15 -1
- package/models/__tests__/catalog.cattle.io.clusterrepo.test.ts +84 -0
- package/models/__tests__/chart.test.ts +99 -6
- package/models/__tests__/ext.cattle.io.kubeconfig.test.ts +67 -67
- package/models/__tests__/management.cattle.io.cluster.test.ts +1 -1
- package/models/__tests__/management.cattle.io.feature.test.ts +131 -0
- package/models/__tests__/management.cattle.io.node.ts +6 -5
- package/models/__tests__/management.cattle.io.nodepool.ts +5 -4
- package/models/__tests__/monitoring.coreos.com.alertmanagerconfig.test.ts +98 -0
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +32 -11
- package/models/base-cluster.x-k8s.io.js +26 -0
- package/models/catalog.cattle.io.app.js +21 -17
- package/models/catalog.cattle.io.clusterrepo.js +39 -11
- package/models/chart.js +33 -19
- package/models/cluster.js +1 -1
- package/models/cluster.x-k8s.io.machine.js +4 -22
- package/models/cluster.x-k8s.io.machinedeployment.js +2 -20
- package/models/cluster.x-k8s.io.machineset.js +2 -20
- package/models/compliance.cattle.io.clusterscan.js +130 -2
- package/models/ext.cattle.io.kubeconfig.ts +4 -7
- package/models/fleet-application.js +4 -2
- package/models/fleet.cattle.io.bundle.js +1 -1
- package/models/kontainerdriver.js +11 -0
- package/models/management.cattle.io.authconfig.js +5 -1
- package/models/management.cattle.io.cluster.js +402 -78
- package/models/management.cattle.io.feature.js +3 -3
- package/models/management.cattle.io.kontainerdriver.js +1 -26
- package/models/management.cattle.io.node.js +6 -4
- package/models/management.cattle.io.nodepool.js +1 -1
- package/models/monitoring.coreos.com.alertmanagerconfig.js +31 -17
- package/models/networking.k8s.io.ingress.js +12 -4
- package/models/nodedriver.js +7 -0
- package/models/provisioning.cattle.io.cluster.js +47 -330
- package/models/rke.cattle.io.etcdsnapshot.js +1 -2
- package/package.json +20 -37
- package/pages/__tests__/readme.test.ts +49 -0
- package/pages/auth/setup.vue +2 -3
- package/pages/c/_cluster/apps/charts/__tests__/chart.test.ts +265 -0
- package/pages/c/_cluster/apps/charts/__tests__/index.test.ts +55 -0
- package/pages/c/_cluster/apps/charts/__tests__/install.test.ts +53 -0
- package/pages/c/_cluster/apps/charts/chart.vue +275 -39
- package/pages/c/_cluster/apps/charts/index.vue +2 -2
- package/pages/c/_cluster/apps/charts/install.vue +18 -10
- package/pages/c/_cluster/auth/user.retention/index.vue +55 -22
- package/pages/c/_cluster/explorer/__tests__/index.test.ts +23 -25
- package/pages/c/_cluster/explorer/index.vue +5 -49
- package/pages/c/_cluster/istio/__tests__/istio.index.test.ts +194 -0
- package/pages/c/_cluster/istio/index.vue +21 -6
- package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +5 -7
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +40 -2
- package/pages/c/_cluster/uiplugins/__tests__/PluginInfoPanel.test.ts +61 -0
- package/pages/c/_cluster/uiplugins/__tests__/index.test.ts +735 -13
- package/pages/c/_cluster/uiplugins/index.vue +226 -222
- package/pages/diagnostic.vue +13 -17
- package/pages/fail-whale.vue +18 -0
- package/pages/home.vue +77 -260
- package/pages/readme.vue +88 -0
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +88 -0
- package/plugins/dashboard-store/actions.js +40 -18
- package/plugins/dashboard-store/resource-class.js +5 -2
- package/plugins/steve/__tests__/subscribe.spec.ts +6 -3
- package/plugins/steve/steve-pagination-utils.ts +11 -3
- package/plugins/steve/subscribe.js +35 -5
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +211 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +37 -4
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +1 -1
- package/rancher-components/RcButton/RcButton.test.ts +37 -1
- package/rancher-components/RcButton/RcButton.vue +38 -8
- package/rancher-components/RcDropdown/RcDropdownTrigger.vue +10 -8
- package/scripts/test-plugins-build.sh +5 -2
- package/server/server-middleware.js +2 -2
- package/static/humans.txt +1 -0
- package/static/robots.txt +34 -0
- package/static/welcome-cow.svg +18 -0
- package/store/__tests__/catalog.test.ts +276 -12
- package/store/__tests__/type-map.test.ts +556 -1
- package/store/action-menu.js +8 -3
- package/store/auth.js +1 -4
- package/store/aws.js +27 -16
- package/store/catalog.js +87 -11
- package/store/digitalocean.js +20 -38
- package/store/index.js +2 -0
- package/store/linode.js +25 -40
- package/store/pnap.js +1 -0
- package/store/type-map.js +111 -29
- package/tsconfig.paths.json +8 -8
- package/types/kube/kube-api.ts +14 -1
- package/types/rancher/steve.api.ts +12 -12
- package/types/resources/settings.d.ts +2 -1
- package/types/shell/index.d.ts +128 -24
- package/types/store/dashboard-store.types.ts +108 -11
- package/types/store/pagination.types.ts +6 -3
- package/utils/__tests__/alertmanagerconfig.test.ts +117 -0
- package/utils/__tests__/async.test.ts +87 -0
- package/utils/__tests__/aws.test.ts +140 -0
- package/utils/__tests__/banners.test.ts +176 -0
- package/utils/__tests__/chart.test.ts +64 -1
- package/utils/__tests__/color.test.ts +226 -0
- package/utils/__tests__/duration.test.ts +140 -0
- package/utils/__tests__/fleet.test.ts +340 -0
- package/utils/__tests__/git.test.ts +270 -0
- package/utils/__tests__/inactivity.test.ts +316 -0
- package/utils/__tests__/ingress.test.ts +553 -0
- package/utils/__tests__/kube.test.ts +68 -0
- package/utils/__tests__/namespace-filter.test.ts +109 -0
- package/utils/__tests__/object.test.ts +77 -0
- package/utils/__tests__/pagination-utils.test.ts +361 -0
- package/utils/__tests__/parse-externalid.test.ts +137 -0
- package/utils/__tests__/perf-setting.utils.test.ts +98 -0
- package/utils/__tests__/poller-sequential.test.ts +177 -0
- package/utils/__tests__/poller.test.ts +170 -0
- package/utils/__tests__/promise.test.ts +346 -0
- package/utils/__tests__/settings.test.ts +140 -0
- package/utils/__tests__/sort-utils.test.ts +301 -0
- package/utils/__tests__/string-utils.test.ts +798 -0
- package/utils/__tests__/string.test.ts +23 -1
- package/utils/__tests__/style.test.ts +154 -0
- package/utils/__tests__/svg-filter.test.ts +184 -0
- package/utils/__tests__/time.test.ts +14 -1
- package/utils/__tests__/units.test.ts +417 -0
- package/utils/__tests__/url.test.ts +246 -0
- package/utils/__tests__/versions.test.ts +128 -0
- package/utils/__tests__/xccdf.test.ts +391 -0
- package/utils/chart.js +36 -0
- package/utils/fleet.ts +13 -3
- package/utils/gatekeeper/__tests__/util.test.ts +174 -0
- package/utils/gc/__tests__/gc-interval.test.ts +119 -0
- package/utils/gc/__tests__/gc-root-store.test.ts +225 -0
- package/utils/gc/__tests__/gc-route-changed.test.ts +96 -0
- package/utils/gc/__tests__/gc.test.ts +487 -0
- package/utils/ingress.ts +9 -1
- package/utils/object.js +33 -2
- package/utils/pagination-utils.ts +2 -1
- package/utils/string.js +25 -2
- package/utils/time.ts +5 -0
- package/utils/uiplugins.ts +5 -5
- package/utils/validators/__tests__/cluster-name.test.ts +110 -0
- package/utils/validators/__tests__/cron-schedule.test.ts +79 -0
- package/utils/validators/__tests__/index.test.ts +481 -0
- package/utils/validators/__tests__/kubernetes-name.test.ts +163 -0
- package/utils/validators/__tests__/misc-validators.test.ts +246 -0
- package/utils/validators/__tests__/pod-affinity.test.ts +382 -0
- package/utils/validators/__tests__/prometheusrule.test.ts +211 -0
- package/utils/validators/__tests__/role-template.test.ts +149 -0
- package/utils/validators/__tests__/service.test.ts +283 -0
- package/utils/validators/__tests__/setting.test.js +32 -0
- package/utils/validators/formRules/__tests__/index.test.ts +50 -0
- package/utils/validators/formRules/index.ts +5 -5
- package/utils/validators/machine-pool.ts +1 -1
- package/utils/validators/setting.js +18 -3
- package/utils/xccdf.ts +418 -0
- package/vue.config.js +0 -9
- package/assets/fonts/lato/lato-v17-latin-700.woff +0 -0
- package/assets/fonts/lato/lato-v17-latin-700.woff2 +0 -0
- package/assets/fonts/lato/lato-v17-latin-regular.woff +0 -0
- package/assets/fonts/lato/lato-v17-latin-regular.woff2 +0 -0
- package/assets/images/providers/azuread-black.svg +0 -22
- package/assets/images/providers/azuread.svg +0 -25
- package/assets/images/vendor/azuread.svg +0 -18
- package/assets/styles/fonts/_dots.scss +0 -18
- package/components/EmberPage.vue +0 -622
- package/components/EmberPageView.vue +0 -39
- package/components/form/labeled-select-utils/labeled-select-pagination.ts +0 -116
- package/mixins/labeled-form-element.ts +0 -225
- package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -28
- package/pages/c/_cluster/manager/pages/_page.vue +0 -22
- package/pages/c/_cluster/mcapps/pages/_page.vue +0 -22
- package/plugins/ember-cookie.js +0 -17
- package/utils/ember-page.js +0 -30
|
@@ -4,19 +4,23 @@ import ChartMixin from '@shell/mixins/chart';
|
|
|
4
4
|
import { Banner } from '@components/Banner';
|
|
5
5
|
import ChartReadme from '@shell/components/ChartReadme';
|
|
6
6
|
import LazyImage from '@shell/components/LazyImage';
|
|
7
|
+
import LabeledSelect from '@shell/components/form/LabeledSelect';
|
|
7
8
|
import isEqual from 'lodash/isEqual';
|
|
8
9
|
import {
|
|
9
|
-
CHART, REPO, REPO_TYPE, VERSION, SEARCH_QUERY, CATEGORY, TAG, DEPRECATED
|
|
10
|
+
CHART, REPO, REPO_TYPE, VERSION, SEARCH_QUERY, CATEGORY, TAG, DEPRECATED, NAMESPACE, NAME, NEW_APP_INSTANCE, _FLAGGED
|
|
10
11
|
} from '@shell/config/query-params';
|
|
11
12
|
import { DATE_FORMAT } from '@shell/store/prefs';
|
|
12
|
-
import {
|
|
13
|
+
import { isMissingDate } from '@shell/utils/time';
|
|
13
14
|
import { escapeHtml } from '@shell/utils/string';
|
|
14
15
|
import { mapGetters } from 'vuex';
|
|
15
|
-
import { compatibleVersionsFor } from '@shell/store/catalog';
|
|
16
|
+
import { APP_UPGRADE_STATUS, compatibleVersionsFor } from '@shell/store/catalog';
|
|
17
|
+
import { compareChartVersions, getStandaloneReadmeUrl } from '@shell/utils/chart';
|
|
16
18
|
import AppChartCardSubHeader from '@shell/pages/c/_cluster/apps/charts/AppChartCardSubHeader';
|
|
17
19
|
import AppChartCardFooter from '@shell/pages/c/_cluster/apps/charts/AppChartCardFooter';
|
|
18
20
|
import day from 'dayjs';
|
|
19
21
|
import { RcButton } from '@components/RcButton';
|
|
22
|
+
import { RcButtonSplit } from '@components/RcButtonSplit';
|
|
23
|
+
import { RcDropdownItem } from '@components/RcDropdown';
|
|
20
24
|
|
|
21
25
|
export default {
|
|
22
26
|
components: {
|
|
@@ -24,9 +28,12 @@ export default {
|
|
|
24
28
|
ChartReadme,
|
|
25
29
|
LazyImage,
|
|
26
30
|
Loading,
|
|
31
|
+
LabeledSelect,
|
|
27
32
|
AppChartCardSubHeader,
|
|
28
33
|
AppChartCardFooter,
|
|
29
|
-
RcButton
|
|
34
|
+
RcButton,
|
|
35
|
+
RcButtonSplit,
|
|
36
|
+
RcDropdownItem
|
|
30
37
|
},
|
|
31
38
|
|
|
32
39
|
mixins: [
|
|
@@ -40,9 +47,9 @@ export default {
|
|
|
40
47
|
data() {
|
|
41
48
|
return {
|
|
42
49
|
SEARCH_QUERY,
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
50
|
+
showLastVersions: 7,
|
|
51
|
+
showMoreVersions: false,
|
|
52
|
+
selectedInstalledAppId: null,
|
|
46
53
|
};
|
|
47
54
|
},
|
|
48
55
|
|
|
@@ -50,9 +57,15 @@ export default {
|
|
|
50
57
|
...mapGetters(['currentCluster']),
|
|
51
58
|
|
|
52
59
|
headerContent() {
|
|
60
|
+
const cardContent = this.chart.cardContent;
|
|
61
|
+
|
|
62
|
+
// Override statuses based on selected installed app for the detail page
|
|
63
|
+
const statuses = this.computeSelectedAppStatuses(cardContent.statuses);
|
|
64
|
+
|
|
53
65
|
return {
|
|
54
|
-
...
|
|
55
|
-
|
|
66
|
+
...cardContent,
|
|
67
|
+
statuses,
|
|
68
|
+
subHeaderItems: cardContent.subHeaderItems.map((item, i) => i === 0 ? ({
|
|
56
69
|
icon: 'icon-version-alt',
|
|
57
70
|
iconTooltip: { key: 'tableHeaders.version' },
|
|
58
71
|
label: this.query.versionName
|
|
@@ -138,6 +151,57 @@ export default {
|
|
|
138
151
|
}
|
|
139
152
|
|
|
140
153
|
return '';
|
|
154
|
+
},
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* Returns the currently selected installed app.
|
|
158
|
+
* Falls back to this.existing (set by the mixin for targeted charts or URL query params).
|
|
159
|
+
*/
|
|
160
|
+
selectedInstalledApp() {
|
|
161
|
+
if (this.selectedInstalledAppId) {
|
|
162
|
+
return this.installedInstances?.find((app) => app.id === this.selectedInstalledAppId) || null;
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
return this.existing || null;
|
|
166
|
+
},
|
|
167
|
+
|
|
168
|
+
/**
|
|
169
|
+
* Returns the action for the current state based on the selected app and target version.
|
|
170
|
+
*/
|
|
171
|
+
currentAction() {
|
|
172
|
+
const app = this.selectedInstalledApp;
|
|
173
|
+
|
|
174
|
+
if (!app) {
|
|
175
|
+
return { tKey: 'install', icon: 'plus' };
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const installedVersion = app.spec?.chart?.metadata?.version;
|
|
179
|
+
|
|
180
|
+
if (installedVersion === this.targetVersion) {
|
|
181
|
+
return { tKey: 'edit', icon: 'edit' };
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if (compareChartVersions(installedVersion, this.targetVersion) < 0) {
|
|
185
|
+
return { tKey: 'upgrade', icon: 'upgrade-alt' };
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return { tKey: 'downgrade', icon: 'downgrade-alt' };
|
|
189
|
+
},
|
|
190
|
+
|
|
191
|
+
/**
|
|
192
|
+
* Returns options for the installed apps selector dropdown.
|
|
193
|
+
* Adds "(Upgradeable)" suffix to apps that have an upgrade available.
|
|
194
|
+
*/
|
|
195
|
+
installedAppOptions() {
|
|
196
|
+
return (this.installedInstances || []).map((app) => {
|
|
197
|
+
const isUpgradeable = app.upgradeAvailable === APP_UPGRADE_STATUS.SINGLE_UPGRADE;
|
|
198
|
+
const baseName = `${ app?.metadata?.namespace }/${ app?.metadata?.name }`;
|
|
199
|
+
|
|
200
|
+
return {
|
|
201
|
+
value: app.id,
|
|
202
|
+
label: isUpgradeable ? `${ baseName } (${ this.t('generic.upgradeable').toLowerCase() })` : baseName
|
|
203
|
+
};
|
|
204
|
+
});
|
|
141
205
|
}
|
|
142
206
|
|
|
143
207
|
},
|
|
@@ -153,7 +217,85 @@ export default {
|
|
|
153
217
|
},
|
|
154
218
|
|
|
155
219
|
methods: {
|
|
156
|
-
|
|
220
|
+
isMissingDate,
|
|
221
|
+
/**
|
|
222
|
+
* Computes statuses for the chart detail page based on the selected installed app.
|
|
223
|
+
* When an app is selected, shows instance-specific installed/upgradeable status.
|
|
224
|
+
* When no app is selected (fresh install), returns only deprecated status if applicable.
|
|
225
|
+
*
|
|
226
|
+
* @param {Array} defaultStatuses - The default statuses from chart.cardContent
|
|
227
|
+
* @returns {Array} Statuses array for the selected app context
|
|
228
|
+
*/
|
|
229
|
+
computeSelectedAppStatuses(defaultStatuses) {
|
|
230
|
+
const statuses = [];
|
|
231
|
+
|
|
232
|
+
// Always include deprecated status if present
|
|
233
|
+
const deprecatedStatus = defaultStatuses.find((s) => s.icon === 'icon-alert-alt');
|
|
234
|
+
|
|
235
|
+
if (deprecatedStatus) {
|
|
236
|
+
statuses.push(deprecatedStatus);
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
const selectedApp = this.selectedInstalledApp;
|
|
240
|
+
|
|
241
|
+
if (!selectedApp) {
|
|
242
|
+
// No app selected - fresh install, no installed/upgradeable status
|
|
243
|
+
return statuses;
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Check if the selected app is upgradeable
|
|
247
|
+
const isUpgradeable = selectedApp.upgradeAvailable === APP_UPGRADE_STATUS.SINGLE_UPGRADE;
|
|
248
|
+
|
|
249
|
+
if (isUpgradeable) {
|
|
250
|
+
statuses.push({
|
|
251
|
+
icon: 'icon-upgrade-alt', color: 'info', tooltip: { key: 'generic.upgradeable' }
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
// Add installed status with version for the selected app
|
|
256
|
+
const installedVersion = selectedApp.spec?.chart?.metadata?.version;
|
|
257
|
+
|
|
258
|
+
statuses.push({
|
|
259
|
+
icon: 'icon-confirmation-alt', color: 'success', tooltip: { text: `${ this.t('generic.installed') } (${ installedVersion })` }
|
|
260
|
+
});
|
|
261
|
+
|
|
262
|
+
return statuses;
|
|
263
|
+
},
|
|
264
|
+
|
|
265
|
+
/**
|
|
266
|
+
* Navigate to install page for the currently selected installed app (edit/upgrade/downgrade).
|
|
267
|
+
*/
|
|
268
|
+
executeAction() {
|
|
269
|
+
const app = this.selectedInstalledApp;
|
|
270
|
+
const query = {
|
|
271
|
+
[REPO_TYPE]: this.query.repoType,
|
|
272
|
+
[REPO]: this.query.repoName,
|
|
273
|
+
[CHART]: this.query.chartName,
|
|
274
|
+
[VERSION]: this.query.versionName,
|
|
275
|
+
[DEPRECATED]: this.query.deprecated,
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
// If editing an existing app, include namespace and name in query
|
|
279
|
+
if (app) {
|
|
280
|
+
query[NAMESPACE] = app.metadata.namespace;
|
|
281
|
+
query[NAME] = app.metadata.name;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
this.$router.push({
|
|
285
|
+
name: 'c-cluster-apps-charts-install',
|
|
286
|
+
params: {
|
|
287
|
+
cluster: this.$route.params.cluster,
|
|
288
|
+
product: this.$store.getters['productId'],
|
|
289
|
+
},
|
|
290
|
+
query
|
|
291
|
+
});
|
|
292
|
+
},
|
|
293
|
+
|
|
294
|
+
/**
|
|
295
|
+
* Navigate to install page to create a new instance of this chart.
|
|
296
|
+
* Uses NEW_APP_INSTANCE flag to enable version selection in the install wizard.
|
|
297
|
+
*/
|
|
298
|
+
installNewInstance() {
|
|
157
299
|
this.$router.push({
|
|
158
300
|
name: 'c-cluster-apps-charts-install',
|
|
159
301
|
params: {
|
|
@@ -161,14 +303,25 @@ export default {
|
|
|
161
303
|
product: this.$store.getters['productId'],
|
|
162
304
|
},
|
|
163
305
|
query: {
|
|
164
|
-
[REPO_TYPE]:
|
|
165
|
-
[REPO]:
|
|
166
|
-
[CHART]:
|
|
167
|
-
[VERSION]:
|
|
168
|
-
[DEPRECATED]:
|
|
306
|
+
[REPO_TYPE]: this.query.repoType,
|
|
307
|
+
[REPO]: this.query.repoName,
|
|
308
|
+
[CHART]: this.query.chartName,
|
|
309
|
+
[VERSION]: this.query.versionName,
|
|
310
|
+
[DEPRECATED]: this.query.deprecated,
|
|
311
|
+
[NEW_APP_INSTANCE]: _FLAGGED,
|
|
169
312
|
}
|
|
170
313
|
});
|
|
171
314
|
},
|
|
315
|
+
|
|
316
|
+
/**
|
|
317
|
+
* Handle installed app selection from the dropdown.
|
|
318
|
+
* Updates selectedInstalledAppId and this.existing so the page reflects the current installed app and displays the correct information for the selected instance.
|
|
319
|
+
*/
|
|
320
|
+
handleInstalledAppSelect(id) {
|
|
321
|
+
this.selectedInstalledAppId = id;
|
|
322
|
+
this.existing = this.installedInstances?.find((app) => app.id === id) ?? null;
|
|
323
|
+
},
|
|
324
|
+
|
|
172
325
|
handleHeaderItemClick(type, value) {
|
|
173
326
|
const params = {
|
|
174
327
|
cluster: this.$route.params.cluster,
|
|
@@ -194,17 +347,9 @@ export default {
|
|
|
194
347
|
}
|
|
195
348
|
},
|
|
196
349
|
formatVersionDate(date) {
|
|
197
|
-
if (date === ZERO_TIME) {
|
|
198
|
-
return this.t('generic.na');
|
|
199
|
-
}
|
|
200
|
-
|
|
201
350
|
return day(date).format('MMM D, YYYY');
|
|
202
351
|
},
|
|
203
352
|
getVersionDateTooltip(date) {
|
|
204
|
-
if (date === ZERO_TIME) {
|
|
205
|
-
return this.t('catalog.chart.info.chartVersions.missingVersionDate');
|
|
206
|
-
}
|
|
207
|
-
|
|
208
353
|
const dateFormat = escapeHtml(this.$store.getters['prefs/get'](DATE_FORMAT));
|
|
209
354
|
|
|
210
355
|
return day(date).format(dateFormat);
|
|
@@ -220,6 +365,20 @@ export default {
|
|
|
220
365
|
[VERSION]: version,
|
|
221
366
|
}
|
|
222
367
|
};
|
|
368
|
+
},
|
|
369
|
+
openReadme() {
|
|
370
|
+
const url = getStandaloneReadmeUrl(this.$router, {
|
|
371
|
+
cluster: this.$route.params.cluster,
|
|
372
|
+
repoType: this.query.repoType,
|
|
373
|
+
repoName: this.query.repoName,
|
|
374
|
+
chartName: this.query.chartName,
|
|
375
|
+
versionName: this.query.versionName || this.targetVersion,
|
|
376
|
+
deprecated: this.query.deprecated,
|
|
377
|
+
showAppReadme: false,
|
|
378
|
+
hideReadmeFirstTitle: false,
|
|
379
|
+
});
|
|
380
|
+
|
|
381
|
+
window.open(url, '_blank');
|
|
223
382
|
}
|
|
224
383
|
},
|
|
225
384
|
};
|
|
@@ -297,17 +456,49 @@ export default {
|
|
|
297
456
|
/>
|
|
298
457
|
</div>
|
|
299
458
|
</div>
|
|
300
|
-
<
|
|
459
|
+
<div
|
|
301
460
|
v-if="!requires.length"
|
|
302
|
-
|
|
303
|
-
class="btn role-primary"
|
|
304
|
-
@click.prevent="install"
|
|
461
|
+
class="header-actions"
|
|
305
462
|
>
|
|
306
|
-
<
|
|
307
|
-
|
|
463
|
+
<LabeledSelect
|
|
464
|
+
v-if="installedInstances.length > 1 && canInstallNew"
|
|
465
|
+
:value="selectedInstalledApp?.id"
|
|
466
|
+
:options="installedAppOptions"
|
|
467
|
+
:clearable="false"
|
|
468
|
+
:aria-label="t('catalog.chart.installedAppsSelector.ariaLabel')"
|
|
469
|
+
class="installed-apps-selector"
|
|
470
|
+
data-testid="installed-apps-selector"
|
|
471
|
+
@update:value="handleInstalledAppSelect"
|
|
308
472
|
/>
|
|
309
|
-
|
|
310
|
-
|
|
473
|
+
<!-- Split button: shown when chart is installed AND can be re-installed -->
|
|
474
|
+
<RcButtonSplit
|
|
475
|
+
v-if="selectedInstalledApp && canInstallNew"
|
|
476
|
+
data-testid="btn-chart-install"
|
|
477
|
+
size="large"
|
|
478
|
+
:left-icon="currentAction.icon"
|
|
479
|
+
@click="executeAction"
|
|
480
|
+
>
|
|
481
|
+
{{ t(`catalog.chart.chartButton.action.${currentAction.tKey}` ) }}
|
|
482
|
+
<template #dropdownCollection>
|
|
483
|
+
<RcDropdownItem @click="installNewInstance">
|
|
484
|
+
<template #before>
|
|
485
|
+
<i class="icon icon-plus" />
|
|
486
|
+
</template>
|
|
487
|
+
{{ t('catalog.chart.chartButton.action.installNew') }}
|
|
488
|
+
</RcDropdownItem>
|
|
489
|
+
</template>
|
|
490
|
+
</RcButtonSplit>
|
|
491
|
+
<!-- Simple button: shown when chart is not installed OR cannot be re-installed -->
|
|
492
|
+
<RcButton
|
|
493
|
+
v-else
|
|
494
|
+
data-testid="btn-chart-install"
|
|
495
|
+
size="large"
|
|
496
|
+
:left-icon="currentAction.icon"
|
|
497
|
+
@click.prevent="executeAction"
|
|
498
|
+
>
|
|
499
|
+
{{ t(`catalog.chart.chartButton.action.${currentAction.tKey}` ) }}
|
|
500
|
+
</RcButton>
|
|
501
|
+
</div>
|
|
311
502
|
</div>
|
|
312
503
|
|
|
313
504
|
<div class="dashed-spacer" />
|
|
@@ -359,13 +550,27 @@ export default {
|
|
|
359
550
|
</div>
|
|
360
551
|
|
|
361
552
|
<div class="chart-body">
|
|
362
|
-
<
|
|
553
|
+
<div
|
|
363
554
|
v-if="hasReadme"
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
555
|
+
class="readme-wrapper"
|
|
556
|
+
>
|
|
557
|
+
<RcButton
|
|
558
|
+
v-clean-tooltip="t('catalog.chart.viewReadmeSeparately.tooltip')"
|
|
559
|
+
class="open-readme-button"
|
|
560
|
+
secondary
|
|
561
|
+
rightIcon="external-link"
|
|
562
|
+
@click="openReadme()"
|
|
563
|
+
>
|
|
564
|
+
{{ t('catalog.chart.viewReadmeSeparately.label') }}
|
|
565
|
+
<span class="sr-only">{{ t('generic.opensInNewTab') }}</span>
|
|
566
|
+
</RcButton>
|
|
567
|
+
<ChartReadme
|
|
568
|
+
:version-info="versionInfo"
|
|
569
|
+
:show-app-readme="false"
|
|
570
|
+
:hide-readme-first-title="false"
|
|
571
|
+
class="chart-body__readme"
|
|
572
|
+
/>
|
|
573
|
+
</div>
|
|
369
574
|
<div
|
|
370
575
|
v-else
|
|
371
576
|
class="chart-body__readme"
|
|
@@ -418,6 +623,7 @@ export default {
|
|
|
418
623
|
/>
|
|
419
624
|
</div>
|
|
420
625
|
<p
|
|
626
|
+
v-if="!isMissingDate(vers.created)"
|
|
421
627
|
v-clean-tooltip="{ content: getVersionDateTooltip(vers.created), placement: 'left'}"
|
|
422
628
|
class="version-date"
|
|
423
629
|
>
|
|
@@ -624,9 +830,16 @@ export default {
|
|
|
624
830
|
}
|
|
625
831
|
}
|
|
626
832
|
|
|
627
|
-
.
|
|
833
|
+
.header-actions {
|
|
628
834
|
margin-left: auto;
|
|
629
|
-
|
|
835
|
+
display: flex;
|
|
836
|
+
align-items: flex-start;
|
|
837
|
+
flex-shrink: 0;
|
|
838
|
+
gap: 16px;
|
|
839
|
+
|
|
840
|
+
.installed-apps-selector {
|
|
841
|
+
width: 340px;
|
|
842
|
+
}
|
|
630
843
|
}
|
|
631
844
|
|
|
632
845
|
.description {
|
|
@@ -643,6 +856,29 @@ export default {
|
|
|
643
856
|
|
|
644
857
|
.chart-body {
|
|
645
858
|
display: flex;
|
|
859
|
+
.readme-wrapper {
|
|
860
|
+
position: relative;
|
|
861
|
+
flex: 1;
|
|
862
|
+
|
|
863
|
+
.open-readme-button {
|
|
864
|
+
display: flex;
|
|
865
|
+
opacity: 0;
|
|
866
|
+
pointer-events: none;
|
|
867
|
+
transition: opacity 100ms ease-in;
|
|
868
|
+
position: absolute;
|
|
869
|
+
top: 12px;
|
|
870
|
+
right: 24px;
|
|
871
|
+
}
|
|
872
|
+
|
|
873
|
+
&:hover,
|
|
874
|
+
&:focus-within {
|
|
875
|
+
.open-readme-button {
|
|
876
|
+
opacity: 1;
|
|
877
|
+
pointer-events: auto;
|
|
878
|
+
}
|
|
879
|
+
}
|
|
880
|
+
}
|
|
881
|
+
|
|
646
882
|
&__readme {
|
|
647
883
|
flex: 1;
|
|
648
884
|
min-width: 400px;
|
|
@@ -200,7 +200,7 @@ export default {
|
|
|
200
200
|
tagOptions() {
|
|
201
201
|
const outSet = new Set();
|
|
202
202
|
|
|
203
|
-
this.
|
|
203
|
+
this.enabledCharts.forEach((chart) => {
|
|
204
204
|
if (Array.isArray(chart.tags)) {
|
|
205
205
|
chart.tags.forEach((tag) => outSet.add(tag));
|
|
206
206
|
}
|
|
@@ -270,7 +270,7 @@ export default {
|
|
|
270
270
|
categoryOptions() {
|
|
271
271
|
const map = {};
|
|
272
272
|
|
|
273
|
-
for ( const chart of this.
|
|
273
|
+
for ( const chart of this.enabledCharts ) {
|
|
274
274
|
for ( const c of chart.categories ) {
|
|
275
275
|
if ( !map[c] ) {
|
|
276
276
|
const labelKey = `catalog.charts.categories.${ lcFirst(c) }`;
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
AUTH_TYPE, NAMESPACE as NAMESPACE_TYPE
|
|
31
31
|
} from '@shell/config/types';
|
|
32
32
|
import {
|
|
33
|
-
CHART, FROM_CLUSTER, FROM_TOOLS, HIDE_SIDE_NAV, NAMESPACE, REPO, REPO_TYPE, VERSION, _FLAGGED
|
|
33
|
+
CHART, FROM_CLUSTER, FROM_TOOLS, HIDE_SIDE_NAV, NEW_APP_INSTANCE, NAMESPACE, REPO, REPO_TYPE, VERSION, _FLAGGED
|
|
34
34
|
} from '@shell/config/query-params';
|
|
35
35
|
import { CATALOG as CATALOG_ANNOTATIONS, PROJECT } from '@shell/config/labels-annotations';
|
|
36
36
|
|
|
@@ -41,7 +41,7 @@ import {
|
|
|
41
41
|
import { ignoreVariables } from './install.helpers';
|
|
42
42
|
import { findBy, insertAt } from '@shell/utils/array';
|
|
43
43
|
import { saferDump } from '@shell/utils/create-yaml';
|
|
44
|
-
import {
|
|
44
|
+
import { WINDOWS, isRancherRepo, getPermittedOSs } from '@shell/store/catalog';
|
|
45
45
|
import { SETTING } from '@shell/config/settings';
|
|
46
46
|
import SelectOrCreateAuthSecret from '@shell/components/form/SelectOrCreateAuthSecret.vue';
|
|
47
47
|
import { generateRandomAlphaString } from '@shell/utils/string';
|
|
@@ -602,8 +602,11 @@ export default {
|
|
|
602
602
|
},
|
|
603
603
|
|
|
604
604
|
showSelectVersionOrChart() {
|
|
605
|
-
// Allow the user to choose a version if
|
|
606
|
-
|
|
605
|
+
// Allow the user to choose a version if:
|
|
606
|
+
// - the app exists (editing/upgrading)
|
|
607
|
+
// - OR they've come from tools
|
|
608
|
+
// - OR they're installing a new instance of an already-installed chart
|
|
609
|
+
return this.existing || (FROM_TOOLS in this.$route.query) || (NEW_APP_INSTANCE in this.$route.query);
|
|
607
610
|
},
|
|
608
611
|
|
|
609
612
|
showNameEditor() {
|
|
@@ -763,14 +766,17 @@ export default {
|
|
|
763
766
|
},
|
|
764
767
|
|
|
765
768
|
windowsIncompatible() {
|
|
766
|
-
if (this.chart?.windowsIncompatible) {
|
|
767
|
-
return this.t('catalog.charts.windowsIncompatible');
|
|
768
|
-
}
|
|
769
769
|
if (this.versionInfo) {
|
|
770
|
-
const
|
|
770
|
+
const isRancher = isRancherRepo(this.repo, this.chart);
|
|
771
|
+
const permittedSystems = getPermittedOSs(this.versionInfo?.chart?.annotations, isRancher);
|
|
772
|
+
const incompatibleVersion = permittedSystems.length > 0 && !permittedSystems.includes('windows');
|
|
773
|
+
|
|
774
|
+
if (incompatibleVersion) {
|
|
775
|
+
if (!this.chart?.windowsIncompatible) {
|
|
776
|
+
return this.t('catalog.charts.versionWindowsIncompatible');
|
|
777
|
+
}
|
|
771
778
|
|
|
772
|
-
|
|
773
|
-
return this.t('catalog.charts.versionWindowsIncompatible');
|
|
779
|
+
return this.t('catalog.charts.windowsIncompatible');
|
|
774
780
|
}
|
|
775
781
|
}
|
|
776
782
|
|
|
@@ -1110,6 +1116,8 @@ export default {
|
|
|
1110
1116
|
this.$router.replace(this.clusterToolsLocation());
|
|
1111
1117
|
} else if (this.$route.query[FROM_CLUSTER] === _FLAGGED) {
|
|
1112
1118
|
this.$router.replace(this.clustersLocation());
|
|
1119
|
+
} else if (!this.chart) {
|
|
1120
|
+
this.$router.replace(this.appLocation());
|
|
1113
1121
|
} else {
|
|
1114
1122
|
this.$router.replace(this.chartLocation(false));
|
|
1115
1123
|
}
|