@rancher/shell 3.0.4 → 3.0.5-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/images/providers/sks.svg +1 -0
- package/assets/styles/base/_basic.scss +6 -0
- package/assets/styles/base/_helpers.scss +4 -0
- package/assets/styles/base/_variables.scss +1 -0
- package/assets/styles/global/_button.scss +1 -0
- package/assets/translations/en-us.yaml +65 -15
- package/assets/translations/zh-hans.yaml +4 -3
- package/chart/monitoring/index.vue +3 -1
- package/cloud-credential/aws.vue +2 -0
- package/components/ActionDropdownShell.vue +71 -0
- package/components/AppModal.vue +18 -4
- package/components/AsyncButton.vue +24 -7
- package/components/BannerGraphic.vue +1 -0
- package/components/CommunityLinks.vue +4 -59
- package/components/CopyToClipboardText.vue +2 -1
- package/components/CruResource.vue +6 -1
- package/components/DetailText.vue +5 -0
- package/components/ExplorerMembers.vue +1 -1
- package/components/ExplorerProjectsNamespaces.vue +68 -18
- package/components/GlobalRoleBindings.vue +5 -1
- package/components/GrowlManager.vue +1 -0
- package/components/LandingPagePreference.vue +7 -3
- package/components/LocaleSelector.vue +39 -95
- package/components/ModalManager.vue +55 -0
- package/components/ModalWithCard.vue +1 -0
- package/components/PromptModal.vue +47 -8
- package/components/PromptRemove.vue +1 -0
- package/components/PromptRestore.vue +1 -0
- package/components/ResourceCancelModal.vue +1 -0
- package/components/ResourceDetail/Masthead.vue +38 -12
- package/components/ResourceDetail/__tests__/Masthead.test.ts +5 -1
- package/components/ResourceDetail/index.vue +47 -12
- package/components/ResourceTable.vue +54 -19
- package/components/SideNav.vue +5 -1
- package/components/SlideInPanelManager.vue +126 -0
- package/components/SortableTable/THead.vue +5 -2
- package/components/SortableTable/actions.js +1 -1
- package/components/SortableTable/index.vue +64 -51
- package/components/SortableTable/paging.js +16 -19
- package/components/SortableTable/selection.js +0 -11
- package/components/Wizard.vue +2 -2
- package/components/__tests__/AsyncButton.test.ts +2 -2
- package/components/__tests__/ModalManager.spec.ts +176 -0
- package/components/__tests__/PromptModal.test.ts +148 -0
- package/components/__tests__/SlideInPanelManager.spec.ts +166 -0
- package/components/auth/AuthBanner.vue +13 -11
- package/components/auth/Principal.vue +1 -0
- package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
- package/components/auth/login/ldap.vue +1 -1
- package/components/fleet/FleetResources.vue +21 -6
- package/components/form/ArrayList.vue +76 -60
- package/components/form/BannerSettings.vue +17 -2
- package/components/form/ColorInput.vue +35 -6
- package/components/form/Command.vue +6 -15
- package/components/form/EnvVars.vue +16 -8
- package/components/form/HealthCheck.vue +3 -3
- package/components/form/HookOption.vue +11 -16
- package/components/form/LabeledSelect.vue +18 -22
- package/components/form/LifecycleHooks.vue +3 -3
- package/components/form/MatchExpressions.vue +14 -8
- package/components/form/NameNsDescription.vue +128 -104
- package/components/form/Networking.vue +20 -12
- package/components/form/NodeAffinity.vue +31 -23
- package/components/form/NodeScheduling.vue +13 -3
- package/components/form/NotificationSettings.vue +15 -1
- package/components/form/Password.vue +1 -0
- package/components/form/PodAffinity.vue +43 -43
- package/components/form/Probe.vue +68 -66
- package/components/form/ResourceQuota/Project.vue +5 -1
- package/components/form/ResourceSelector.vue +7 -9
- package/components/form/SSHKnownHosts/__tests__/KnownHostsEditDialog.test.ts +16 -24
- package/components/form/SSHKnownHosts/index.vue +30 -13
- package/components/form/Security.vue +54 -56
- package/components/form/Select.vue +32 -21
- package/components/form/ShellInput.vue +5 -1
- package/components/form/Tolerations.vue +5 -1
- 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__/ColorInput.test.ts +35 -0
- package/components/form/__tests__/LabeledSelect.test.ts +40 -0
- 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 +22 -2
- package/components/form/__tests__/Select.test.ts +37 -0
- package/components/formatter/InternalExternalIP.vue +2 -0
- package/components/formatter/SecretData.vue +20 -7
- package/components/nav/Group.vue +27 -5
- package/components/nav/Header.vue +17 -43
- package/components/nav/NamespaceFilter.vue +134 -86
- package/components/nav/TopLevelMenu.vue +4 -5
- package/components/nav/Type.vue +12 -1
- package/components/nav/WindowManager/ContainerLogs.vue +87 -61
- package/components/nav/WindowManager/ContainerLogsActions.vue +76 -0
- package/components/templates/blank.vue +4 -1
- package/components/templates/default.vue +8 -3
- package/components/templates/home.vue +10 -1
- package/components/templates/plain.vue +10 -4
- package/composables/focusTrap.ts +12 -4
- package/composables/useRuntimeFlag.ts +29 -0
- package/config/router/routes.js +20 -13
- package/config/store.js +4 -0
- package/config/uiplugins.js +5 -1
- package/core/types.ts +12 -6
- package/detail/catalog.cattle.io.app.vue +6 -1
- package/detail/fleet.cattle.io.bundle.vue +70 -6
- package/detail/fleet.cattle.io.gitrepo.vue +1 -1
- package/detail/namespace.vue +0 -3
- package/detail/node.vue +17 -13
- package/detail/provisioning.cattle.io.cluster.vue +72 -6
- package/dialog/AddCustomBadgeDialog.vue +1 -1
- package/{pages/c/_cluster/uiplugins/AddExtensionRepos.vue → dialog/AddExtensionReposDialog.vue} +72 -42
- package/{components/AssignTo.vue → dialog/AssignToDialog.vue} +71 -80
- package/dialog/ChangePasswordDialog.vue +106 -0
- package/dialog/DeactivateDriverDialog.vue +1 -0
- package/{pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue → dialog/DeveloperLoadExtensionDialog.vue} +74 -71
- package/dialog/DisableAuthProviderDialog.vue +101 -0
- package/dialog/DrainNode.vue +1 -1
- package/{pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue → dialog/ExtensionCatalogInstallDialog.vue} +100 -88
- package/{pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue → dialog/ExtensionCatalogUninstallDialog.vue} +69 -57
- package/dialog/FeatureFlagListDialog.vue +288 -0
- package/dialog/ForceMachineRemoveDialog.vue +5 -2
- package/{components/Import.vue → dialog/ImportDialog.vue} +0 -5
- package/{pages/c/_cluster/uiplugins/InstallDialog.vue → dialog/InstallExtensionDialog.vue} +124 -106
- package/{components/form/SSHKnownHosts → dialog}/KnownHostsEditDialog.vue +52 -59
- package/dialog/MoveNamespaceDialog.vue +157 -0
- package/dialog/ScalePoolDownDialog.vue +1 -1
- package/{components/nav/Jump.vue → dialog/SearchDialog.vue} +34 -14
- package/{pages/c/_cluster/uiplugins/UninstallDialog.vue → dialog/UninstallExtensionDialog.vue} +67 -58
- package/dialog/WechatDialog.vue +57 -0
- package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +16 -3
- package/edit/auth/__tests__/oidc.test.ts +152 -109
- 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/index.vue +1 -1
- package/edit/auth/oidc.vue +38 -5
- package/edit/auth/saml.vue +1 -1
- package/edit/cloudcredential.vue +24 -9
- 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/namespace.vue +1 -4
- package/edit/networking.k8s.io.ingress/IngressClass.vue +7 -3
- 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 -8
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +26 -12
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +66 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/rke2-test-data.ts +58 -0
- package/edit/provisioning.cattle.io.cluster/rke2.vue +49 -41
- package/edit/provisioning.cattle.io.cluster/tabs/AgentConfiguration.vue +6 -1
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +5 -3
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +33 -2
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +2 -2
- package/edit/token.vue +2 -0
- package/edit/workload/index.vue +1 -0
- package/edit/workload/mixins/workload.js +0 -2
- package/initialize/install-plugins.js +2 -1
- package/list/harvesterhci.io.management.cluster.vue +4 -1
- package/list/management.cattle.io.feature.vue +4 -287
- package/list/provisioning.cattle.io.cluster.vue +20 -12
- package/machine-config/azure.vue +16 -4
- package/mixins/vue-select-overrides.js +0 -4
- package/models/__tests__/namespace.test.ts +25 -1
- package/models/cloudcredential.js +5 -0
- package/models/fleet.cattle.io.cluster.js +8 -2
- package/models/fleet.cattle.io.gitrepo.js +8 -34
- package/models/kontainerdriver.js +6 -3
- package/models/management.cattle.io.feature.js +7 -1
- package/models/management.cattle.io.node.js +3 -3
- package/models/namespace.js +11 -6
- package/models/nodedriver.js +6 -3
- package/models/workload.js +4 -1
- package/package.json +3 -3
- package/pages/about.vue +13 -3
- package/pages/account/index.vue +16 -6
- package/pages/auth/login.vue +18 -7
- package/pages/auth/logout.vue +4 -1
- package/pages/auth/setup.vue +2 -0
- package/pages/auth/verify.vue +13 -8
- 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/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/banners.vue +4 -3
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +8 -10
- package/pages/c/_cluster/uiplugins/__tests__/AddExtensionRepos.test.ts +4 -7
- package/pages/c/_cluster/uiplugins/index.vue +98 -55
- package/pages/diagnostic.vue +59 -11
- package/pages/fail-whale.vue +14 -8
- package/pages/home.vue +24 -18
- package/pages/prefs.vue +7 -6
- package/pages/support/index.vue +4 -1
- 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/plugins/steve/actions.js +0 -12
- package/public/index.html +1 -0
- package/rancher-components/Card/Card.vue +1 -1
- package/rancher-components/Form/Checkbox/Checkbox.test.ts +59 -1
- package/rancher-components/Form/Checkbox/Checkbox.vue +27 -3
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +47 -0
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +20 -2
- package/rancher-components/Form/Radio/RadioButton.test.ts +36 -1
- package/rancher-components/Form/Radio/RadioButton.vue +20 -4
- package/rancher-components/Form/Radio/RadioGroup.test.ts +60 -0
- package/rancher-components/Form/Radio/RadioGroup.vue +52 -10
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.test.ts +17 -0
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +5 -0
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +10 -1
- package/rancher-components/RcButton/RcButton.vue +2 -1
- package/rancher-components/RcButton/types.ts +1 -0
- package/rancher-components/RcDropdown/RcDropdown.vue +18 -6
- package/rancher-components/RcDropdown/RcDropdownItem.vue +3 -56
- package/rancher-components/RcDropdown/RcDropdownItemCheckbox.vue +68 -0
- package/rancher-components/RcDropdown/RcDropdownItemSelect.vue +92 -0
- package/rancher-components/RcDropdown/RcDropdownTrigger.vue +10 -0
- package/rancher-components/RcDropdown/index.ts +2 -0
- package/rancher-components/RcDropdown/useDropdownCollection.ts +8 -0
- package/rancher-components/RcDropdown/useDropdownContext.ts +9 -3
- package/rancher-components/RcDropdown/useDropdownItem.ts +63 -0
- package/scripts/extension/bundle +20 -0
- 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/helmpatch +44 -31
- package/scripts/extension/publish +12 -12
- package/scripts/typegen.sh +2 -4
- package/server/har-file.js +25 -3
- package/store/action-menu.js +26 -56
- package/store/features.js +2 -1
- package/store/index.js +5 -0
- package/store/modal.ts +71 -0
- package/store/slideInPanel.ts +47 -0
- package/store/type-map.js +12 -1
- package/store/type-map.utils.ts +4 -4
- 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/resources/fleet.d.ts +0 -14
- package/types/shell/index.d.ts +43 -24
- package/types/vue-shim.d.ts +4 -1
- package/utils/__mocks__/tabbable.js +13 -0
- package/utils/__tests__/object.test.ts +38 -4
- package/utils/cluster.js +35 -0
- package/utils/fleet.ts +15 -73
- package/utils/object.js +48 -5
- package/utils/validators/formRules/__tests__/index.test.ts +10 -1
- package/utils/validators/formRules/index.ts +27 -3
- package/utils/validators/machine-pool.ts +20 -0
- package/components/DisableAuthProviderModal.vue +0 -114
- package/components/MoveModal.vue +0 -166
- package/components/PromptChangePassword.vue +0 -123
- package/components/fleet/FleetBundleResources.vue +0 -86
- package/components/formatter/ExtensionCache.vue +0 -74
- package/components/formatter/Port.vue +0 -24
- package/components/formatter/SecretType.vue +0 -41
- package/types/vue-shim.d +0 -20
|
@@ -10,8 +10,11 @@ import AsyncButton from '@shell/components/AsyncButton';
|
|
|
10
10
|
import Select from '@shell/components/form/Select';
|
|
11
11
|
import VirtualList from 'vue3-virtual-scroll-list';
|
|
12
12
|
import LogItem from '@shell/components/LogItem';
|
|
13
|
+
import ContainerLogsActions from '@shell/components/nav/WindowManager/ContainerLogsActions.vue';
|
|
13
14
|
import { shallowRef } from 'vue';
|
|
15
|
+
import { useStore } from 'vuex';
|
|
14
16
|
import { debounce } from 'lodash';
|
|
17
|
+
import { useRuntimeFlag } from '@shell/composables/useRuntimeFlag';
|
|
15
18
|
|
|
16
19
|
import { escapeRegex } from '@shell/utils/string';
|
|
17
20
|
import { HARVESTER_NAME as VIRTUAL } from '@shell/config/features';
|
|
@@ -91,6 +94,7 @@ export default {
|
|
|
91
94
|
Checkbox,
|
|
92
95
|
AsyncButton,
|
|
93
96
|
VirtualList,
|
|
97
|
+
ContainerLogsActions,
|
|
94
98
|
},
|
|
95
99
|
|
|
96
100
|
props: {
|
|
@@ -130,6 +134,13 @@ export default {
|
|
|
130
134
|
}
|
|
131
135
|
},
|
|
132
136
|
|
|
137
|
+
setup() {
|
|
138
|
+
const store = useStore();
|
|
139
|
+
const { featureDropdownMenu } = useRuntimeFlag(store);
|
|
140
|
+
|
|
141
|
+
return { featureDropdownMenu };
|
|
142
|
+
},
|
|
143
|
+
|
|
133
144
|
data() {
|
|
134
145
|
return {
|
|
135
146
|
container: this.initialContainer || this.pod?.defaultContainerName,
|
|
@@ -145,7 +156,8 @@ export default {
|
|
|
145
156
|
lines: [],
|
|
146
157
|
now: new Date(),
|
|
147
158
|
logItem: shallowRef(LogItem),
|
|
148
|
-
isContainerMenuOpen: false
|
|
159
|
+
isContainerMenuOpen: false,
|
|
160
|
+
range: '',
|
|
149
161
|
};
|
|
150
162
|
},
|
|
151
163
|
|
|
@@ -636,72 +648,85 @@ export default {
|
|
|
636
648
|
</div>
|
|
637
649
|
|
|
638
650
|
<div class="log-action log-action-group ml-5">
|
|
639
|
-
<
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
:
|
|
655
|
-
|
|
656
|
-
@
|
|
651
|
+
<template v-if="featureDropdownMenu">
|
|
652
|
+
<ContainerLogsActions
|
|
653
|
+
:range="range"
|
|
654
|
+
:range-options="rangeOptions"
|
|
655
|
+
:wrap="wrap"
|
|
656
|
+
:timestamps="timestamps"
|
|
657
|
+
@toggle-range="toggleRange"
|
|
658
|
+
@toggle-wrap="toggleWrap"
|
|
659
|
+
@toggle-timestamps="toggleTimestamps"
|
|
660
|
+
/>
|
|
661
|
+
</template>
|
|
662
|
+
<template v-else>
|
|
663
|
+
<div
|
|
664
|
+
role="menu"
|
|
665
|
+
tabindex="0"
|
|
666
|
+
:aria-label="t('wm.containerLogs.logActionMenu')"
|
|
667
|
+
@click="openContainerMenu"
|
|
668
|
+
@blur.capture="closeContainerMenu"
|
|
669
|
+
@keyup.enter="openContainerMenu"
|
|
670
|
+
@keyup.space="openContainerMenu"
|
|
657
671
|
>
|
|
658
|
-
<
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
672
|
+
<v-dropdown
|
|
673
|
+
:triggers="[]"
|
|
674
|
+
:shown="isContainerMenuOpen"
|
|
675
|
+
placement="top"
|
|
676
|
+
popperClass="containerLogsDropdown"
|
|
677
|
+
:autoHide="false"
|
|
678
|
+
:flip="false"
|
|
679
|
+
:container="false"
|
|
680
|
+
@focus.capture="openContainerMenu"
|
|
662
681
|
>
|
|
663
|
-
<
|
|
664
|
-
class="
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
</button>
|
|
672
|
-
|
|
673
|
-
<template #popper>
|
|
674
|
-
<div class="filter-popup">
|
|
675
|
-
<LabeledSelect
|
|
676
|
-
v-model:value="range"
|
|
677
|
-
class="range"
|
|
678
|
-
:label="t('wm.containerLogs.range.label')"
|
|
679
|
-
:options="rangeOptions"
|
|
680
|
-
:clearable="false"
|
|
681
|
-
placement="top"
|
|
682
|
-
role="menuitem"
|
|
683
|
-
@update:value="toggleRange($event)"
|
|
682
|
+
<button
|
|
683
|
+
class="btn role-primary btn-cog"
|
|
684
|
+
role="button"
|
|
685
|
+
:aria-label="t('wm.containerLogs.options')"
|
|
686
|
+
>
|
|
687
|
+
<i
|
|
688
|
+
class="icon icon-gear"
|
|
689
|
+
:alt="t('wm.containerLogs.options')"
|
|
684
690
|
/>
|
|
685
|
-
<
|
|
686
|
-
|
|
687
|
-
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
:
|
|
691
|
+
<i
|
|
692
|
+
class="icon icon-chevron-up"
|
|
693
|
+
:alt="t('wm.containerLogs.expand')"
|
|
694
|
+
/>
|
|
695
|
+
</button>
|
|
696
|
+
|
|
697
|
+
<template #popper>
|
|
698
|
+
<div class="filter-popup">
|
|
699
|
+
<LabeledSelect
|
|
700
|
+
v-model:value="range"
|
|
701
|
+
class="range"
|
|
702
|
+
:label="t('wm.containerLogs.range.label')"
|
|
703
|
+
:options="rangeOptions"
|
|
704
|
+
:clearable="false"
|
|
705
|
+
placement="top"
|
|
697
706
|
role="menuitem"
|
|
698
|
-
@update:value="
|
|
707
|
+
@update:value="toggleRange($event)"
|
|
699
708
|
/>
|
|
709
|
+
<div>
|
|
710
|
+
<Checkbox
|
|
711
|
+
:label="t('wm.containerLogs.wrap')"
|
|
712
|
+
:value="wrap"
|
|
713
|
+
role="menuitem"
|
|
714
|
+
@update:value="toggleWrap"
|
|
715
|
+
/>
|
|
716
|
+
</div>
|
|
717
|
+
<div>
|
|
718
|
+
<Checkbox
|
|
719
|
+
:label="t('wm.containerLogs.timestamps')"
|
|
720
|
+
:value="timestamps"
|
|
721
|
+
role="menuitem"
|
|
722
|
+
@update:value="toggleTimestamps"
|
|
723
|
+
/>
|
|
724
|
+
</div>
|
|
700
725
|
</div>
|
|
701
|
-
</
|
|
702
|
-
</
|
|
703
|
-
</
|
|
704
|
-
</
|
|
726
|
+
</template>
|
|
727
|
+
</v-dropdown>
|
|
728
|
+
</div>
|
|
729
|
+
</template>
|
|
705
730
|
</div>
|
|
706
731
|
|
|
707
732
|
<div class="log-action log-action-group ml-5">
|
|
@@ -874,4 +899,5 @@ export default {
|
|
|
874
899
|
}
|
|
875
900
|
}
|
|
876
901
|
}
|
|
902
|
+
|
|
877
903
|
</style>
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
<script setup lang="ts">
|
|
2
|
+
import {
|
|
3
|
+
RcDropdown,
|
|
4
|
+
RcDropdownTrigger,
|
|
5
|
+
RcDropdownItemCheckbox,
|
|
6
|
+
RcDropdownItemSelect,
|
|
7
|
+
} from '@components/RcDropdown';
|
|
8
|
+
|
|
9
|
+
defineProps({
|
|
10
|
+
range: {
|
|
11
|
+
type: String,
|
|
12
|
+
default: '',
|
|
13
|
+
},
|
|
14
|
+
rangeOptions: {
|
|
15
|
+
type: Array,
|
|
16
|
+
default() {
|
|
17
|
+
return [];
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
wrap: Boolean,
|
|
21
|
+
timestamps: Boolean,
|
|
22
|
+
});
|
|
23
|
+
|
|
24
|
+
defineEmits([
|
|
25
|
+
'toggleRange',
|
|
26
|
+
'toggleWrap',
|
|
27
|
+
'toggleTimestamps',
|
|
28
|
+
]);
|
|
29
|
+
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
<template>
|
|
33
|
+
<rc-dropdown>
|
|
34
|
+
<rc-dropdown-trigger
|
|
35
|
+
class="condensed"
|
|
36
|
+
>
|
|
37
|
+
<i
|
|
38
|
+
class="icon icon-gear"
|
|
39
|
+
:alt="t('wm.containerLogs.options')"
|
|
40
|
+
/>
|
|
41
|
+
<template #after>
|
|
42
|
+
<i
|
|
43
|
+
class="icon icon-chevron-up"
|
|
44
|
+
:alt="t('wm.containerLogs.expand')"
|
|
45
|
+
/>
|
|
46
|
+
</template>
|
|
47
|
+
</rc-dropdown-trigger>
|
|
48
|
+
<template #dropdownCollection>
|
|
49
|
+
<rc-dropdown-item-select
|
|
50
|
+
:model-value="range"
|
|
51
|
+
:options="rangeOptions"
|
|
52
|
+
@select="$emit('toggleRange', $event)"
|
|
53
|
+
/>
|
|
54
|
+
<rc-dropdown-item-checkbox
|
|
55
|
+
:model-value="wrap"
|
|
56
|
+
@click="$emit('toggleWrap', $event)"
|
|
57
|
+
>
|
|
58
|
+
{{ t('wm.containerLogs.wrap') }}
|
|
59
|
+
</rc-dropdown-item-checkbox>
|
|
60
|
+
<rc-dropdown-item-checkbox
|
|
61
|
+
:model-value="timestamps"
|
|
62
|
+
@click="$emit('toggleTimestamps', $event)"
|
|
63
|
+
>
|
|
64
|
+
{{ t('wm.containerLogs.timestamps') }}
|
|
65
|
+
</rc-dropdown-item-checkbox>
|
|
66
|
+
</template>
|
|
67
|
+
</rc-dropdown>
|
|
68
|
+
</template>
|
|
69
|
+
|
|
70
|
+
<style lang="scss" scoped>
|
|
71
|
+
.condensed {
|
|
72
|
+
padding-left: 0.5rem;
|
|
73
|
+
padding-right: 0.5rem;
|
|
74
|
+
min-height: 30px;
|
|
75
|
+
}
|
|
76
|
+
</style>
|
|
@@ -7,11 +7,12 @@ import {
|
|
|
7
7
|
} from '@shell/store/prefs';
|
|
8
8
|
import ActionMenu from '@shell/components/ActionMenu';
|
|
9
9
|
import GrowlManager from '@shell/components/GrowlManager';
|
|
10
|
+
import ModalManager from '@shell/components/ModalManager';
|
|
11
|
+
import SlideInPanelManager from '@shell/components/SlideInPanelManager';
|
|
10
12
|
import WindowManager from '@shell/components/nav/WindowManager';
|
|
11
13
|
import PromptRemove from '@shell/components/PromptRemove';
|
|
12
14
|
import PromptRestore from '@shell/components/PromptRestore';
|
|
13
15
|
import PromptModal from '@shell/components/PromptModal';
|
|
14
|
-
import AssignTo from '@shell/components/AssignTo';
|
|
15
16
|
import Header from '@shell/components/nav/Header';
|
|
16
17
|
import Inactivity from '@shell/components/Inactivity';
|
|
17
18
|
import Brand from '@shell/mixins/brand';
|
|
@@ -34,11 +35,12 @@ export default {
|
|
|
34
35
|
components: {
|
|
35
36
|
PromptRemove,
|
|
36
37
|
PromptRestore,
|
|
37
|
-
AssignTo,
|
|
38
38
|
PromptModal,
|
|
39
39
|
Header,
|
|
40
40
|
ActionMenu,
|
|
41
41
|
GrowlManager,
|
|
42
|
+
ModalManager,
|
|
43
|
+
SlideInPanelManager,
|
|
42
44
|
WindowManager,
|
|
43
45
|
FixedBanner,
|
|
44
46
|
AwsComplianceBanner,
|
|
@@ -198,6 +200,7 @@ export default {
|
|
|
198
200
|
<main
|
|
199
201
|
v-if="clusterAndRouteReady"
|
|
200
202
|
class="main-layout"
|
|
203
|
+
:aria-label="t('layouts.default')"
|
|
201
204
|
>
|
|
202
205
|
<router-view
|
|
203
206
|
:key="$route.path"
|
|
@@ -206,8 +209,8 @@ export default {
|
|
|
206
209
|
<ActionMenu />
|
|
207
210
|
<PromptRemove />
|
|
208
211
|
<PromptRestore />
|
|
209
|
-
<AssignTo />
|
|
210
212
|
<PromptModal />
|
|
213
|
+
<ModalManager />
|
|
211
214
|
<button
|
|
212
215
|
v-if="noLocaleShortcut"
|
|
213
216
|
v-shortkey.once="['shift','l']"
|
|
@@ -235,6 +238,7 @@ export default {
|
|
|
235
238
|
<main
|
|
236
239
|
v-else-if="unmatchedRoute"
|
|
237
240
|
class="main-layout"
|
|
241
|
+
:aria-label="t('layouts.default')"
|
|
238
242
|
>
|
|
239
243
|
<router-view
|
|
240
244
|
:key="$route.path"
|
|
@@ -257,6 +261,7 @@ export default {
|
|
|
257
261
|
</div>
|
|
258
262
|
<FixedBanner :footer="true" />
|
|
259
263
|
<GrowlManager />
|
|
264
|
+
<SlideInPanelManager />
|
|
260
265
|
<Inactivity />
|
|
261
266
|
<DraggableZone ref="draggableZone" />
|
|
262
267
|
</div>
|
|
@@ -3,6 +3,8 @@ import Header from '@shell/components/nav/Header';
|
|
|
3
3
|
import Brand from '@shell/mixins/brand';
|
|
4
4
|
import FixedBanner from '@shell/components/FixedBanner';
|
|
5
5
|
import GrowlManager from '@shell/components/GrowlManager';
|
|
6
|
+
import ModalManager from '@shell/components/ModalManager';
|
|
7
|
+
import SlideInPanelManager from '@shell/components/SlideInPanelManager';
|
|
6
8
|
import { mapPref, THEME_SHORTCUT } from '@shell/store/prefs';
|
|
7
9
|
import AwsComplianceBanner from '@shell/components/AwsComplianceBanner';
|
|
8
10
|
import AzureWarning from '@shell/components/auth/AzureWarning';
|
|
@@ -17,6 +19,8 @@ export default {
|
|
|
17
19
|
Header,
|
|
18
20
|
FixedBanner,
|
|
19
21
|
GrowlManager,
|
|
22
|
+
ModalManager,
|
|
23
|
+
SlideInPanelManager,
|
|
20
24
|
AzureWarning,
|
|
21
25
|
AwsComplianceBanner,
|
|
22
26
|
Inactivity,
|
|
@@ -58,6 +62,7 @@ export default {
|
|
|
58
62
|
<AwsComplianceBanner />
|
|
59
63
|
<AzureWarning />
|
|
60
64
|
<PromptModal />
|
|
65
|
+
<ModalManager />
|
|
61
66
|
<div
|
|
62
67
|
class="dashboard-content"
|
|
63
68
|
:class="{'dashboard-padding-left': showTopLevelMenu}"
|
|
@@ -67,7 +72,10 @@ export default {
|
|
|
67
72
|
:simple="true"
|
|
68
73
|
/>
|
|
69
74
|
|
|
70
|
-
<main
|
|
75
|
+
<main
|
|
76
|
+
class="main-layout"
|
|
77
|
+
:aria-label="t('layouts.home')"
|
|
78
|
+
>
|
|
71
79
|
<router-view
|
|
72
80
|
:key="$route.path"
|
|
73
81
|
class="outlet"
|
|
@@ -76,6 +84,7 @@ export default {
|
|
|
76
84
|
</div>
|
|
77
85
|
<FixedBanner :footer="true" />
|
|
78
86
|
<GrowlManager />
|
|
87
|
+
<SlideInPanelManager />
|
|
79
88
|
<button
|
|
80
89
|
v-if="themeShortcut"
|
|
81
90
|
v-shortkey.once="['shift','t']"
|
|
@@ -3,11 +3,12 @@ import { mapPref, THEME_SHORTCUT } from '@shell/store/prefs';
|
|
|
3
3
|
import ActionMenu from '@shell/components/ActionMenu';
|
|
4
4
|
import Header from '@shell/components/nav/Header';
|
|
5
5
|
import PromptRemove from '@shell/components/PromptRemove';
|
|
6
|
-
import AssignTo from '@shell/components/AssignTo';
|
|
7
6
|
import IndentedPanel from '@shell/components/IndentedPanel';
|
|
8
7
|
import Brand from '@shell/mixins/brand';
|
|
9
8
|
import FixedBanner from '@shell/components/FixedBanner';
|
|
10
9
|
import GrowlManager from '@shell/components/GrowlManager';
|
|
10
|
+
import ModalManager from '@shell/components/ModalManager';
|
|
11
|
+
import SlideInPanelManager from '@shell/components/SlideInPanelManager';
|
|
11
12
|
import AwsComplianceBanner from '@shell/components/AwsComplianceBanner';
|
|
12
13
|
import AzureWarning from '@shell/components/auth/AzureWarning';
|
|
13
14
|
import BrowserTabVisibility from '@shell/mixins/browser-tab-visibility';
|
|
@@ -19,13 +20,14 @@ export default {
|
|
|
19
20
|
|
|
20
21
|
components: {
|
|
21
22
|
ActionMenu,
|
|
22
|
-
AssignTo,
|
|
23
23
|
Header,
|
|
24
24
|
IndentedPanel,
|
|
25
25
|
PromptRemove,
|
|
26
26
|
PromptModal,
|
|
27
27
|
FixedBanner,
|
|
28
28
|
GrowlManager,
|
|
29
|
+
ModalManager,
|
|
30
|
+
SlideInPanelManager,
|
|
29
31
|
AwsComplianceBanner,
|
|
30
32
|
AzureWarning,
|
|
31
33
|
Inactivity
|
|
@@ -68,7 +70,10 @@ export default {
|
|
|
68
70
|
:class="{'dashboard-padding-left': showTopLevelMenu}"
|
|
69
71
|
>
|
|
70
72
|
<Header :simple="true" />
|
|
71
|
-
<main
|
|
73
|
+
<main
|
|
74
|
+
class="main-layout"
|
|
75
|
+
:aria-label="t('layouts.plain')"
|
|
76
|
+
>
|
|
72
77
|
<IndentedPanel class="pt-20">
|
|
73
78
|
<router-view
|
|
74
79
|
:key="$route.path"
|
|
@@ -78,7 +83,7 @@ export default {
|
|
|
78
83
|
<ActionMenu />
|
|
79
84
|
<PromptRemove />
|
|
80
85
|
<PromptModal />
|
|
81
|
-
<
|
|
86
|
+
<ModalManager />
|
|
82
87
|
<button
|
|
83
88
|
v-if="themeShortcut"
|
|
84
89
|
v-shortkey.once="['shift','t']"
|
|
@@ -96,6 +101,7 @@ export default {
|
|
|
96
101
|
|
|
97
102
|
<FixedBanner :footer="true" />
|
|
98
103
|
<GrowlManager />
|
|
104
|
+
<SlideInPanelManager />
|
|
99
105
|
<Inactivity />
|
|
100
106
|
</div>
|
|
101
107
|
</template>
|
package/composables/focusTrap.ts
CHANGED
|
@@ -46,12 +46,12 @@ export function useBasicSetupFocusTrap(focusElement: string | HTMLElement, opts:
|
|
|
46
46
|
});
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
export function useWatcherBasedSetupFocusTrapWithDestroyIncluded(watchVar:any, focusElement: string | HTMLElement, opts:any = DEFAULT_FOCUS_TRAP_OPTS) {
|
|
49
|
+
export function useWatcherBasedSetupFocusTrapWithDestroyIncluded(watchVar:any, focusElement: string | HTMLElement, opts:any = DEFAULT_FOCUS_TRAP_OPTS, useUnmountHook = false) {
|
|
50
50
|
let focusTrapInstance: FocusTrap;
|
|
51
51
|
let focusEl;
|
|
52
52
|
|
|
53
53
|
watch(watchVar, (neu) => {
|
|
54
|
-
if (neu) {
|
|
54
|
+
if (neu && !focusTrapInstance) {
|
|
55
55
|
nextTick(() => {
|
|
56
56
|
focusEl = typeof focusElement === 'string' ? document.querySelector(focusElement) as HTMLElement : focusElement;
|
|
57
57
|
|
|
@@ -61,8 +61,16 @@ export function useWatcherBasedSetupFocusTrapWithDestroyIncluded(watchVar:any, f
|
|
|
61
61
|
focusTrapInstance.activate();
|
|
62
62
|
});
|
|
63
63
|
});
|
|
64
|
-
} else if (!neu && Object.keys(focusTrapInstance).length) {
|
|
64
|
+
} else if (!neu && focusTrapInstance && Object.keys(focusTrapInstance).length && !useUnmountHook) {
|
|
65
65
|
focusTrapInstance.deactivate();
|
|
66
66
|
}
|
|
67
|
-
});
|
|
67
|
+
}, { immediate: true });
|
|
68
|
+
|
|
69
|
+
if (useUnmountHook) {
|
|
70
|
+
onBeforeUnmount(() => {
|
|
71
|
+
if (focusTrapInstance && Object.keys(focusTrapInstance).length) {
|
|
72
|
+
focusTrapInstance.deactivate();
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
}
|
|
68
76
|
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { computed } from 'vue';
|
|
2
|
+
import { Store } from 'vuex';
|
|
3
|
+
import semver from 'semver';
|
|
4
|
+
|
|
5
|
+
import { getVersionInfo } from '@shell/utils/version';
|
|
6
|
+
|
|
7
|
+
let store: Store<any>;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Initializes runtime flags.
|
|
11
|
+
* @param vuexStore The Vuex store instance
|
|
12
|
+
*/
|
|
13
|
+
export const useRuntimeFlag = (vuexStore: Store<any>) => {
|
|
14
|
+
store = vuexStore;
|
|
15
|
+
|
|
16
|
+
return { featureDropdownMenu };
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Check if the dropdown menu feature is enabled
|
|
21
|
+
* @returns A boolean indicating whether the dropdownMenu feature is enabled.
|
|
22
|
+
*/
|
|
23
|
+
const featureDropdownMenu = computed(() => {
|
|
24
|
+
const { fullVersion } = getVersionInfo(store);
|
|
25
|
+
|
|
26
|
+
const coerced = semver.coerce(fullVersion) || { version: '0.0.0' };
|
|
27
|
+
|
|
28
|
+
return semver.gte(coerced.version, '2.11.0');
|
|
29
|
+
});
|
package/config/router/routes.js
CHANGED
|
@@ -276,14 +276,24 @@ export default [
|
|
|
276
276
|
name: 'c-cluster-neuvector',
|
|
277
277
|
meta: { ...installRedirectRouteMeta(NEUVECTOR_NAME, NEUVECTOR_CHART_NAME, undefined, false) }
|
|
278
278
|
}, {
|
|
279
|
-
path:
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
279
|
+
path: '/c/:cluster/apps/charts',
|
|
280
|
+
children: [
|
|
281
|
+
{
|
|
282
|
+
path: '',
|
|
283
|
+
component: () => interopDefault(import('@shell/pages/c/_cluster/apps/charts/index.vue')),
|
|
284
|
+
name: 'c-cluster-apps-charts'
|
|
285
|
+
},
|
|
286
|
+
{
|
|
287
|
+
path: 'chart',
|
|
288
|
+
component: () => interopDefault(import('@shell/pages/c/_cluster/apps/charts/chart.vue')),
|
|
289
|
+
name: 'c-cluster-apps-charts-chart',
|
|
290
|
+
},
|
|
291
|
+
{
|
|
292
|
+
path: 'install',
|
|
293
|
+
component: () => interopDefault(import('@shell/pages/c/_cluster/apps/charts/install.vue')),
|
|
294
|
+
name: 'c-cluster-apps-charts-install',
|
|
295
|
+
},
|
|
296
|
+
]
|
|
287
297
|
},
|
|
288
298
|
{
|
|
289
299
|
path: '/c/:cluster/auth/config',
|
|
@@ -353,10 +363,6 @@ export default [
|
|
|
353
363
|
path: '/c/:cluster/settings/performance',
|
|
354
364
|
component: () => interopDefault(import('@shell/pages/c/_cluster/settings/performance.vue')),
|
|
355
365
|
name: 'c-cluster-settings-performance'
|
|
356
|
-
}, {
|
|
357
|
-
path: '/c/:cluster/apps/charts/chart',
|
|
358
|
-
component: () => interopDefault(import('@shell/pages/c/_cluster/apps/charts/chart.vue')),
|
|
359
|
-
name: 'c-cluster-apps-charts-chart'
|
|
360
366
|
}, {
|
|
361
367
|
path: '/c/:cluster/auth/group.principal/assign-edit',
|
|
362
368
|
component: () => interopDefault(import('@shell/pages/c/_cluster/auth/group.principal/assign-edit.vue')),
|
|
@@ -364,7 +370,8 @@ export default [
|
|
|
364
370
|
}, {
|
|
365
371
|
path: '/c/:cluster/auth/user.retention',
|
|
366
372
|
component: () => interopDefault(import('@shell/pages/c/_cluster/auth/user.retention/index.vue')),
|
|
367
|
-
name: 'c-cluster-auth-user.retention'
|
|
373
|
+
name: 'c-cluster-auth-user.retention',
|
|
374
|
+
meta: { nav: '/c/:cluster/auth/management.cattle.io.user' }
|
|
368
375
|
}, {
|
|
369
376
|
path: '/c/:cluster/manager/cloudCredential/create',
|
|
370
377
|
component: () => interopDefault(import('@shell/pages/c/_cluster/manager/cloudCredential/create.vue')),
|
package/config/store.js
CHANGED
|
@@ -27,10 +27,12 @@ let store = {};
|
|
|
27
27
|
resolveStoreModules(require('../store/growl.js'), 'growl.js');
|
|
28
28
|
resolveStoreModules(require('../store/i18n.js'), 'i18n.js');
|
|
29
29
|
resolveStoreModules(require('../store/linode.js'), 'linode.js');
|
|
30
|
+
resolveStoreModules(require('../store/modal.ts'), 'modal.ts');
|
|
30
31
|
resolveStoreModules(require('../store/plugins.js'), 'plugins.js');
|
|
31
32
|
resolveStoreModules(require('../store/pnap.js'), 'pnap.js');
|
|
32
33
|
resolveStoreModules(require('../store/prefs.js'), 'prefs.js');
|
|
33
34
|
resolveStoreModules(require('../store/resource-fetch.js'), 'resource-fetch.js');
|
|
35
|
+
resolveStoreModules(require('../store/slideInPanel.ts'), 'slideInPanel.ts');
|
|
34
36
|
resolveStoreModules(require('../store/type-map.js'), 'type-map.js');
|
|
35
37
|
resolveStoreModules(require('../store/uiplugins.ts'), 'uiplugins.ts');
|
|
36
38
|
resolveStoreModules(require('../store/wm.js'), 'wm.js');
|
|
@@ -54,10 +56,12 @@ let store = {};
|
|
|
54
56
|
'../store/i18n.js',
|
|
55
57
|
'../store/index.js',
|
|
56
58
|
'../store/linode.js',
|
|
59
|
+
'../store/modal.ts',
|
|
57
60
|
'../store/plugins.js',
|
|
58
61
|
'../store/pnap.js',
|
|
59
62
|
'../store/prefs.js',
|
|
60
63
|
'../store/resource-fetch.js',
|
|
64
|
+
'../store/slideInPanel.ts',
|
|
61
65
|
'../store/type-map.js',
|
|
62
66
|
'../store/uiplugins.ts',
|
|
63
67
|
'../store/wm.js',
|
package/config/uiplugins.js
CHANGED
|
@@ -148,7 +148,11 @@ function checkIncompatibility(currentVersion, requiredVersion, incompatibilityDa
|
|
|
148
148
|
* @returns String | Boolean
|
|
149
149
|
*/
|
|
150
150
|
export function shouldNotLoadPlugin(UIPluginResource, { rancherVersion, kubeVersion }, loadedPlugins) {
|
|
151
|
-
|
|
151
|
+
const {
|
|
152
|
+
name, version, endpoint, compressedEndpoint
|
|
153
|
+
} = UIPluginResource;
|
|
154
|
+
|
|
155
|
+
if (!name || !version || (!endpoint && !compressedEndpoint)) {
|
|
152
156
|
return 'plugins.error.generic';
|
|
153
157
|
}
|
|
154
158
|
|
package/core/types.ts
CHANGED
|
@@ -40,7 +40,7 @@ export type OnNavToPackage = (store: any, config: OnEnterLeavePackageConfig) =>
|
|
|
40
40
|
export type OnNavAwayFromPackage = (store: any, config: OnEnterLeavePackageConfig) => Promise<void>;
|
|
41
41
|
export type OnLogOut = (store: any) => Promise<void>;
|
|
42
42
|
|
|
43
|
-
/** Enum regarding the
|
|
43
|
+
/** Enum regarding the extensible areas/places of the UI */
|
|
44
44
|
export enum ExtensionPoint {
|
|
45
45
|
ACTION = 'Action', // eslint-disable-line no-unused-vars
|
|
46
46
|
TAB = 'Tab', // eslint-disable-line no-unused-vars
|
|
@@ -49,31 +49,32 @@ export enum ExtensionPoint {
|
|
|
49
49
|
TABLE_COL = 'TableColumn', // eslint-disable-line no-unused-vars
|
|
50
50
|
}
|
|
51
51
|
|
|
52
|
-
/** Enum regarding action locations that are
|
|
52
|
+
/** Enum regarding action locations that are extensible in the UI */
|
|
53
53
|
export enum ActionLocation {
|
|
54
54
|
HEADER = 'header-action', // eslint-disable-line no-unused-vars
|
|
55
55
|
TABLE = 'table-action', // eslint-disable-line no-unused-vars
|
|
56
56
|
}
|
|
57
57
|
|
|
58
|
-
/** Enum regarding panel locations that are
|
|
58
|
+
/** Enum regarding panel locations that are extensible in the UI */
|
|
59
59
|
export enum PanelLocation {
|
|
60
|
+
ABOUT_TOP = 'about-top', // eslint-disable-line no-unused-vars
|
|
60
61
|
DETAILS_MASTHEAD = 'details-masthead', // eslint-disable-line no-unused-vars
|
|
61
62
|
DETAIL_TOP = 'detail-top', // eslint-disable-line no-unused-vars
|
|
62
63
|
RESOURCE_LIST = 'resource-list', // eslint-disable-line no-unused-vars
|
|
63
64
|
}
|
|
64
65
|
|
|
65
|
-
/** Enum regarding tab locations that are
|
|
66
|
+
/** Enum regarding tab locations that are extensible in the UI */
|
|
66
67
|
export enum TabLocation {
|
|
67
68
|
RESOURCE_DETAIL = 'tab', // eslint-disable-line no-unused-vars
|
|
68
69
|
CLUSTER_CREATE_RKE2 = 'cluster-create-rke2', // eslint-disable-line no-unused-vars
|
|
69
70
|
}
|
|
70
71
|
|
|
71
|
-
/** Enum regarding card locations that are
|
|
72
|
+
/** Enum regarding card locations that are extensible in the UI */
|
|
72
73
|
export enum CardLocation {
|
|
73
74
|
CLUSTER_DASHBOARD_CARD = 'cluster-dashboard-card', // eslint-disable-line no-unused-vars
|
|
74
75
|
}
|
|
75
76
|
|
|
76
|
-
/** Enum regarding table col locations that are
|
|
77
|
+
/** Enum regarding table col locations that are extensible in the UI */
|
|
77
78
|
export enum TableColumnLocation {
|
|
78
79
|
RESOURCE = 'resource-list', // eslint-disable-line no-unused-vars
|
|
79
80
|
}
|
|
@@ -373,6 +374,11 @@ export interface ConfigureTypeOptions {
|
|
|
373
374
|
*/
|
|
374
375
|
customRoute?: Object;
|
|
375
376
|
|
|
377
|
+
/**
|
|
378
|
+
* Custom options vary pre resource type
|
|
379
|
+
*/
|
|
380
|
+
custom?: any;
|
|
381
|
+
|
|
376
382
|
/**
|
|
377
383
|
* Leaving these here for completeness but I don't think these should be advertised as useable to plugin creators.
|
|
378
384
|
*/
|