dashboard-shell-shell 1.0.121 → 1.0.1000000081
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/.DS_Store +0 -0
- package/assets/brand/harvester/favicon.png +0 -0
- package/assets/brand/suse/favicon.png +0 -0
- package/assets/icons/iconfont.css +19 -3
- package/assets/icons/iconfont.js +1 -1
- package/assets/icons/iconfont.json +28 -0
- package/assets/icons/iconfont.ttf +0 -0
- package/assets/icons/iconfont.woff +0 -0
- package/assets/icons/iconfont.woff2 +0 -0
- package/assets/images/pl/half-logo.svg +2 -23
- package/assets/styles/base/_functions.scss +0 -0
- package/assets/styles/base/_mixins.scss +0 -0
- package/assets/styles/base/_variables.scss +1 -1
- package/assets/styles/global/_labeled-input.scss +0 -1
- package/assets/styles/global/_layout.scss +1 -1
- package/assets/styles/global/_select.scss +4 -2
- package/assets/styles/global/_table.scss +5 -0
- package/assets/styles/vendor/vue-select.scss +2 -1
- package/assets/translations/en-us.yaml +1 -1
- package/assets/translations/zh-hans.yaml +25 -15
- package/chart/monitoring/index.vue +3 -1
- package/chart/monitoring/prometheus/index.vue +13 -10
- package/cloud-credential/aws.vue +2 -0
- package/components/ActionDropdown.vue +1 -1
- package/components/ActionDropdownShell.vue +71 -0
- package/components/ActionMenu.vue +2 -2
- package/components/ActionMenuShell.vue +3 -0
- package/components/AppModal.vue +84 -8
- package/components/AssignTo.vue +25 -11
- package/components/AsyncButton.vue +24 -7
- package/components/BannerGraphic.vue +1 -0
- package/components/ButtonDropdown.vue +26 -4
- package/components/ButtonGroup.vue +4 -0
- package/components/ButtonMultiAction.vue +1 -0
- package/components/CodeMirror.vue +19 -6
- package/components/CommunityLinks.vue +3 -3
- package/components/ConsumptionGauge.vue +24 -5
- package/components/CopyToClipboardText.vue +2 -1
- package/components/CruResource.vue +13 -7
- package/components/CruResourceFooter.vue +2 -2
- package/components/DashboardOptions.vue +29 -17
- package/components/DetailText.vue +5 -0
- package/components/DisableAuthProviderModal.vue +1 -0
- package/components/DotState.vue +84 -0
- package/components/ExplorerMembers.vue +1 -1
- package/components/ExplorerProjectsNamespaces.vue +89 -16
- package/components/FixedBanner.vue +19 -12
- package/components/GlobalRoleBindings.vue +5 -1
- package/components/GrafanaDashboard.vue +4 -4
- package/components/GrowlManager.vue +4 -1
- package/components/HardwareResourceGauge.vue +39 -3
- package/components/InfoBox.vue +3 -3
- package/components/InputOrDisplay.vue +28 -2
- package/components/LabelValue.vue +20 -1
- package/components/LandingPagePreference.vue +5 -3
- package/components/LocaleSelector.vue +39 -93
- package/components/ModalManager.vue +55 -0
- package/components/ModalWithCard.vue +13 -3
- package/components/MoveModal.vue +1 -0
- package/components/PodSecurityAdmission.vue +1 -1
- package/components/PromptChangePassword.vue +1 -1
- package/components/PromptModal.vue +16 -3
- package/components/PromptRemove.vue +29 -9
- package/components/PromptRestore.vue +1 -0
- package/components/ResourceCancelModal.vue +1 -0
- package/components/ResourceDetail/Masthead.vue +52 -17
- package/components/ResourceDetail/__tests__/Masthead.test.ts +5 -1
- package/components/ResourceDetail/index.vue +54 -16
- package/components/ResourceList/Masthead.vue +9 -4
- package/components/ResourceList/index.vue +4 -3
- package/components/ResourceTable.vue +1 -0
- package/components/SideNav.vue +20 -15
- package/components/SlideInPanelManager.vue +126 -0
- package/components/SortableTable/THead.vue +10 -4
- package/components/SortableTable/actions.js +1 -1
- package/components/SortableTable/index.vue +540 -554
- package/components/SortableTable/selection.js +2 -13
- package/components/StatusBadge.vue +77 -0
- package/components/Tabbed/Tab.vue +3 -3
- package/components/Tabbed/index.vue +47 -29
- package/components/Wizard.vue +2 -2
- package/components/YamlEditor.vue +1 -1
- package/components/__tests__/AsyncButton.test.ts +2 -2
- package/components/__tests__/FixedBanner.test.ts +3 -3
- package/components/__tests__/ModalManager.spec.ts +176 -0
- package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
- package/components/auth/Principal.vue +10 -3
- package/components/auth/RoleDetailEdit.vue +1 -1
- package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
- package/components/form/ArrayList.vue +123 -85
- package/components/form/ArrayListGrouped.vue +10 -2
- package/components/form/ArrayListSelect.vue +1 -1
- package/components/form/Command.vue +6 -15
- package/components/form/EnvVars.vue +16 -8
- package/components/form/Footer.vue +10 -7
- package/components/form/HealthCheck.vue +3 -3
- package/components/form/HookOption.vue +11 -16
- package/components/form/InputWithSelect.vue +6 -5
- package/components/form/KeyValue.vue +39 -10
- package/components/form/LabeledSelect.vue +73 -77
- package/components/form/Labels.vue +6 -3
- package/components/form/LifecycleHooks.vue +3 -3
- package/components/form/MatchExpressions.vue +42 -17
- package/components/form/NameNsDescription.vue +163 -116
- package/components/form/Networking.vue +20 -12
- package/components/form/NodeAffinity.vue +31 -23
- package/components/form/NodeScheduling.vue +13 -3
- package/components/form/Password.vue +11 -5
- package/components/form/PodAffinity.vue +47 -48
- package/components/form/Probe.vue +68 -66
- package/components/form/ResourceQuota/Namespace.vue +4 -4
- package/components/form/ResourceQuota/NamespaceRow.vue +5 -7
- package/components/form/ResourceQuota/Project.vue +9 -5
- package/components/form/ResourceQuota/ProjectRow.vue +4 -6
- package/components/form/ResourceSelector.vue +7 -9
- package/components/form/SSHKnownHosts/KnownHostsEditDialog.vue +6 -3
- package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +12 -1
- package/components/form/SSHKnownHosts/index.vue +16 -2
- package/components/form/Security.vue +54 -56
- package/components/form/Select.vue +44 -7
- package/components/form/ShellInput.vue +5 -1
- package/components/form/SimpleSecretSelector.vue +29 -9
- package/components/form/Tolerations.vue +5 -1
- package/components/form/UnitInput.vue +10 -5
- package/components/form/ValueFromResource.vue +134 -121
- package/components/form/WorkloadPorts.vue +18 -18
- package/components/form/__tests__/ArrayList.test.ts +5 -2
- package/components/form/__tests__/MatchExpressions.test.ts +12 -12
- package/components/form/__tests__/NameNsDescription.test.ts +115 -14
- package/components/form/__tests__/Probe.test.ts +12 -8
- package/components/form/__tests__/SSHKnownHosts.test.ts +11 -0
- package/components/form/__tests__/Select.test.ts +37 -0
- package/components/form/__tests__/UnitInput.test.ts +4 -5
- package/components/formatter/BadgeStateFormatter.vue +8 -5
- package/components/formatter/InternalExternalIP.vue +2 -0
- package/components/formatter/LiveDate.vue +3 -3
- package/components/formatter/SecretData.vue +20 -7
- package/components/nav/Favorite.vue +5 -1
- package/components/nav/Group.vue +18 -4
- package/components/nav/Header.vue +39 -13
- package/components/nav/Jump.vue +7 -0
- package/components/nav/NamespaceFilter.vue +21 -11
- package/components/nav/Pinned.vue +1 -1
- package/components/nav/TopLevelMenu.vue +5 -17
- package/components/nav/Type.vue +30 -33
- package/components/nav/__tests__/TopLevelMenu.test.ts +0 -40
- package/components/rancherResourceDetail/Masthead.vue +769 -0
- package/components/rancherResourceDetail/__tests__/Masthead.test.ts +65 -0
- package/components/rancherResourceDetail/index.vue +591 -0
- package/components/rancherResourceList/Masthead-btn.vue +225 -0
- package/components/rancherResourceList/Masthead.vue +375 -0
- package/components/rancherResourceList/ResourceLoadingIndicator.vue +140 -0
- package/components/rancherResourceList/index.vue +307 -0
- package/components/rancherResourceList/resource-list.config.js +7 -0
- package/components/rancherResourceTable.vue +783 -0
- package/components/rancherSortableTable/THead.vue +561 -0
- package/components/rancherSortableTable/actions.js +153 -0
- package/components/rancherSortableTable/advanced-filtering.js +272 -0
- package/components/rancherSortableTable/debug.js +117 -0
- package/components/rancherSortableTable/filtering.js +290 -0
- package/components/rancherSortableTable/grouping.js +48 -0
- package/components/rancherSortableTable/index.vue +2712 -0
- package/components/rancherSortableTable/paging.js +155 -0
- package/components/rancherSortableTable/selection.js +629 -0
- package/components/rancherSortableTable/sortable-config.ts +4 -0
- package/components/rancherSortableTable/sorting.js +129 -0
- package/components/templates/blank.vue +4 -1
- package/components/templates/default.vue +8 -0
- package/components/templates/home.vue +10 -1
- package/components/templates/plain.vue +10 -1
- package/composables/focusTrap.ts +11 -3
- package/composables/useRuntimeFlag.ts +29 -0
- package/config/private-label.js +15 -10
- package/config/router/routes.js +21 -13
- package/config/store.js +4 -0
- package/config/table-headers.js +3 -2
- package/config/uiplugins.js +5 -1
- package/core/plugin-routes.ts +5 -115
- package/core/plugins.js +1 -1
- package/core/types.ts +23 -2
- package/detail/__tests__/autoscaling.horizontalpodautoscaler.test.ts +84 -23
- package/detail/autoscaling.horizontalpodautoscaler/index.vue +13 -3
- package/detail/provisioning.cattle.io.cluster.vue +72 -6
- package/dialog/AddCustomBadgeDialog.vue +1 -0
- package/dialog/DeactivateDriverDialog.vue +5 -4
- package/dialog/ForceMachineRemoveDialog.vue +6 -3
- package/dialog/GitRepoForceUpdateDialog.vue +1 -1
- package/dialog/ScalePoolDownDialog.vue +2 -2
- package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +16 -3
- package/edit/auth/__tests__/oidc.test.ts +162 -88
- package/edit/auth/azuread.vue +2 -1
- package/edit/auth/github.vue +1 -1
- package/edit/auth/googleoauth.vue +5 -1
- package/edit/auth/ldap/__tests__/config.test.ts +0 -14
- package/edit/auth/ldap/config.vue +0 -24
- package/edit/auth/ldap/index.vue +1 -1
- package/edit/auth/oidc.vue +39 -6
- package/edit/auth/saml.vue +1 -1
- package/edit/autoscaling.horizontalpodautoscaler/metric-identifier.vue +5 -2
- package/edit/cloudcredential.vue +24 -9
- package/edit/fleet.cattle.io.clustergroup.vue +5 -3
- package/edit/fleet.cattle.io.gitrepo.vue +2 -0
- package/edit/logging-flow/Match.vue +1 -1
- package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +40 -9
- package/edit/management.cattle.io.user.vue +28 -3
- package/edit/monitoring.coreos.com.alertmanagerconfig/auth.vue +19 -19
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +31 -31
- package/edit/monitoring.coreos.com.alertmanagerconfig/routeConfig.vue +36 -12
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/email.vue +6 -6
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +10 -10
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +4 -4
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +4 -4
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/webhook.vue +1 -1
- package/edit/monitoring.coreos.com.receiver/auth.vue +29 -29
- package/edit/monitoring.coreos.com.receiver/types/email.vue +6 -6
- package/edit/monitoring.coreos.com.receiver/types/opsgenie.vue +10 -10
- package/edit/monitoring.coreos.com.receiver/types/pagerduty.vue +5 -5
- package/edit/monitoring.coreos.com.receiver/types/slack.vue +4 -4
- package/edit/namespace.vue +1 -2
- package/edit/networking.k8s.io.ingress/IngressClass.vue +7 -3
- package/edit/networking.k8s.io.ingress/RulePath.vue +1 -1
- package/edit/networking.k8s.io.ingress/__tests__/IngressClass.test.ts +58 -0
- package/edit/persistentvolume/__tests__/persistentvolume.test.ts +14 -2
- package/edit/provisioning.cattle.io.cluster/CustomCommand.vue +4 -1
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +26 -9
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +8 -10
- package/edit/provisioning.cattle.io.cluster/rke2.vue +31 -40
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +5 -2
- package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +6 -1
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +33 -2
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +3 -3
- package/edit/service.vue +0 -3
- package/edit/token.vue +32 -11
- package/edit/workload/Job.vue +6 -6
- package/edit/workload/__tests__/Job.test.ts +0 -1
- package/edit/workload/index.vue +1 -0
- package/edit/workload/mixins/workload.js +3 -3
- package/initialize/install-plugins.js +2 -1
- package/list/harvesterhci.io.management.cluster.vue +4 -1
- package/list/management.cattle.io.feature.vue +1 -0
- package/list/namespace.vue +3 -1
- package/list/provisioning.cattle.io.cluster.vue +20 -12
- package/list/workload.vue +7 -6
- package/machine-config/__tests__/vmwarevsphere.test.ts +48 -3
- package/machine-config/azure.vue +16 -4
- package/machine-config/vmwarevsphere.vue +16 -0
- package/mixins/resource-fetch.js +2 -1
- package/models/__tests__/logging.banzaicloud.io.flow.test.ts +88 -0
- package/models/__tests__/namespace.test.ts +25 -1
- package/models/cloudcredential.js +5 -0
- package/models/kontainerdriver.js +6 -3
- package/models/logging.banzaicloud.io.flow.js +2 -1
- package/models/management.cattle.io.node.js +3 -3
- package/models/management.cattle.io.setting.js +2 -1
- package/models/namespace.js +4 -5
- package/models/nodedriver.js +6 -3
- package/models/storage.k8s.io.storageclass.js +2 -2
- package/models/workload.js +4 -1
- package/package.json +1 -1
- package/pages/about.vue +16 -8
- package/pages/account/index.vue +80 -24
- package/pages/account/pri.vue +229 -0
- package/pages/auth/login.vue +195 -44
- package/pages/auth/logout.vue +4 -1
- package/pages/auth/setup.vue +144 -19
- package/pages/auth/verify.vue +13 -8
- package/pages/auth copy/login.vue +595 -0
- package/pages/auth copy/logout.vue +47 -0
- package/pages/auth copy/setup.vue +523 -0
- package/pages/auth copy/verify.vue +203 -0
- package/pages/c/_cluster/_product/namespaces.vue +5 -5
- package/pages/c/_cluster/apps/charts/chart.vue +1 -1
- package/pages/c/_cluster/apps/charts/install.vue +26 -26
- package/pages/c/_cluster/auth/config/index.vue +10 -12
- package/pages/c/_cluster/explorer/EventsTable.vue +38 -33
- package/pages/c/_cluster/explorer/index.vue +17 -15
- package/pages/c/_cluster/istio/index.vue +2 -2
- package/pages/c/_cluster/longhorn/index.vue +1 -1
- package/pages/c/_cluster/monitoring/index.vue +1 -1
- package/pages/c/_cluster/monitoring/monitor/_namespace/_id.vue +4 -2
- package/pages/c/_cluster/monitoring/monitor/create.vue +4 -2
- package/pages/c/_cluster/monitoring/monitor/index.vue +2 -2
- package/pages/c/_cluster/monitoring/route-receiver/_id.vue +4 -2
- package/pages/c/_cluster/monitoring/route-receiver/create.vue +5 -2
- package/pages/c/_cluster/neuvector/index.vue +1 -1
- package/pages/c/_cluster/settings/brand.vue +3 -3
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +8 -10
- package/pages/diagnostic.vue +59 -11
- package/pages/fail-whale.vue +14 -8
- package/pages/home.vue +24 -18
- package/pages/prefs.vue +9 -7
- package/pages/support/index.vue +4 -1
- package/pkg/tsconfig.json +9 -9
- package/pkg/vue.config.js +1 -1
- package/plugins/dashboard-store/normalize.js +3 -1
- package/plugins/dashboard-store/resource-class.js +31 -29
- package/plugins/internal-api/index.ts +37 -0
- package/plugins/internal-api/shared/base-api.ts +13 -0
- package/plugins/internal-api/shell/shell.api.ts +108 -0
- package/promptRemove/management.cattle.io.fleetworkspace.vue +1 -1
- package/promptRemove/management.cattle.io.globalrole.vue +1 -1
- package/promptRemove/management.cattle.io.project.vue +2 -2
- package/promptRemove/management.cattle.io.roletemplate.vue +1 -1
- package/promptRemove/pod.vue +1 -1
- package/public/index.html +2 -1
- package/rancher-components/BadgeState/BadgeState.vue +5 -1
- package/rancher-components/Banner/Banner.vue +8 -2
- package/rancher-components/Card/Card.vue +3 -6
- package/rancher-components/Form/Checkbox/Checkbox.vue +4 -0
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +5 -2
- package/rancher-components/Form/Radio/RadioButton.vue +3 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +1 -5
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/RcDropdown/RcDropdownItem.vue +1 -2
- package/rancher-components/RcDropdown/RcDropdownMenu.vue +7 -3
- package/rancher-components/RcDropdown/types.ts +1 -0
- package/scripts/clean +0 -0
- package/scripts/extension/bundle +20 -0
- package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +2 -2
- package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -1
- package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
- package/scripts/extension/helm/scripts/package +0 -0
- package/scripts/extension/helm/scripts/patch +0 -0
- package/scripts/extension/helm/scripts/version +0 -0
- package/scripts/extension/helmpatch +44 -31
- package/scripts/extension/parse-tag-name +0 -0
- package/scripts/extension/publish +12 -12
- package/scripts/publish-shell.sh +18 -23
- package/scripts/serve-pkgs +0 -0
- package/scripts/sync-shell-deps +0 -0
- package/scripts/test-plugins-build.sh +4 -6
- package/scripts/typegen.sh +28 -46
- package/server/har-file.js +25 -3
- package/static/favicon.ico +0 -0
- package/static/favicon.png +0 -0
- package/static/loading-indicator.html +2 -2
- package/store/aws.js +9 -2
- package/store/features.js +2 -1
- package/store/i18n.js +3 -3
- package/store/modal.ts +71 -0
- package/store/slideInPanel.ts +47 -0
- package/store/type-map.js +2 -1
- package/types/cloud-shell/index.d.ts +11014 -0
- package/types/global-vue.d.ts +5 -0
- package/types/internal-api/shell/growl.d.ts +25 -0
- package/types/internal-api/shell/modal.d.ts +77 -0
- package/types/internal-api/shell/slideIn.d.ts +15 -0
- package/types/shell/index.d.ts +118 -128
- package/types/vue-shim.d.ts +4 -1
- package/utils/__tests__/object.test.ts +38 -4
- package/utils/__tests__/string.test.ts +2 -2
- package/utils/auth.js +1 -0
- package/utils/banners.js +0 -45
- package/utils/cluster.js +35 -0
- package/utils/color.js +9 -8
- package/utils/error.js +61 -3
- package/utils/errorTranslate.json +450 -30
- package/utils/object.js +46 -6
- package/utils/router.js +22 -1
- package/utils/select.js +26 -3
- package/utils/string.js +9 -8
- package/utils/title.ts +1 -1
- package/utils/validators/machine-pool.ts +20 -0
- package/vue.config.js +7 -2
- package/components/formatter/ExtensionCache.vue +0 -74
- package/components/formatter/Port.vue +0 -24
- package/components/formatter/SecretType.vue +0 -41
- package/types/resources/fleet.d.ts +0 -57
- package/types/resources/pod-security-admission.ts +0 -36
- package/types/resources/settings.d.ts +0 -93
- package/types/resources/userPreferences.d.ts +0 -13
- package/types/vue-shim.d +0 -20
|
@@ -544,7 +544,10 @@ export default {
|
|
|
544
544
|
class="flex-right"
|
|
545
545
|
>{{ t('generic.moreInfo') }} <i class="icon icon-external-link" /></a>
|
|
546
546
|
</div>
|
|
547
|
-
<hr
|
|
547
|
+
<hr
|
|
548
|
+
v-if="subtype.description"
|
|
549
|
+
role="none"
|
|
550
|
+
>
|
|
548
551
|
<div
|
|
549
552
|
v-if="subtype.description"
|
|
550
553
|
class="description"
|
|
@@ -621,14 +624,14 @@ export default {
|
|
|
621
624
|
</template>
|
|
622
625
|
</template>
|
|
623
626
|
<div class="controls-steps">
|
|
624
|
-
<button
|
|
627
|
+
<!-- <button
|
|
625
628
|
v-if="showYaml"
|
|
626
629
|
type="button"
|
|
627
630
|
class="btn role-secondary"
|
|
628
631
|
@click="showPreviewYaml"
|
|
629
632
|
>
|
|
630
633
|
<t k="cruResource.previewYaml" />
|
|
631
|
-
</button>
|
|
634
|
+
</button> -->
|
|
632
635
|
<template
|
|
633
636
|
v-if="showPrevious"
|
|
634
637
|
name="back"
|
|
@@ -708,7 +711,7 @@ export default {
|
|
|
708
711
|
#default
|
|
709
712
|
>
|
|
710
713
|
<div>
|
|
711
|
-
<button
|
|
714
|
+
<!-- <button
|
|
712
715
|
v-if="showYaml"
|
|
713
716
|
:data-testid="componentTestid + '-yaml'"
|
|
714
717
|
type="button"
|
|
@@ -716,7 +719,7 @@ export default {
|
|
|
716
719
|
@click="showPreviewYaml"
|
|
717
720
|
>
|
|
718
721
|
<t k="cruResource.previewYaml" />
|
|
719
|
-
</button>
|
|
722
|
+
</button> -->
|
|
720
723
|
<AsyncButton
|
|
721
724
|
v-if="!showSubtypeSelection"
|
|
722
725
|
ref="save"
|
|
@@ -732,7 +735,7 @@ export default {
|
|
|
732
735
|
</template>
|
|
733
736
|
<!------ YAML ------>
|
|
734
737
|
<!-- Hide this section until it's needed. This means we don't need to upfront create initialYaml -->
|
|
735
|
-
<section
|
|
738
|
+
<!-- <section
|
|
736
739
|
v-else-if="showYaml && !showAsForm"
|
|
737
740
|
class="cru-resource-yaml-container resource-container cru__content"
|
|
738
741
|
>
|
|
@@ -806,7 +809,7 @@ export default {
|
|
|
806
809
|
</slot>
|
|
807
810
|
</template>
|
|
808
811
|
</ResourceYaml>
|
|
809
|
-
</section>
|
|
812
|
+
</section> -->
|
|
810
813
|
</component>
|
|
811
814
|
</section>
|
|
812
815
|
</template>
|
|
@@ -892,6 +895,7 @@ form.create-resource-container .cru {
|
|
|
892
895
|
display: flex;
|
|
893
896
|
flex-direction: column;
|
|
894
897
|
flex-grow: 1;
|
|
898
|
+
height: 100%;
|
|
895
899
|
}
|
|
896
900
|
|
|
897
901
|
&__content {
|
|
@@ -906,6 +910,8 @@ form.create-resource-container .cru {
|
|
|
906
910
|
position: sticky;
|
|
907
911
|
bottom: 0;
|
|
908
912
|
background-color: var(--header-bg);
|
|
913
|
+
height: $footer-height;
|
|
914
|
+
box-sizing: border-box;
|
|
909
915
|
|
|
910
916
|
// Overrides outlet padding
|
|
911
917
|
margin-left: -$space-m;
|
|
@@ -115,12 +115,12 @@ export default {
|
|
|
115
115
|
<style lang="scss">
|
|
116
116
|
.cru-resource-footer {
|
|
117
117
|
display: flex;
|
|
118
|
-
justify-content: flex-
|
|
118
|
+
justify-content: flex-start;
|
|
119
119
|
margin-top: 20px;
|
|
120
120
|
z-index: z-index('cruFooter');
|
|
121
121
|
|
|
122
122
|
.btn {
|
|
123
|
-
margin-
|
|
123
|
+
margin-right: 10px;
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
|
|
@@ -102,26 +102,35 @@ export default {
|
|
|
102
102
|
|
|
103
103
|
<template>
|
|
104
104
|
<div class="graph-options">
|
|
105
|
-
<div v-if="hasSummaryAndDetail">
|
|
106
|
-
<ButtonGroup
|
|
107
|
-
v-model:value="value.type"
|
|
108
|
-
:options="detailSummaryOptions"
|
|
105
|
+
<div v-if="hasSummaryAndDetail" class="mr-10">
|
|
106
|
+
<ButtonGroup
|
|
107
|
+
v-model:value="value.type"
|
|
108
|
+
:options="detailSummaryOptions"
|
|
109
109
|
/>
|
|
110
110
|
</div>
|
|
111
111
|
<div v-else>
|
|
112
112
|
<div />
|
|
113
113
|
</div>
|
|
114
114
|
<div class="range-refresh">
|
|
115
|
-
<
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
115
|
+
<div class="mr-10">
|
|
116
|
+
<LabeledSelect
|
|
117
|
+
v-model:value="value.range"
|
|
118
|
+
:options="rangeOptions"
|
|
119
|
+
class="gafanana-select"
|
|
120
|
+
:selectWidth="'60px'"
|
|
121
|
+
:label="t('graphOptions.range')"
|
|
122
|
+
/>
|
|
123
|
+
</div>
|
|
124
|
+
<div class="mr-10">
|
|
125
|
+
<LabeledSelect
|
|
126
|
+
v-model:value="value.refreshRate"
|
|
127
|
+
:options="refreshOptions"
|
|
128
|
+
class="gafanana-select"
|
|
129
|
+
:selectWidth="'60px'"
|
|
130
|
+
:label="t('graphOptions.refresh')"
|
|
124
131
|
/>
|
|
132
|
+
</div>
|
|
133
|
+
|
|
125
134
|
</div>
|
|
126
135
|
</div>
|
|
127
136
|
</template>
|
|
@@ -131,17 +140,20 @@ export default {
|
|
|
131
140
|
&, .range-refresh {
|
|
132
141
|
display: flex;
|
|
133
142
|
flex-direction: row;
|
|
134
|
-
justify-content: flex-end;
|
|
143
|
+
/* justify-content: flex-end; */
|
|
135
144
|
}
|
|
136
145
|
|
|
137
146
|
& {
|
|
138
|
-
justify-content: space-between;
|
|
147
|
+
/* justify-content: space-between; */
|
|
139
148
|
align-items: center;
|
|
140
149
|
}
|
|
141
150
|
|
|
142
|
-
.labeled-select {
|
|
151
|
+
/* .labeled-select {
|
|
143
152
|
width: 100px;
|
|
144
153
|
margin-left: 10px;
|
|
145
|
-
}
|
|
154
|
+
} */
|
|
155
|
+
}
|
|
156
|
+
.gafanana-select{
|
|
157
|
+
width: 300px;
|
|
146
158
|
}
|
|
147
159
|
</style>
|
|
@@ -58,6 +58,10 @@ export default {
|
|
|
58
58
|
},
|
|
59
59
|
|
|
60
60
|
computed: {
|
|
61
|
+
itemLabel() {
|
|
62
|
+
return this.labelKey ? this.t(this.labelKey) : this.label ? this.label : this.t('labels.annotations.singular');
|
|
63
|
+
},
|
|
64
|
+
|
|
61
65
|
isBinary() {
|
|
62
66
|
if ( this.binary === null ) {
|
|
63
67
|
return typeof this.value === 'string' && !asciiLike(this.value);
|
|
@@ -186,6 +190,7 @@ export default {
|
|
|
186
190
|
:text="value"
|
|
187
191
|
class="role-tertiary"
|
|
188
192
|
action-color=""
|
|
193
|
+
:aria-label="t('detailText.copyAriaLabel', {item: itemLabel })"
|
|
189
194
|
/>
|
|
190
195
|
</div>
|
|
191
196
|
</template>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import Vue, { PropType, defineComponent } from 'vue';
|
|
3
|
+
import { mapGetters } from 'vuex';
|
|
4
|
+
|
|
5
|
+
interface Dot {
|
|
6
|
+
stateBackground: string;
|
|
7
|
+
stateDisplay: string;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export default defineComponent({
|
|
11
|
+
|
|
12
|
+
name: 'DotState',
|
|
13
|
+
|
|
14
|
+
props: {
|
|
15
|
+
value: {
|
|
16
|
+
type: Object as PropType<Dot>,
|
|
17
|
+
default: null
|
|
18
|
+
},
|
|
19
|
+
color: {
|
|
20
|
+
type: String,
|
|
21
|
+
default: null
|
|
22
|
+
},
|
|
23
|
+
label: {
|
|
24
|
+
type: String,
|
|
25
|
+
default: null
|
|
26
|
+
}
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
computed: {
|
|
30
|
+
...mapGetters({ t: 'i18n/t' }),
|
|
31
|
+
bg(): string | null {
|
|
32
|
+
return this.value?.stateBackground || this.color;
|
|
33
|
+
},
|
|
34
|
+
|
|
35
|
+
msg(): string | null {
|
|
36
|
+
let text = this.value?.stateDisplay || this.label;
|
|
37
|
+
let zhText = this.t(`stateLabel.${ text }`)
|
|
38
|
+
return zhText ? zhText : text
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
</script>
|
|
44
|
+
|
|
45
|
+
<template>
|
|
46
|
+
<div style="display: flex;flex-direction: row;align-items: center;">
|
|
47
|
+
<div :class="{ [bg]: true }"></div>
|
|
48
|
+
<span style="margin-left: 5px;">{{ msg }}</span>
|
|
49
|
+
|
|
50
|
+
</div>
|
|
51
|
+
|
|
52
|
+
</template>
|
|
53
|
+
<style lang="scss" scoped>
|
|
54
|
+
.bg-error {
|
|
55
|
+
width: 10px; /* 圆点的宽度 */
|
|
56
|
+
height: 10px; /* 圆点的高度 */
|
|
57
|
+
background-color: #DD0C17; /* 圆点的颜色 */
|
|
58
|
+
border-radius: 50%; /* 设置为圆形 */
|
|
59
|
+
}
|
|
60
|
+
.bg-darker {
|
|
61
|
+
width: 10px; /* 圆点的宽度 */
|
|
62
|
+
height: 10px; /* 圆点的高度 */
|
|
63
|
+
background-color: #DD0C17; /* 圆点的颜色 */
|
|
64
|
+
border-radius: 50%; /* 设置为圆形 */
|
|
65
|
+
}
|
|
66
|
+
.bg-success {
|
|
67
|
+
width: 10px; /* 圆点的宽度 */
|
|
68
|
+
height: 10px; /* 圆点的高度 */
|
|
69
|
+
background-color: #95F204 !important; /* 圆点的颜色 */
|
|
70
|
+
border-radius: 50%; /* 设置为圆形 */
|
|
71
|
+
}
|
|
72
|
+
.bg-warning {
|
|
73
|
+
width: 10px; /* 圆点的宽度 */
|
|
74
|
+
height: 10px; /* 圆点的高度 */
|
|
75
|
+
background-color: #DAC342; /* 圆点的颜色 */
|
|
76
|
+
border-radius: 50%; /* 设置为圆形 */
|
|
77
|
+
}
|
|
78
|
+
.bg-info {
|
|
79
|
+
width: 10px; /* 圆点的宽度 */
|
|
80
|
+
height: 10px; /* 圆点的高度 */
|
|
81
|
+
background-color: #1890FF; /* 圆点的颜色 */
|
|
82
|
+
border-radius: 50%; /* 设置为圆形 */
|
|
83
|
+
}
|
|
84
|
+
</style>
|
|
@@ -63,7 +63,7 @@ export default {
|
|
|
63
63
|
}
|
|
64
64
|
|
|
65
65
|
if (projectRoleTemplateBindingSchema) {
|
|
66
|
-
this.$store.dispatch('rancher/findAll', { type: NORMAN.PROJECT_ROLE_TEMPLATE_BINDING }, { root: true })
|
|
66
|
+
this.$store.dispatch('rancher/findAll', { type: NORMAN.PROJECT_ROLE_TEMPLATE_BINDING, opt: { force: true } }, { root: true })
|
|
67
67
|
.then((bindings) => {
|
|
68
68
|
this['projectRoleTemplateBindings'] = bindings;
|
|
69
69
|
this.loadingProjectBindings = false;
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import { mapGetters } from 'vuex';
|
|
3
|
-
import ResourceTable, { defaultTableSortGenerationFn } from '@shell/components/
|
|
2
|
+
import { mapGetters, useStore } from 'vuex';
|
|
3
|
+
import ResourceTable, { defaultTableSortGenerationFn } from '@shell/components/rancherResourceTable';
|
|
4
4
|
import { STATE, AGE, NAME, NS_SNAPSHOT_QUOTA } from '@shell/config/table-headers';
|
|
5
5
|
import { uniq } from '@shell/utils/array';
|
|
6
6
|
import { MANAGEMENT, NAMESPACE, VIRTUAL_TYPES, HCI } from '@shell/config/types';
|
|
7
7
|
import { PROJECT_ID, FLAT_VIEW } from '@shell/config/query-params';
|
|
8
8
|
import { PanelLocation, ExtensionPoint } from '@shell/core/types';
|
|
9
9
|
import ExtensionPanel from '@shell/components/ExtensionPanel';
|
|
10
|
-
import Masthead from '@shell/components/
|
|
10
|
+
import Masthead from '@shell/components/rancherResourceList/Masthead';
|
|
11
11
|
import { mapPref, GROUP_RESOURCES, ALL_NAMESPACES, DEV } from '@shell/store/prefs';
|
|
12
12
|
import MoveModal from '@shell/components/MoveModal';
|
|
13
13
|
import ButtonMultiAction from '@shell/components/ButtonMultiAction.vue';
|
|
14
|
-
|
|
14
|
+
import { escapeHtml } from '@shell/utils/string';
|
|
15
15
|
import { NAMESPACE_FILTER_ALL_ORPHANS } from '@shell/utils/namespace-filter';
|
|
16
16
|
import ResourceFetch from '@shell/mixins/resource-fetch';
|
|
17
17
|
import DOMPurify from 'dompurify';
|
|
18
18
|
import { HARVESTER_NAME as HARVESTER } from '@shell/config/features';
|
|
19
|
+
import ActionMenu from '@shell/components/ActionMenuShell.vue';
|
|
20
|
+
import { useRuntimeFlag } from '@shell/composables/useRuntimeFlag';
|
|
19
21
|
|
|
20
22
|
export default {
|
|
21
23
|
name: 'ListProjectNamespace',
|
|
@@ -25,6 +27,7 @@ export default {
|
|
|
25
27
|
MoveModal,
|
|
26
28
|
ResourceTable,
|
|
27
29
|
ButtonMultiAction,
|
|
30
|
+
ActionMenu,
|
|
28
31
|
},
|
|
29
32
|
mixins: [ResourceFetch],
|
|
30
33
|
|
|
@@ -58,6 +61,13 @@ export default {
|
|
|
58
61
|
this.projects = await this.$store.dispatch('management/findAll', { type: MANAGEMENT.PROJECT, opt: { force: true } });
|
|
59
62
|
},
|
|
60
63
|
|
|
64
|
+
setup() {
|
|
65
|
+
const store = useStore();
|
|
66
|
+
const { featureDropdownMenu } = useRuntimeFlag(store);
|
|
67
|
+
|
|
68
|
+
return { featureDropdownMenu };
|
|
69
|
+
},
|
|
70
|
+
|
|
61
71
|
data() {
|
|
62
72
|
return {
|
|
63
73
|
loadResources: [NAMESPACE],
|
|
@@ -155,7 +165,7 @@ export default {
|
|
|
155
165
|
rowsWithFakeNamespaces() {
|
|
156
166
|
const fakeRows = this.projectsWithoutNamespaces.map((project) => {
|
|
157
167
|
return {
|
|
158
|
-
|
|
168
|
+
groupById: `${ ('resourceTable.groupLabel.notInAProject') }-${ project.id }`,
|
|
159
169
|
isFake: true,
|
|
160
170
|
mainRowKey: project.id,
|
|
161
171
|
nameDisplay: project.spec?.displayName, // Enable filtering by the project name
|
|
@@ -166,8 +176,8 @@ export default {
|
|
|
166
176
|
|
|
167
177
|
if (this.showMockNotInProjectGroup) {
|
|
168
178
|
fakeRows.push( {
|
|
169
|
-
|
|
170
|
-
mainRowKey:
|
|
179
|
+
groupById: this.t('resourceTable.groupLabel.notInAProject'),
|
|
180
|
+
mainRowKey: 'fake-empty',
|
|
171
181
|
});
|
|
172
182
|
}
|
|
173
183
|
|
|
@@ -273,6 +283,9 @@ export default {
|
|
|
273
283
|
},
|
|
274
284
|
showCreateNsButton() {
|
|
275
285
|
return this.groupPreference !== 'namespace';
|
|
286
|
+
},
|
|
287
|
+
projectGroupBy() {
|
|
288
|
+
return this.groupPreference === 'none' ? null : 'groupById';
|
|
276
289
|
}
|
|
277
290
|
},
|
|
278
291
|
methods: {
|
|
@@ -336,6 +349,10 @@ export default {
|
|
|
336
349
|
return location;
|
|
337
350
|
},
|
|
338
351
|
|
|
352
|
+
getProjectActions(group) {
|
|
353
|
+
return group.rows[0].project;
|
|
354
|
+
},
|
|
355
|
+
|
|
339
356
|
showProjectAction(event, group) {
|
|
340
357
|
const project = group.rows[0].project;
|
|
341
358
|
|
|
@@ -359,7 +376,13 @@ export default {
|
|
|
359
376
|
);
|
|
360
377
|
}
|
|
361
378
|
|
|
362
|
-
|
|
379
|
+
if ( row.groupById === this.notInProjectKey) {
|
|
380
|
+
return this.t('resourceTable.groupLabel.notInAProject');
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
const project = row.project?.nameDisplay || row.project?.id || '';
|
|
384
|
+
|
|
385
|
+
return this.t('resourceTable.groupLabel.project', { name: escapeHtml(project) }, true);
|
|
363
386
|
},
|
|
364
387
|
|
|
365
388
|
projectDescription(group) {
|
|
@@ -393,6 +416,7 @@ export default {
|
|
|
393
416
|
</script>
|
|
394
417
|
|
|
395
418
|
<template>
|
|
419
|
+
测试111111111111111111111111
|
|
396
420
|
<div class="project-namespaces outlet">
|
|
397
421
|
<Masthead
|
|
398
422
|
:schema="projectSchema"
|
|
@@ -404,6 +428,8 @@ export default {
|
|
|
404
428
|
:show-incremental-loading-indicator="showIncrementalLoadingIndicator"
|
|
405
429
|
:load-resources="loadResources"
|
|
406
430
|
:load-indeterminate="loadIndeterminate"
|
|
431
|
+
|
|
432
|
+
:main-button-visible="false"
|
|
407
433
|
>
|
|
408
434
|
<template
|
|
409
435
|
v-if="showCreateNsButton"
|
|
@@ -431,12 +457,32 @@ export default {
|
|
|
431
457
|
:schema="schema"
|
|
432
458
|
:headers="headers"
|
|
433
459
|
:rows="filteredRows"
|
|
460
|
+
:group-by="projectGroupBy"
|
|
434
461
|
:groupable="true"
|
|
435
462
|
:sort-generation-fn="sortGenerationFn"
|
|
436
463
|
:loading="loading"
|
|
437
464
|
group-tooltip="resourceTable.groupBy.project"
|
|
438
465
|
key-field="_key"
|
|
466
|
+
|
|
467
|
+
:create-location="createProjectLocation"
|
|
468
|
+
:schemaBtn="projectSchema"
|
|
469
|
+
:create-button-label="t('projectNamespaces.createProject')"
|
|
470
|
+
:type-display="t('projectNamespaces.label')"
|
|
471
|
+
:resource="MANAGEMENT.PROJECT"
|
|
472
|
+
:main-button-visible="true"
|
|
439
473
|
>
|
|
474
|
+
<template
|
|
475
|
+
v-if="showCreateNsButton"
|
|
476
|
+
#extraActions
|
|
477
|
+
>
|
|
478
|
+
<router-link
|
|
479
|
+
:to="createNamespaceLocationFlatList()"
|
|
480
|
+
class="btn role-primary mr-10"
|
|
481
|
+
data-testid="create_project_namespaces"
|
|
482
|
+
>
|
|
483
|
+
{{ t('projectNamespaces.createNamespace') }}
|
|
484
|
+
</router-link>
|
|
485
|
+
</template>
|
|
440
486
|
<template #group-by="group">
|
|
441
487
|
<div
|
|
442
488
|
class="project-bar"
|
|
@@ -460,18 +506,29 @@ export default {
|
|
|
460
506
|
<div class="right">
|
|
461
507
|
<router-link
|
|
462
508
|
v-if="isNamespaceCreatable && (canSeeProjectlessNamespaces || group.group.key !== notInProjectKey)"
|
|
463
|
-
class="create-namespace
|
|
509
|
+
class="create-namespace"
|
|
510
|
+
style="margin-bottom: 3px;"
|
|
464
511
|
:to="createNamespaceLocation(group.group)"
|
|
465
512
|
>
|
|
466
513
|
{{ t('projectNamespaces.createNamespace') }}
|
|
467
514
|
</router-link>
|
|
468
|
-
<
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
515
|
+
<span style="color: var(--link);margin-bottom: 3px;">|</span>
|
|
516
|
+
<template v-if="featureDropdownMenu">
|
|
517
|
+
<ActionMenu
|
|
518
|
+
:showIcon="true"
|
|
519
|
+
:resource="getProjectActions(group.group)"
|
|
520
|
+
:button-aria-label="t('projectNamespaces.tableActionsLabel', { resource: projectResource(group.group) })"
|
|
521
|
+
/>
|
|
522
|
+
</template>
|
|
523
|
+
<template v-else>
|
|
524
|
+
<ButtonMultiAction
|
|
525
|
+
class="project-action"
|
|
526
|
+
:borderless="true"
|
|
527
|
+
:aria-label="t('projectNamespaces.tableActionsLabel', { resource: projectResource(group.group) })"
|
|
528
|
+
:invisible="!showProjectActionButton(group.group)"
|
|
529
|
+
@click="showProjectAction($event, group.group)"
|
|
530
|
+
/>
|
|
531
|
+
</template>
|
|
475
532
|
</div>
|
|
476
533
|
</div>
|
|
477
534
|
</template>
|
|
@@ -536,6 +593,11 @@ export default {
|
|
|
536
593
|
</div>
|
|
537
594
|
</template>
|
|
538
595
|
<style lang="scss" scoped>
|
|
596
|
+
.invisible {
|
|
597
|
+
width: 42px;
|
|
598
|
+
display: inline-block;
|
|
599
|
+
}
|
|
600
|
+
|
|
539
601
|
.project-namespaces {
|
|
540
602
|
& :deep() {
|
|
541
603
|
.project-namespaces-table table {
|
|
@@ -550,6 +612,17 @@ export default {
|
|
|
550
612
|
display: flex;
|
|
551
613
|
flex-direction: row;
|
|
552
614
|
justify-content: space-between;
|
|
615
|
+
background-color: var(--sortable-table-bg) !important;
|
|
616
|
+
|
|
617
|
+
.right {
|
|
618
|
+
display: flex;
|
|
619
|
+
align-items: center;
|
|
620
|
+
}
|
|
621
|
+
|
|
622
|
+
.create-namespace {
|
|
623
|
+
color: var(--link);
|
|
624
|
+
padding: 0 18px;
|
|
625
|
+
}
|
|
553
626
|
|
|
554
627
|
.group-tab {
|
|
555
628
|
max-width: calc(100% - 230px);
|
|
@@ -37,7 +37,7 @@ export default {
|
|
|
37
37
|
handleLineBreaksConsentText(banner) {
|
|
38
38
|
if (banner.text?.length) {
|
|
39
39
|
// split text by newline char
|
|
40
|
-
const textArray = banner.text.split(
|
|
40
|
+
const textArray = banner.text.split('\n').filter((element) => element);
|
|
41
41
|
|
|
42
42
|
if (textArray.length > 1) {
|
|
43
43
|
textArray.forEach((str, i) => {
|
|
@@ -130,11 +130,11 @@ export default {
|
|
|
130
130
|
|
|
131
131
|
if (isEmpty(banner)) {
|
|
132
132
|
if (showHeader && this.header) {
|
|
133
|
-
bannerContent = bannerHeader || {};
|
|
133
|
+
bannerContent = this.handleLineBreaksConsentText(bannerHeader) || {};
|
|
134
134
|
} else if (showConsent && this.consent) {
|
|
135
135
|
bannerContent = this.handleLineBreaksConsentText(bannerConsent) || {};
|
|
136
136
|
} else if (showFooter && this.footer) {
|
|
137
|
-
bannerContent = bannerFooter || {};
|
|
137
|
+
bannerContent = this.handleLineBreaksConsentText(bannerFooter) || {};
|
|
138
138
|
} else {
|
|
139
139
|
bannerContent = {};
|
|
140
140
|
}
|
|
@@ -168,16 +168,20 @@ export default {
|
|
|
168
168
|
>
|
|
169
169
|
<!-- text as array to support line breaks programmatically rather than just exposing HTML -->
|
|
170
170
|
<div v-if="isTextAnArray">
|
|
171
|
-
<
|
|
171
|
+
<div
|
|
172
172
|
v-for="(text, index) in banner.text"
|
|
173
173
|
:key="index"
|
|
174
|
+
class="array-row"
|
|
174
175
|
>
|
|
175
176
|
{{ text }}
|
|
176
|
-
</
|
|
177
|
+
</div>
|
|
177
178
|
</div>
|
|
178
|
-
<
|
|
179
|
+
<div
|
|
180
|
+
v-else
|
|
181
|
+
class="single-row"
|
|
182
|
+
>
|
|
179
183
|
{{ banner.text }}
|
|
180
|
-
</
|
|
184
|
+
</div>
|
|
181
185
|
</div>
|
|
182
186
|
<div v-else-if="showDialog">
|
|
183
187
|
<div class="banner-dialog-glass" />
|
|
@@ -192,16 +196,20 @@ export default {
|
|
|
192
196
|
>
|
|
193
197
|
<!-- text as array to support line breaks programmatically rather than just exposing HTML -->
|
|
194
198
|
<div v-if="isTextAnArray">
|
|
195
|
-
<
|
|
199
|
+
<div
|
|
196
200
|
v-for="(text, index) in banner.text"
|
|
197
201
|
:key="index"
|
|
202
|
+
class="array-row"
|
|
198
203
|
>
|
|
199
204
|
{{ text }}
|
|
200
|
-
</
|
|
205
|
+
</div>
|
|
201
206
|
</div>
|
|
202
|
-
<
|
|
207
|
+
<div
|
|
208
|
+
v-else
|
|
209
|
+
class="single-row"
|
|
210
|
+
>
|
|
203
211
|
{{ banner.text }}
|
|
204
|
-
</
|
|
212
|
+
</div>
|
|
205
213
|
</div>
|
|
206
214
|
<button
|
|
207
215
|
class="btn role-primary"
|
|
@@ -223,7 +231,6 @@ export default {
|
|
|
223
231
|
padding: 0 20px;
|
|
224
232
|
|
|
225
233
|
&.banner-consent {
|
|
226
|
-
position: absolute;
|
|
227
234
|
height: unset;
|
|
228
235
|
min-height: 2em;
|
|
229
236
|
overflow: hidden;
|
|
@@ -49,6 +49,10 @@ export default {
|
|
|
49
49
|
userId: {
|
|
50
50
|
type: String,
|
|
51
51
|
default: ''
|
|
52
|
+
},
|
|
53
|
+
watchOverride: {
|
|
54
|
+
type: Boolean,
|
|
55
|
+
default: true,
|
|
52
56
|
}
|
|
53
57
|
},
|
|
54
58
|
async fetch() {
|
|
@@ -138,7 +142,7 @@ export default {
|
|
|
138
142
|
this.update();
|
|
139
143
|
},
|
|
140
144
|
userId(userId, oldUserId) {
|
|
141
|
-
if (userId === oldUserId) {
|
|
145
|
+
if (userId === oldUserId || this.watchOverride === true) {
|
|
142
146
|
return;
|
|
143
147
|
}
|
|
144
148
|
this.update();
|
|
@@ -262,22 +262,22 @@ export default {
|
|
|
262
262
|
<div v-if="loading">
|
|
263
263
|
<Loading />
|
|
264
264
|
</div>
|
|
265
|
-
<div
|
|
265
|
+
<!-- <div
|
|
266
266
|
v-if="!loading && !error"
|
|
267
267
|
class="external-link"
|
|
268
|
-
>
|
|
268
|
+
> -->
|
|
269
269
|
<!-- https://github.com/harvester/harvester-installer/pull/512/files -->
|
|
270
270
|
<!-- It is necessary to include the parameter referer when accessing the Grafana page. -->
|
|
271
271
|
<!-- This parameter is required by the backend to identify the origin of the request from which cluster -->
|
|
272
272
|
<!-- The matching mechanism as follows: -->
|
|
273
273
|
<!-- ~.*/k8s/clusters/(c-m-.+)/.* -->
|
|
274
274
|
<!-- ~.*/dashboard/harvester/c/(c-m-.+)/.* -->
|
|
275
|
-
<a
|
|
275
|
+
<!-- <a
|
|
276
276
|
:href="grafanaUrl"
|
|
277
277
|
target="_blank"
|
|
278
278
|
rel="noopener nofollow"
|
|
279
279
|
>{{ t('grafanaDashboard.grafana') }} <i class="icon icon-external-link" /></a>
|
|
280
|
-
</div>
|
|
280
|
+
</div> -->
|
|
281
281
|
</div>
|
|
282
282
|
</template>
|
|
283
283
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
import { mapState } from 'vuex';
|
|
3
|
+
import { translateError } from '@shell/utils/error'
|
|
3
4
|
|
|
4
5
|
export default {
|
|
5
6
|
data() {
|
|
@@ -25,6 +26,7 @@ export default {
|
|
|
25
26
|
},
|
|
26
27
|
|
|
27
28
|
methods: {
|
|
29
|
+
translateError,
|
|
28
30
|
close(growl) {
|
|
29
31
|
this.$store.dispatch('growl/remove', growl.id);
|
|
30
32
|
},
|
|
@@ -107,6 +109,7 @@ export default {
|
|
|
107
109
|
@click="close(growl)"
|
|
108
110
|
/>
|
|
109
111
|
<div
|
|
112
|
+
v-if="growl.title"
|
|
110
113
|
:id="`growl-title-${ growl.id }`"
|
|
111
114
|
class="growl-text-title"
|
|
112
115
|
>
|
|
@@ -117,7 +120,7 @@ export default {
|
|
|
117
120
|
:id="`growl-message-${ growl.id }`"
|
|
118
121
|
:class="{ 'has-title': !!growl.title }"
|
|
119
122
|
>
|
|
120
|
-
|
|
123
|
+
{{ translateError(growl.message) }}
|
|
121
124
|
</p>
|
|
122
125
|
</div>
|
|
123
126
|
</div>
|