dashboard-shell-shell 1.0.122 → 1.0.1000000082
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 +88 -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 +26 -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 +542 -553
- 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 +9 -1
- package/types/cloud-shell/index.d.ts +11020 -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
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
import { KUBERNETES, PROJECT } from '@shell/config/labels-annotations';
|
|
3
3
|
import { FLEET, NAMESPACE, MANAGEMENT, HELM } from '@shell/config/types';
|
|
4
4
|
import ButtonGroup from '@shell/components/ButtonGroup';
|
|
5
|
-
import { BadgeState } from '@components/BadgeState';
|
|
5
|
+
// import { BadgeState } from '@components/BadgeState';
|
|
6
|
+
import DotState from '@shell/components/DotState.vue';
|
|
6
7
|
import { Banner } from '@components/Banner';
|
|
7
8
|
import { get } from '@shell/utils/object';
|
|
8
9
|
import { NAME as FLEET_NAME } from '@shell/config/product/fleet';
|
|
@@ -13,6 +14,10 @@ import {
|
|
|
13
14
|
import { ExtensionPoint, PanelLocation } from '@shell/core/types';
|
|
14
15
|
import ExtensionPanel from '@shell/components/ExtensionPanel';
|
|
15
16
|
import TabTitle from '@shell/components/TabTitle';
|
|
17
|
+
import ActionMenu from '@shell/components/ActionMenuShell.vue';
|
|
18
|
+
import { useRuntimeFlag } from '@shell/composables/useRuntimeFlag';
|
|
19
|
+
import { useStore } from 'vuex';
|
|
20
|
+
import { harvesterhci2cloud, cloud2harvesterhci } from '@shell/utils/router'
|
|
16
21
|
|
|
17
22
|
// i18n-uses resourceDetail.header.*
|
|
18
23
|
|
|
@@ -26,7 +31,13 @@ export default {
|
|
|
26
31
|
name: 'MastheadResourceDetail',
|
|
27
32
|
|
|
28
33
|
components: {
|
|
29
|
-
BadgeState,
|
|
34
|
+
// BadgeState,
|
|
35
|
+
DotState,
|
|
36
|
+
Banner,
|
|
37
|
+
ButtonGroup,
|
|
38
|
+
ExtensionPanel,
|
|
39
|
+
TabTitle,
|
|
40
|
+
ActionMenu,
|
|
30
41
|
},
|
|
31
42
|
props: {
|
|
32
43
|
value: {
|
|
@@ -92,11 +103,19 @@ export default {
|
|
|
92
103
|
}
|
|
93
104
|
},
|
|
94
105
|
|
|
106
|
+
setup() {
|
|
107
|
+
const store = useStore();
|
|
108
|
+
const { featureDropdownMenu } = useRuntimeFlag(store);
|
|
109
|
+
|
|
110
|
+
return { featureDropdownMenu };
|
|
111
|
+
},
|
|
112
|
+
|
|
95
113
|
data() {
|
|
96
114
|
return {
|
|
97
115
|
DETAIL_VIEW: _DETAIL,
|
|
98
116
|
extensionType: ExtensionPoint.PANEL,
|
|
99
117
|
extensionLocation: PanelLocation.DETAILS_MASTHEAD,
|
|
118
|
+
Svg: require('~shell/assets/images/API.svg')
|
|
100
119
|
};
|
|
101
120
|
},
|
|
102
121
|
|
|
@@ -237,7 +256,7 @@ export default {
|
|
|
237
256
|
const defaultLocation = {
|
|
238
257
|
name: 'c-cluster-product-resource',
|
|
239
258
|
params: {
|
|
240
|
-
resource: this.resource,
|
|
259
|
+
resource: harvesterhci2cloud(this.resource),
|
|
241
260
|
product,
|
|
242
261
|
}
|
|
243
262
|
};
|
|
@@ -381,7 +400,9 @@ export default {
|
|
|
381
400
|
demoDisplay() {
|
|
382
401
|
const product = this.$store.getters['productId'];
|
|
383
402
|
|
|
384
|
-
const
|
|
403
|
+
const resources = this.location?.params?.resource || ''
|
|
404
|
+
|
|
405
|
+
const productId = this.$store.getters['type-map/groupForBasicType'](this.$store.getters['productId'], resources);
|
|
385
406
|
|
|
386
407
|
if (productId === undefined) {
|
|
387
408
|
return '';
|
|
@@ -401,11 +422,12 @@ export default {
|
|
|
401
422
|
},
|
|
402
423
|
menuIcon() {
|
|
403
424
|
const product = this.$store.getters['productId'];
|
|
425
|
+
|
|
426
|
+
const resources = this.location?.params?.resource || ''
|
|
404
427
|
|
|
405
|
-
return this.$store.getters['type-map/groupsForVirTypes'](product,
|
|
428
|
+
return this.$store.getters['type-map/groupsForVirTypes'](product, cloud2harvesterhci(resources));
|
|
406
429
|
},
|
|
407
430
|
|
|
408
|
-
|
|
409
431
|
location() {
|
|
410
432
|
const { parent } = this;
|
|
411
433
|
|
|
@@ -452,6 +474,7 @@ export default {
|
|
|
452
474
|
|
|
453
475
|
<template>
|
|
454
476
|
<div class="masthead">
|
|
477
|
+
<div class="title">
|
|
455
478
|
<!-- 创建api密钥不需要面包屑 -->
|
|
456
479
|
<div
|
|
457
480
|
v-if="!(parentRouteOverride === 'account' && resource=== 'token')"
|
|
@@ -659,17 +682,28 @@ export default {
|
|
|
659
682
|
class="mr-10"
|
|
660
683
|
/>
|
|
661
684
|
|
|
662
|
-
<
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
>
|
|
671
|
-
|
|
672
|
-
|
|
685
|
+
<template v-if="featureDropdownMenu">
|
|
686
|
+
<ActionMenu
|
|
687
|
+
v-if="isView"
|
|
688
|
+
button-role="multiAction"
|
|
689
|
+
button-size="compact"
|
|
690
|
+
:resource="value"
|
|
691
|
+
data-testid="masthead-action-menu"
|
|
692
|
+
/>
|
|
693
|
+
</template>
|
|
694
|
+
<template v-else>
|
|
695
|
+
<button
|
|
696
|
+
v-if="isView"
|
|
697
|
+
ref="actions"
|
|
698
|
+
data-testid="masthead-action-menu"
|
|
699
|
+
aria-haspopup="true"
|
|
700
|
+
type="button"
|
|
701
|
+
class="btn role-multi-action actions"
|
|
702
|
+
@click="showActions"
|
|
703
|
+
>
|
|
704
|
+
<i class="icon icon-actions" />
|
|
705
|
+
</button>
|
|
706
|
+
</template>
|
|
673
707
|
</div>
|
|
674
708
|
</div>
|
|
675
709
|
</slot>
|
|
@@ -696,6 +730,7 @@ export default {
|
|
|
696
730
|
/>
|
|
697
731
|
|
|
698
732
|
<slot />
|
|
733
|
+
</div>
|
|
699
734
|
</div>
|
|
700
735
|
</template>
|
|
701
736
|
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { mount, RouterLinkStub } from '@vue/test-utils';
|
|
2
2
|
import { _VIEW } from '@shell/config/query-params';
|
|
3
3
|
import Masthead from '@shell/components/ResourceDetail/Masthead.vue';
|
|
4
|
+
import { createStore } from 'vuex';
|
|
4
5
|
|
|
5
6
|
const mockedStore = () => {
|
|
6
7
|
return {
|
|
@@ -17,12 +18,15 @@ const mockedStore = () => {
|
|
|
17
18
|
};
|
|
18
19
|
|
|
19
20
|
const requiredSetup = () => {
|
|
21
|
+
const store = createStore({ getters: { 'management/byId': () => jest.fn() } });
|
|
22
|
+
|
|
20
23
|
return {
|
|
21
24
|
stubs: {
|
|
22
25
|
'router-link': RouterLinkStub,
|
|
23
26
|
LiveDate: true
|
|
24
27
|
},
|
|
25
|
-
|
|
28
|
+
provide: { store },
|
|
29
|
+
mocks: { $store: mockedStore() }
|
|
26
30
|
};
|
|
27
31
|
};
|
|
28
32
|
|
|
@@ -16,6 +16,7 @@ import ForceDirectedTreeChart from '@shell/components/fleet/ForceDirectedTreeCha
|
|
|
16
16
|
import { checkSchemasForFindAllHash } from '@shell/utils/auth';
|
|
17
17
|
import { stringify } from '@shell/utils/error';
|
|
18
18
|
import { Banner } from '@components/Banner';
|
|
19
|
+
import { harvesterhci2cloud, cloud2harvesterhci } from '@shell/utils/router'
|
|
19
20
|
|
|
20
21
|
function modeFor(route) {
|
|
21
22
|
if ( route.query?.mode === _IMPORT ) {
|
|
@@ -94,7 +95,8 @@ export default {
|
|
|
94
95
|
const store = this.$store;
|
|
95
96
|
const route = this.$route;
|
|
96
97
|
const params = route.params;
|
|
97
|
-
|
|
98
|
+
const cloneParams = clone(params)
|
|
99
|
+
let resourceType = this.resourceOverride || cloud2harvesterhci(cloneParams.resource);
|
|
98
100
|
|
|
99
101
|
const inStore = this.storeOverride || store.getters['currentStore'](resourceType);
|
|
100
102
|
const realMode = this.realMode;
|
|
@@ -384,18 +386,7 @@ export default {
|
|
|
384
386
|
},
|
|
385
387
|
|
|
386
388
|
created() {
|
|
387
|
-
|
|
388
|
-
const id = this.$route.params.id;
|
|
389
|
-
const resource = this.resourceOverride || this.$route.params.resource;
|
|
390
|
-
const options = this.$store.getters[`type-map/optionsFor`](resource);
|
|
391
|
-
|
|
392
|
-
const detailResource = options.resourceDetail || options.resource || resource;
|
|
393
|
-
const editResource = options.resourceEdit || options.resource || resource;
|
|
394
|
-
|
|
395
|
-
// FIXME: These aren't right... signature is (rawType, subType).. not (rawType, resourceId)
|
|
396
|
-
// Remove id? How does subtype get in (cluster/node)
|
|
397
|
-
this.detailComponent = this.$store.getters['type-map/importDetail'](detailResource, id);
|
|
398
|
-
this.editComponent = this.$store.getters['type-map/importEdit'](editResource, id);
|
|
389
|
+
this.configureResource();
|
|
399
390
|
},
|
|
400
391
|
|
|
401
392
|
methods: {
|
|
@@ -414,6 +405,53 @@ export default {
|
|
|
414
405
|
closeError(index) {
|
|
415
406
|
this.errors = this.errors.filter((_, i) => i !== index);
|
|
416
407
|
},
|
|
408
|
+
/**
|
|
409
|
+
* Initializes the resource components based on the provided user and
|
|
410
|
+
* resource override.
|
|
411
|
+
*
|
|
412
|
+
* Configures the detail and edit components for a resource based on the
|
|
413
|
+
* user's ID and the specified resource.
|
|
414
|
+
*
|
|
415
|
+
* @param {Object} user - The user object containing user-specific
|
|
416
|
+
* information.
|
|
417
|
+
* @param {string|null} resourceOverride - An optional resource override
|
|
418
|
+
* string. If not provided, the method will use the default resource from
|
|
419
|
+
* the route parameters or the instance's resourceOverride property.
|
|
420
|
+
*/
|
|
421
|
+
configureResource(userId = '', resourceOverride = null) {
|
|
422
|
+
const id = userId || this.$route.params.id;
|
|
423
|
+
// const paramsResource = this.$route.params.resource
|
|
424
|
+
const routerResource = clone(this.$route.params.resource)
|
|
425
|
+
const resource = resourceOverride || this.resourceOverride || cloud2harvesterhci(routerResource);
|
|
426
|
+
const options = this.$store.getters[`type-map/optionsFor`](resource);
|
|
427
|
+
|
|
428
|
+
const detailResource = options.resourceDetail || options.resource || resource;
|
|
429
|
+
const editResource = options.resourceEdit || options.resource || resource;
|
|
430
|
+
|
|
431
|
+
// FIXME: These aren't right... signature is (rawType, subType).. not (rawType, resourceId)
|
|
432
|
+
// Remove id? How does subtype get in (cluster/node)
|
|
433
|
+
this.detailComponent = this.$store.getters['type-map/importDetail'](detailResource, id);
|
|
434
|
+
this.editComponent = this.$store.getters['type-map/importEdit'](editResource, id);
|
|
435
|
+
},
|
|
436
|
+
/**
|
|
437
|
+
* Sets the mode and initializes the resource components.
|
|
438
|
+
*
|
|
439
|
+
* This method sets the mode of the component and configures the resource
|
|
440
|
+
* components based on the provided user and resource.
|
|
441
|
+
*
|
|
442
|
+
* @param {Object} payload - An object containing the mode, user, and
|
|
443
|
+
* resource properties.
|
|
444
|
+
* @param {string} payload.mode - The mode to set.
|
|
445
|
+
* @param {Object} payload.user - The user object containing user-specific
|
|
446
|
+
* information.
|
|
447
|
+
* @param {string} payload.resource - The resource string to use for
|
|
448
|
+
* initialization.
|
|
449
|
+
*/
|
|
450
|
+
setMode({ mode, userId, resource }) {
|
|
451
|
+
this.mode = mode;
|
|
452
|
+
this.value.id = userId;
|
|
453
|
+
this.configureResource(userId, resource);
|
|
454
|
+
}
|
|
417
455
|
}
|
|
418
456
|
};
|
|
419
457
|
</script>
|
|
@@ -431,15 +469,14 @@ export default {
|
|
|
431
469
|
:has-graph="hasGraph"
|
|
432
470
|
:has-detail="hasCustomDetail"
|
|
433
471
|
:has-edit="hasCustomEdit"
|
|
434
|
-
:can-view-yaml="canViewYaml"
|
|
435
472
|
:resource-subtype="resourceSubtype"
|
|
436
473
|
:parent-route-override="parentRouteOverride"
|
|
437
474
|
:store-override="storeOverride"
|
|
438
475
|
>
|
|
439
|
-
<DetailTop
|
|
476
|
+
<!-- <DetailTop
|
|
440
477
|
v-if="isView && isDetail"
|
|
441
478
|
:value="liveModel"
|
|
442
|
-
/>
|
|
479
|
+
/> -->
|
|
443
480
|
</Masthead>
|
|
444
481
|
<div
|
|
445
482
|
v-if="hasErrors"
|
|
@@ -491,6 +528,7 @@ export default {
|
|
|
491
528
|
:real-mode="realMode"
|
|
492
529
|
:class="{'flex-content': flexContent}"
|
|
493
530
|
@update:value="$emit('input', $event)"
|
|
531
|
+
@update:mode="setMode"
|
|
494
532
|
@set-subtype="setSubtype"
|
|
495
533
|
/>
|
|
496
534
|
|
|
@@ -6,6 +6,7 @@ import { get } from '@shell/utils/object';
|
|
|
6
6
|
import { AS, _YAML } from '@shell/config/query-params';
|
|
7
7
|
import ResourceLoadingIndicator from './ResourceLoadingIndicator';
|
|
8
8
|
import TabTitle from '@shell/components/TabTitle';
|
|
9
|
+
import { harvesterhci2cloud, cloud2harvesterhci } from '@shell/utils/router'
|
|
9
10
|
|
|
10
11
|
/**
|
|
11
12
|
* Resource List Masthead component.
|
|
@@ -85,20 +86,24 @@ export default {
|
|
|
85
86
|
data() {
|
|
86
87
|
const params = { ...this.$route.params };
|
|
87
88
|
|
|
88
|
-
|
|
89
|
+
params.resource = harvesterhci2cloud(params.resource)
|
|
90
|
+
|
|
91
|
+
const formRoute = { name: `${ cloud2harvesterhci(this.$route.name) }-create`, params };
|
|
89
92
|
|
|
90
93
|
const hasEditComponent = this.$store.getters['type-map/hasCustomEdit'](this.resource);
|
|
91
94
|
|
|
92
95
|
const yamlRoute = {
|
|
93
|
-
name: `${ this.$route.name }-create`,
|
|
96
|
+
name: `${ cloud2harvesterhci(this.$route.name) }-create`,
|
|
94
97
|
params,
|
|
95
98
|
query: { [AS]: _YAML },
|
|
96
99
|
};
|
|
97
100
|
|
|
101
|
+
const tabList = ['集群配置'];
|
|
98
102
|
return {
|
|
99
103
|
formRoute,
|
|
100
104
|
yamlRoute,
|
|
101
105
|
hasEditComponent,
|
|
106
|
+
tabList,
|
|
102
107
|
};
|
|
103
108
|
},
|
|
104
109
|
|
|
@@ -126,7 +131,7 @@ export default {
|
|
|
126
131
|
return this.$store.getters['type-map/labelFor'](this.schema, 99);
|
|
127
132
|
},
|
|
128
133
|
_descriptionDisplay() {
|
|
129
|
-
const key = this.$route.path.split('/').pop();
|
|
134
|
+
const key = cloud2harvesterhci(this.$route.path.split('/').pop());
|
|
130
135
|
|
|
131
136
|
return this.$store.getters['i18n/t'](`typeDescription."${ key.toLowerCase() }"`);
|
|
132
137
|
},
|
|
@@ -181,6 +186,23 @@ export default {
|
|
|
181
186
|
_createButtonlabel() {
|
|
182
187
|
return this.createButtonLabel || this.t('resourceList.head.create');
|
|
183
188
|
},
|
|
189
|
+
|
|
190
|
+
canCreateCustom() {
|
|
191
|
+
return this.hasEditComponent && this._isCreatable;
|
|
192
|
+
},
|
|
193
|
+
},
|
|
194
|
+
|
|
195
|
+
watch: {
|
|
196
|
+
canCreateCustom: {
|
|
197
|
+
immediate: true,
|
|
198
|
+
handler(newVal) {
|
|
199
|
+
|
|
200
|
+
console.log(newVal, ' newVal---------------------------');
|
|
201
|
+
|
|
202
|
+
|
|
203
|
+
this.$store.commit('type-map/setMastheadCreatable', newVal);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
184
206
|
}
|
|
185
207
|
};
|
|
186
208
|
</script>
|
|
@@ -201,7 +223,7 @@ export default {
|
|
|
201
223
|
</span>
|
|
202
224
|
<span class="excram-last-name">{{ _typeDisplay }}</span>
|
|
203
225
|
</div>
|
|
204
|
-
<h1 class="m-0">
|
|
226
|
+
<h1 class="m-0 descrip-name">
|
|
205
227
|
<TabTitle>{{ _typeDisplay }}</TabTitle> <Favorite
|
|
206
228
|
v-if="isExplorer"
|
|
207
229
|
:resource="favoriteResource || resource"
|
|
@@ -9,6 +9,7 @@ import { ResourceListComponentName } from './resource-list.config';
|
|
|
9
9
|
import { PanelLocation, ExtensionPoint } from '@shell/core/types';
|
|
10
10
|
import ExtensionPanel from '@shell/components/ExtensionPanel';
|
|
11
11
|
import { sameContents } from '@shell/utils/array';
|
|
12
|
+
import { cloud2harvesterhci } from '@shell/utils/router'
|
|
12
13
|
|
|
13
14
|
export default {
|
|
14
15
|
name: ResourceListComponentName,
|
|
@@ -40,7 +41,7 @@ export default {
|
|
|
40
41
|
|
|
41
42
|
async fetch() {
|
|
42
43
|
const store = this.$store;
|
|
43
|
-
const resource = this.resource;
|
|
44
|
+
const resource = cloud2harvesterhci(this.resource);
|
|
44
45
|
|
|
45
46
|
const schema = this.schema;
|
|
46
47
|
|
|
@@ -88,7 +89,7 @@ export default {
|
|
|
88
89
|
data() {
|
|
89
90
|
const getters = this.$store.getters;
|
|
90
91
|
const params = { ...this.$route.params };
|
|
91
|
-
const resource = params.resource;
|
|
92
|
+
const resource = cloud2harvesterhci(params.resource);
|
|
92
93
|
|
|
93
94
|
const hasListComponent = getters['type-map/hasCustomList'](resource);
|
|
94
95
|
|
|
@@ -200,7 +201,7 @@ export default {
|
|
|
200
201
|
created() {
|
|
201
202
|
let listComponent = false;
|
|
202
203
|
|
|
203
|
-
const resource = this.$route.params.resource;
|
|
204
|
+
const resource = cloud2harvesterhci(this.$route.params.resource);
|
|
204
205
|
const hasListComponent = this.$store.getters['type-map/hasCustomList'](resource);
|
|
205
206
|
|
|
206
207
|
if ( hasListComponent ) {
|
package/components/SideNav.vue
CHANGED
|
@@ -20,6 +20,7 @@ import { TYPE_MODES } from '@shell/store/type-map';
|
|
|
20
20
|
import { NAME as NAVLINKS } from '@shell/config/product/navlinks';
|
|
21
21
|
import Group from '@shell/components/nav/Group';
|
|
22
22
|
import LocaleSelector from '@shell/components/LocaleSelector';
|
|
23
|
+
import { cloud2harvesterhci, harvester2cloud } from '@shell/utils/router';
|
|
23
24
|
|
|
24
25
|
export default {
|
|
25
26
|
name: 'SideNav',
|
|
@@ -154,7 +155,7 @@ export default {
|
|
|
154
155
|
},
|
|
155
156
|
|
|
156
157
|
isVirtualProduct() {
|
|
157
|
-
return this.rootProduct.name === HARVESTER;
|
|
158
|
+
return this.rootProduct.name === harvester2cloud(HARVESTER);
|
|
158
159
|
},
|
|
159
160
|
|
|
160
161
|
allNavLinks() {
|
|
@@ -236,7 +237,7 @@ export default {
|
|
|
236
237
|
|
|
237
238
|
getProductsGroups(out, loadProducts, namespaceMode, productMap) {
|
|
238
239
|
const clusterId = this.$store.getters['clusterId'];
|
|
239
|
-
const currentType = this.$route.params.resource || '';
|
|
240
|
+
const currentType = cloud2harvesterhci(this.$route.params.resource) || '';
|
|
240
241
|
|
|
241
242
|
for ( const productId of loadProducts ) {
|
|
242
243
|
const modes = [TYPE_MODES.BASIC];
|
|
@@ -394,8 +395,12 @@ export default {
|
|
|
394
395
|
</script>
|
|
395
396
|
|
|
396
397
|
<template>
|
|
397
|
-
<nav
|
|
398
|
-
|
|
398
|
+
<nav
|
|
399
|
+
class="side-nav"
|
|
400
|
+
role="navigation"
|
|
401
|
+
:aria-label="t('nav.ariaLabel.sideNav')"
|
|
402
|
+
>
|
|
403
|
+
<div class="side-all-title">
|
|
399
404
|
控制台
|
|
400
405
|
</div>
|
|
401
406
|
<!-- Actual nav -->
|
|
@@ -417,36 +422,36 @@ export default {
|
|
|
417
422
|
</template>
|
|
418
423
|
</div>
|
|
419
424
|
<!-- SideNav footer area (seems to be tied to harvester) -->
|
|
420
|
-
<div
|
|
425
|
+
<!-- <div
|
|
421
426
|
v-if="showProductFooter"
|
|
422
427
|
class="footer"
|
|
423
|
-
>
|
|
428
|
+
> -->
|
|
424
429
|
<!-- support link -->
|
|
425
|
-
<router-link
|
|
430
|
+
<!-- <router-link
|
|
426
431
|
:to="supportLink"
|
|
427
432
|
class="pull-right"
|
|
428
433
|
role="link"
|
|
429
434
|
:aria-label="t('nav.support', {hasSupport: true})"
|
|
430
435
|
>
|
|
431
436
|
{{ t('nav.support', {hasSupport: true}) }}
|
|
432
|
-
</router-link>
|
|
437
|
+
</router-link> -->
|
|
433
438
|
<!-- version number -->
|
|
434
|
-
<span
|
|
439
|
+
<!-- <span
|
|
435
440
|
v-clean-tooltip="{content: displayVersion, placement: 'top'}"
|
|
436
441
|
class="clip version text-muted"
|
|
437
442
|
>
|
|
438
443
|
{{ displayVersion }}
|
|
439
|
-
</span>
|
|
444
|
+
</span> -->
|
|
440
445
|
|
|
441
446
|
<!-- locale selector -->
|
|
442
|
-
<LocaleSelector
|
|
447
|
+
<!-- <LocaleSelector
|
|
443
448
|
v-if="isSingleProduct && hasMultipleLocales && !isStandaloneHarvester"
|
|
444
449
|
mode="login"
|
|
445
450
|
:show-icon="false"
|
|
446
|
-
/>
|
|
447
|
-
</div>
|
|
451
|
+
/> -->
|
|
452
|
+
<!-- </div> -->
|
|
448
453
|
<!-- SideNav footer alternative -->
|
|
449
|
-
<div
|
|
454
|
+
<!-- <div
|
|
450
455
|
v-else
|
|
451
456
|
class="version text-muted flex"
|
|
452
457
|
>
|
|
@@ -467,7 +472,7 @@ export default {
|
|
|
467
472
|
(Harvester-{{ harvesterVersion }})
|
|
468
473
|
</span>
|
|
469
474
|
</template>
|
|
470
|
-
</div>
|
|
475
|
+
</div> -->
|
|
471
476
|
</nav>
|
|
472
477
|
</template>
|
|
473
478
|
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
<script lang="ts" setup>
|
|
2
|
+
import { computed } from 'vue';
|
|
3
|
+
import { useStore } from 'vuex';
|
|
4
|
+
|
|
5
|
+
const HEADER_HEIGHT = 55;
|
|
6
|
+
|
|
7
|
+
const store = useStore();
|
|
8
|
+
const isOpen = computed(() => store.getters['slideInPanel/isOpen']);
|
|
9
|
+
const currentComponent = computed(() => store.getters['slideInPanel/component']);
|
|
10
|
+
const currentProps = computed(() => store.getters['slideInPanel/componentProps']);
|
|
11
|
+
|
|
12
|
+
const panelTop = computed(() => {
|
|
13
|
+
const banner = document.getElementById('banner-header');
|
|
14
|
+
let height = HEADER_HEIGHT;
|
|
15
|
+
|
|
16
|
+
if (banner) {
|
|
17
|
+
height += banner.clientHeight;
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
return `${ height }px`;
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
const panelHeight = computed(() => `calc(100vh - ${ panelTop?.value })`);
|
|
24
|
+
const panelWidth = computed(() => currentProps?.value?.width || '33%');
|
|
25
|
+
const panelRight = computed(() => (isOpen?.value ? '0' : `-${ panelWidth?.value }`));
|
|
26
|
+
|
|
27
|
+
const panelTitle = computed(() => currentProps?.value?.title || 'Details');
|
|
28
|
+
|
|
29
|
+
function closePanel() {
|
|
30
|
+
store.commit('slideInPanel/close');
|
|
31
|
+
}
|
|
32
|
+
</script>
|
|
33
|
+
|
|
34
|
+
<template>
|
|
35
|
+
<Teleport to="#slides">
|
|
36
|
+
<div id="slide-in-panel-manager">
|
|
37
|
+
<div
|
|
38
|
+
v-show="isOpen"
|
|
39
|
+
data-testid="slide-in-glass"
|
|
40
|
+
class="slide-in-glass"
|
|
41
|
+
:class="{ 'slide-in-glass-open': isOpen }"
|
|
42
|
+
@click="closePanel"
|
|
43
|
+
/>
|
|
44
|
+
<div
|
|
45
|
+
class="slide-in"
|
|
46
|
+
:class="{ 'slide-in-open': isOpen }"
|
|
47
|
+
:style="{ width: panelWidth, right: panelRight, top: panelTop, height: panelHeight }"
|
|
48
|
+
>
|
|
49
|
+
<div class="header">
|
|
50
|
+
<div class="title">
|
|
51
|
+
{{ panelTitle }}
|
|
52
|
+
</div>
|
|
53
|
+
<i
|
|
54
|
+
class="icon icon-close"
|
|
55
|
+
data-testid="slide-in-close"
|
|
56
|
+
:trigger-focus-trap="true"
|
|
57
|
+
tabindex="0"
|
|
58
|
+
@click="closePanel"
|
|
59
|
+
/>
|
|
60
|
+
</div>
|
|
61
|
+
<div class="main-panel">
|
|
62
|
+
<component
|
|
63
|
+
:is="currentComponent"
|
|
64
|
+
v-if="isOpen || currentComponent"
|
|
65
|
+
v-bind="currentProps"
|
|
66
|
+
data-testid="slide-in-panel-component"
|
|
67
|
+
class="dynamic-panel-content"
|
|
68
|
+
/>
|
|
69
|
+
</div>
|
|
70
|
+
</div>
|
|
71
|
+
</div>
|
|
72
|
+
</Teleport>
|
|
73
|
+
</template>
|
|
74
|
+
|
|
75
|
+
<style lang="scss" scoped>
|
|
76
|
+
.slide-in-glass {
|
|
77
|
+
display: none;
|
|
78
|
+
position: fixed;
|
|
79
|
+
top: 0;
|
|
80
|
+
left: 0;
|
|
81
|
+
height: 100vh;
|
|
82
|
+
width: 100vw;
|
|
83
|
+
}
|
|
84
|
+
.slide-in-glass-open {
|
|
85
|
+
background-color: var(--body-bg);
|
|
86
|
+
display: block;
|
|
87
|
+
opacity: 0.5;
|
|
88
|
+
z-index: 1000;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
.slide-in {
|
|
92
|
+
display: flex;
|
|
93
|
+
flex-direction: column;
|
|
94
|
+
position: fixed;
|
|
95
|
+
top: 0;
|
|
96
|
+
z-index: 2000;
|
|
97
|
+
transition: right 0.5s ease;
|
|
98
|
+
border-left: 1px solid var(--border);
|
|
99
|
+
background-color: var(--body-bg);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
.slide-in-open {
|
|
103
|
+
right: 0;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
.header {
|
|
107
|
+
display: flex;
|
|
108
|
+
align-items: center;
|
|
109
|
+
padding: 4px;
|
|
110
|
+
border-bottom: 1px solid var(--border);
|
|
111
|
+
|
|
112
|
+
.title {
|
|
113
|
+
flex: 1;
|
|
114
|
+
font-weight: bold;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
.icon-close {
|
|
118
|
+
cursor: pointer;
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
.main-panel {
|
|
123
|
+
padding: 10px;
|
|
124
|
+
overflow: auto;
|
|
125
|
+
}
|
|
126
|
+
</style>
|
|
@@ -273,10 +273,13 @@ export default {
|
|
|
273
273
|
v-clean-tooltip="tooltip(col)"
|
|
274
274
|
class="content"
|
|
275
275
|
>
|
|
276
|
-
<span
|
|
276
|
+
<span
|
|
277
|
+
v-clean-html="labelFor(col)"
|
|
278
|
+
class="text-no-break"
|
|
279
|
+
/>
|
|
277
280
|
<span
|
|
278
281
|
v-if="col.subLabel"
|
|
279
|
-
class="text-muted"
|
|
282
|
+
class="text-muted text-no-break"
|
|
280
283
|
>
|
|
281
284
|
{{ col.subLabel }}
|
|
282
285
|
</span>
|
|
@@ -296,10 +299,12 @@ export default {
|
|
|
296
299
|
<i
|
|
297
300
|
v-if="isCurrent(col) && !descending"
|
|
298
301
|
class="icon icon-sort-down icon-stack-1x"
|
|
302
|
+
:alt="t('sortableTable.alt.sortingIconDesc')"
|
|
299
303
|
/>
|
|
300
304
|
<i
|
|
301
305
|
v-if="isCurrent(col) && descending"
|
|
302
306
|
class="icon icon-sort-up icon-stack-1x"
|
|
307
|
+
:alt="t('sortableTable.alt.sortingIconAsc')"
|
|
303
308
|
/>
|
|
304
309
|
</span>
|
|
305
310
|
</div>
|
|
@@ -308,6 +313,7 @@ export default {
|
|
|
308
313
|
<th
|
|
309
314
|
v-if="rowActions && hasAdvancedFiltering && tableColsOptions.length"
|
|
310
315
|
:width="rowActionsWidth"
|
|
316
|
+
:align="'left'"
|
|
311
317
|
>
|
|
312
318
|
<div
|
|
313
319
|
ref="table-options"
|
|
@@ -456,7 +462,7 @@ export default {
|
|
|
456
462
|
}
|
|
457
463
|
|
|
458
464
|
th {
|
|
459
|
-
padding:
|
|
465
|
+
padding: 16.5px 5px;
|
|
460
466
|
font-weight: normal;
|
|
461
467
|
border: 0;
|
|
462
468
|
color: var(--body-text);
|
|
@@ -496,7 +502,7 @@ export default {
|
|
|
496
502
|
&:last-child {
|
|
497
503
|
padding-right: 10px;
|
|
498
504
|
padding-left: 12px;
|
|
499
|
-
|
|
505
|
+
width: 200px;
|
|
500
506
|
}
|
|
501
507
|
|
|
502
508
|
&:not(.sortable) > SPAN {
|