@rancher/shell 1.2.3 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/data/aws-regions.json +9 -0
- package/assets/images/vendor/openid.svg +18 -0
- package/assets/styles/app.scss +1 -2
- package/assets/styles/fonts/_icons.scss +3 -3
- package/assets/styles/global/_columns.scss +1 -1
- package/assets/styles/global/_labeled-input.scss +1 -0
- package/assets/styles/global/_layout.scss +99 -0
- package/assets/styles/themes/_csp.scss +2 -2
- package/assets/styles/themes/_dark.scss +8 -2
- package/assets/styles/themes/_light.scss +2 -1
- package/assets/styles/themes/_suse.scss +1 -1
- package/assets/styles/vendor/vue-select.scss +5 -0
- package/assets/translations/en-us.yaml +315 -64
- package/assets/translations/zh-hans.yaml +7 -31
- package/babel.config.js +8 -2
- package/chart/__tests__/S3.test.ts +9 -2
- package/chart/gatekeeper.vue +2 -11
- package/chart/istio.vue +1 -10
- package/chart/logging/index.vue +2 -11
- package/chart/monitoring/alerting/index.vue +7 -21
- package/chart/monitoring/grafana/index.vue +61 -2
- package/chart/monitoring/index.vue +52 -26
- package/chart/monitoring/prometheus/index.vue +39 -45
- package/chart/rancher-backup/S3.vue +11 -9
- package/chart/rancher-backup/index.vue +18 -15
- package/cloud-credential/__tests__/harvester.test.ts +18 -0
- package/cloud-credential/azure.vue +4 -17
- package/cloud-credential/generic.vue +18 -9
- package/cloud-credential/harvester.vue +11 -3
- package/components/AlertTable.vue +17 -7
- package/components/AppModal.vue +167 -0
- package/components/AssignTo.vue +7 -4
- package/components/AsyncButton.vue +27 -5
- package/components/BackLink.vue +4 -4
- package/components/BannerGraphic.vue +1 -0
- package/components/BrandImage.vue +47 -1
- package/components/Carousel.vue +15 -8
- package/components/Certificates.vue +161 -0
- package/components/ClusterBadge.vue +12 -3
- package/components/ClusterIconMenu.vue +55 -12
- package/components/ClusterProviderIcon.vue +14 -3
- package/components/CodeMirror.vue +111 -17
- package/components/CommunityLinks.vue +12 -8
- package/components/CopyCode.vue +6 -2
- package/components/CopyToClipboard.vue +2 -1
- package/components/CopyToClipboardText.vue +14 -9
- package/components/CreateDriver.vue +81 -0
- package/components/CruResource.vue +52 -27
- package/components/DetailTop.vue +2 -2
- package/components/Dialog.vue +6 -5
- package/components/DisableAuthProviderModal.vue +14 -8
- package/components/DraggableZone.vue +2 -2
- package/components/EtcdInfoBanner.vue +5 -5
- package/components/ExplorerMembers.vue +3 -3
- package/components/ExplorerProjectsNamespaces.vue +31 -7
- package/components/FixedBanner.vue +48 -36
- package/components/GlobalRoleBindings.vue +26 -0
- package/components/GrafanaDashboard.vue +6 -4
- package/components/IconOrSvg.vue +1 -1
- package/components/Import.vue +10 -6
- package/components/Inactivity.vue +1 -5
- package/components/KeyValueView.vue +14 -10
- package/components/Markdown.vue +16 -12
- package/components/MessageLink.vue +2 -2
- package/components/ModalWithCard.vue +5 -8
- package/components/MoveModal.vue +35 -33
- package/components/PodSecurityAdmission.vue +3 -3
- package/components/PromptChangePassword.vue +33 -33
- package/components/PromptModal.vue +11 -21
- package/components/PromptRemove.vue +12 -17
- package/components/PromptRestore.vue +18 -16
- package/components/Questions/__tests__/Boolean.test.ts +9 -19
- package/components/Questions/__tests__/Float.test.ts +9 -19
- package/components/Questions/__tests__/Int.test.ts +9 -19
- package/components/Questions/__tests__/String.test.ts +9 -19
- package/components/Questions/__tests__/Yaml.test.ts +9 -20
- package/components/Questions/__tests__/utils/questions-defaults.ts +20 -0
- package/components/Questions/index.vue +19 -3
- package/components/ResourceCancelModal.vue +34 -29
- package/components/ResourceDetail/Masthead.vue +48 -16
- package/components/ResourceDetail/index.vue +6 -4
- package/components/ResourceList/Masthead.vue +10 -9
- package/components/ResourceList/index.vue +65 -14
- package/components/ResourceTable.vue +87 -21
- package/components/ResourceYaml.vue +35 -5
- package/components/SelectIconGrid.vue +3 -3
- package/components/SideNav.vue +50 -94
- package/components/SingleClusterInfo.vue +4 -4
- package/components/SortableTable/THead.vue +33 -21
- package/components/SortableTable/filtering.js +9 -1
- package/components/SortableTable/grouping.js +8 -1
- package/components/SortableTable/index.vue +143 -44
- package/components/SortableTable/paging.js +36 -7
- package/components/SortableTable/selection.js +2 -1
- package/components/SortableTable/sorting.js +24 -7
- package/components/StatusTable.vue +5 -1
- package/components/Tabbed/index.vue +18 -1
- package/components/TableDataUserIcon.vue +47 -0
- package/components/TypeDescription.vue +1 -0
- package/components/Wizard.vue +1 -0
- package/components/YamlEditor.vue +1 -0
- package/components/__tests__/AppModal.test.ts +98 -0
- package/components/__tests__/AsyncButton.test.ts +1 -3
- package/components/__tests__/BackLink.test.ts +1 -1
- package/components/__tests__/ButtonGroup.test.ts +3 -6
- package/components/__tests__/Carousel.test.ts +43 -0
- package/components/__tests__/Certificates.test.ts +29 -0
- package/components/__tests__/CodeMirror.test.ts +87 -0
- package/components/__tests__/CopyCode.test.ts +5 -4
- package/components/__tests__/CruResource.test.ts +10 -9
- package/components/__tests__/EtcdInfoBanner.test.ts +37 -0
- package/components/__tests__/FixedBanner.test.ts +5 -20
- package/components/__tests__/NamespaceFilter.test.ts +9 -18
- package/components/__tests__/TabTitle.test.ts +129 -0
- package/components/auth/AzureWarning.vue +2 -2
- package/components/auth/RoleDetailEdit.vue +10 -0
- package/components/auth/__tests__/RoleDetailEdit.test.ts +3 -2
- package/components/auth/login/oidc.vue +7 -1
- package/components/fleet/FleetBundles.vue +5 -11
- package/components/fleet/FleetClusters.vue +9 -9
- package/components/fleet/FleetIntro.vue +11 -17
- package/components/fleet/FleetNoWorkspaces.vue +2 -2
- package/components/fleet/FleetRepos.vue +63 -27
- package/components/fleet/FleetResources.vue +6 -1
- package/components/fleet/FleetStatus.vue +3 -3
- package/components/fleet/FleetSummary.vue +35 -30
- package/components/fleet/ForceDirectedTreeChart/index.vue +9 -3
- package/components/fleet/__tests__/FleetSummary.test.ts +316 -0
- package/components/form/ArrayList.vue +22 -18
- package/components/form/ArrayListSelect.vue +5 -0
- package/components/form/BannerSettings.vue +3 -0
- package/components/form/ClusterAppearance.vue +132 -0
- package/components/form/ColorInput.vue +1 -0
- package/components/form/Error.vue +3 -3
- package/components/form/FileSelector.vue +1 -0
- package/components/form/Footer.vue +2 -2
- package/components/form/GitPicker.vue +83 -38
- package/components/form/KeyValue.vue +70 -48
- package/components/form/LabeledSelect.vue +145 -41
- package/components/form/Labels.vue +3 -1
- package/components/form/NameNsDescription.vue +26 -9
- package/components/form/Password.vue +3 -1
- package/components/form/ResourceLabeledSelect.vue +187 -0
- package/components/form/ResourceTabs/index.vue +31 -15
- package/components/form/SecretSelector.vue +93 -18
- package/components/form/SelectOrCreateAuthSecret.vue +132 -59
- package/components/form/SimpleSecretSelector.vue +88 -28
- package/components/form/Taints.vue +13 -7
- package/components/form/__tests__/BannerSettings.test.ts +53 -0
- package/components/form/__tests__/KeyValue.test.ts +120 -11
- package/components/form/__tests__/LabeledSelect.test.ts +0 -18
- package/components/form/__tests__/{NameNsDescription.ts → NameNsDescription.test.ts} +25 -15
- package/components/form/__tests__/Taints.test.ts +70 -0
- package/components/form/labeled-select-utils/labeled-select-pagination.ts +151 -0
- package/components/form/labeled-select-utils/labeled-select.utils.ts +122 -0
- package/components/formatter/AppSummaryGraph.vue +2 -2
- package/components/formatter/Checked.vue +11 -3
- package/components/formatter/CloudCredPublicData.vue +30 -0
- package/components/formatter/ClusterLink.vue +2 -2
- package/components/formatter/ClusterProvider.vue +1 -18
- package/components/formatter/FleetClusterSummaryGraph.vue +27 -0
- package/components/formatter/FleetSummaryGraph.vue +25 -12
- package/components/formatter/ImagePercentageBar.vue +0 -4
- package/components/formatter/IngressTarget.vue +18 -7
- package/components/formatter/Link.vue +2 -2
- package/components/formatter/LinkDetail.vue +2 -2
- package/components/formatter/LinkDetailImage.vue +2 -2
- package/components/formatter/LinkName.vue +2 -2
- package/components/formatter/LiveDuration.vue +1 -1
- package/components/formatter/PercentageBar.vue +1 -1
- package/components/formatter/PrincipalGroupBindings.vue +2 -2
- package/components/formatter/SecretType.vue +2 -2
- package/components/formatter/VirtualServiceGateways.vue +2 -2
- package/components/formatter/WorkloadDetailEndpoints.vue +12 -22
- package/components/formatter/__tests__/Checked.test.ts +19 -0
- package/components/formatter/__tests__/LinkDetail.test.ts +5 -5
- package/components/formatter/__tests__/WorkloadDetailEndpoints.test.ts +81 -0
- package/components/nav/Group.vue +9 -7
- package/components/nav/Header.vue +85 -46
- package/components/nav/Jump.vue +19 -9
- package/components/nav/NamespaceFilter.vue +8 -1
- package/components/nav/TopLevelMenu.vue +392 -136
- package/components/nav/Type.vue +71 -106
- package/components/nav/WindowManager/ContainerLogs.vue +120 -19
- package/components/nav/WindowManager/ContainerShell.vue +6 -1
- package/components/nav/WindowManager/__tests__/ContainerLogs.test.ts +186 -0
- package/components/nav/WindowManager/index.vue +11 -10
- package/components/nav/__tests__/TopLevelMenu.test.ts +400 -6
- package/components/nav/__tests__/Type.test.ts +322 -97
- package/components/nuxt/nuxt-child.js +9 -78
- package/components/nuxt/nuxt-error.vue +1 -1
- package/components/nuxt/nuxt-link.client.js +13 -95
- package/{layouts → components/templates}/blank.vue +1 -1
- package/{layouts → components/templates}/default.vue +11 -101
- package/{layouts → components/templates}/error.vue +13 -26
- package/{layouts → components/templates}/home.vue +4 -1
- package/{layouts → components/templates}/plain.vue +4 -1
- package/{layouts → components/templates}/standalone.vue +1 -5
- package/{layouts → components/templates}/unauthenticated.vue +2 -3
- package/composables/useCompactInput.test.ts +36 -0
- package/composables/useCompactInput.ts +20 -0
- package/composables/useLabeledFormElement.test.ts +135 -0
- package/composables/useLabeledFormElement.ts +138 -0
- package/config/harvester-manager-types.js +2 -0
- package/config/home-links.js +2 -1
- package/config/labels-annotations.js +2 -1
- package/config/middleware.js +0 -6
- package/config/pagination-table-headers.js +57 -0
- package/config/pod-security-admission.ts +1 -1
- package/config/private-label.js +21 -1
- package/config/product/auth.js +1 -0
- package/config/product/explorer.js +166 -45
- package/config/product/fleet.js +6 -1
- package/config/product/legacy.js +2 -11
- package/config/product/manager.js +51 -25
- package/config/query-params.js +2 -0
- package/config/roles.ts +23 -0
- package/config/router/index.js +23 -0
- package/config/router/navigation-guards/attempt-first-login.js +73 -0
- package/config/router/navigation-guards/authentication.js +63 -0
- package/config/router/navigation-guards/i18n.js +13 -0
- package/config/router/navigation-guards/index.js +16 -0
- package/config/router/navigation-guards/load-initial-settings.js +15 -0
- package/config/router/routes.js +487 -0
- package/config/settings.ts +31 -2
- package/config/store.js +8 -4
- package/config/system-namespaces.js +3 -0
- package/config/table-headers.js +66 -1
- package/config/types.js +35 -20
- package/config/uiplugins.js +10 -5
- package/core/plugin-helpers.js +4 -6
- package/core/plugin-routes.ts +56 -114
- package/core/plugin.ts +18 -11
- package/core/plugins-loader.js +7 -9
- package/core/plugins.js +289 -285
- package/core/types-provisioning.ts +7 -0
- package/creators/app/app.package.json +2 -1
- package/creators/app/files/.eslintignore +0 -2
- package/creators/app/files/.gitlab-ci.yml +14 -0
- package/creators/app/files/.vscode/settings.json +0 -1
- package/creators/app/init +19 -0
- package/creators/pkg/files/.github/workflows/build-extension-catalog.yml +2 -6
- package/creators/pkg/files/.github/workflows/build-extension-charts.yml +2 -6
- package/creators/pkg/init +32 -0
- package/detail/__tests__/provisioning.cattle.io.cluster.test.ts +119 -0
- package/detail/__tests__/service.test.ts +62 -0
- package/detail/catalog.cattle.io.app.vue +1 -1
- package/detail/cis.cattle.io.clusterscan.vue +14 -3
- package/detail/fleet.cattle.io.bundle.vue +1 -1
- package/detail/fleet.cattle.io.cluster.vue +11 -1
- package/detail/fleet.cattle.io.gitrepo.vue +15 -9
- package/detail/namespace.vue +2 -2
- package/detail/networking.k8s.io.ingress.vue +52 -19
- package/detail/node.vue +22 -3
- package/detail/provisioning.cattle.io.cluster.vue +31 -13
- package/detail/service.vue +1 -1
- package/detail/workload/index.vue +1 -0
- package/dialog/AddCustomBadgeDialog.vue +318 -161
- package/dialog/DeactivateDriverDialog.vue +137 -0
- package/dialog/RollbackWorkloadDialog.vue +2 -2
- package/dialog/RotateCertificatesDialog.vue +0 -21
- package/dialog/ScaleMachineDownDialog.vue +34 -17
- package/directives/clean-html.js +15 -0
- package/directives/clean-tooltip.js +32 -0
- package/directives/focus.js +41 -0
- package/directives/int-number.js +21 -0
- package/directives/positive-int-number.js +19 -0
- package/directives/trim-whitespace.js +19 -0
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +3 -2
- package/edit/__tests__/kontainerDriver.test.ts +107 -0
- package/edit/__tests__/management.cattle.io.clusterroletemplatebinding.test.ts +12 -1
- package/edit/__tests__/management.cattle.io.setting.test.ts +2 -1
- package/edit/__tests__/monitoring.coreos.com.prometheusrule.test.ts +2 -3
- package/edit/__tests__/nodeDriver.test.ts +107 -0
- package/edit/__tests__/service.test.ts +85 -0
- package/edit/__tests__/ui.cattle.io.navlink.test.ts +3 -1
- package/edit/auth/AuthProviderWarningBanners.vue +34 -0
- package/edit/auth/__tests__/AuthProviderWarningBanners.test.ts +19 -0
- package/edit/auth/__tests__/azuread.test.ts +241 -0
- package/edit/auth/__tests__/oidc.test.ts +137 -0
- package/edit/auth/azuread.vue +133 -31
- package/edit/auth/github.vue +5 -17
- package/edit/auth/googleoauth.vue +6 -23
- package/edit/auth/ldap/index.vue +5 -17
- package/edit/auth/oidc.vue +143 -42
- package/edit/auth/saml.vue +5 -14
- package/edit/catalog.cattle.io.clusterrepo.vue +177 -9
- package/edit/cis.cattle.io.clusterscan.vue +5 -2
- package/edit/cis.cattle.io.clusterscanbenchmark.vue +41 -9
- package/edit/cloudcredential.vue +28 -4
- package/edit/configmap.vue +10 -4
- package/edit/fleet.cattle.io.gitrepo.vue +3 -1
- package/edit/helm.cattle.io.projecthelmchart.vue +29 -19
- package/edit/kontainerDriver.vue +65 -0
- package/edit/logging-flow/Match.vue +10 -9
- package/edit/logging-flow/index.vue +4 -19
- package/edit/logging.banzaicloud.io.output/__tests__/logging.banzaicloud.io.output.test.ts +232 -2
- package/edit/logging.banzaicloud.io.output/index.vue +43 -26
- package/edit/management.cattle.io.podsecurityadmissionconfigurationtemplate.vue +3 -3
- package/edit/management.cattle.io.project.vue +3 -53
- package/edit/management.cattle.io.setting.vue +52 -2
- package/edit/management.cattle.io.user.vue +2 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +10 -7
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +21 -16
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/opsgenie.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/pagerduty.vue +2 -2
- package/edit/monitoring.coreos.com.alertmanagerconfig/types/slack.vue +1 -1
- package/edit/monitoring.coreos.com.prometheusrule/AlertingRule.vue +15 -3
- package/edit/monitoring.coreos.com.prometheusrule/GroupRules.vue +4 -1
- package/edit/monitoring.coreos.com.prometheusrule/RecordingRule.vue +2 -0
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +2 -0
- package/edit/networking.k8s.io.ingress/Rules.vue +8 -3
- package/edit/networking.k8s.io.ingress/index.vue +64 -8
- package/edit/networking.k8s.io.networkpolicy/PolicyRule.vue +1 -0
- package/edit/networking.k8s.io.networkpolicy/PolicyRuleTarget.vue +6 -2
- package/edit/networking.k8s.io.networkpolicy/__tests__/{PolicyRuleTarget.spec.ts → PolicyRuleTarget.test.ts} +46 -7
- package/edit/networking.k8s.io.networkpolicy/__tests__/utils/{selectors.ts → selectors.test.ts} +1 -1
- package/edit/networking.k8s.io.networkpolicy/index.vue +2 -0
- package/edit/nodeDriver.vue +65 -0
- package/edit/persistentvolume/index.vue +2 -2
- package/edit/provisioning.cattle.io.cluster/SelectCredential.vue +33 -16
- package/edit/provisioning.cattle.io.cluster/__tests__/Advanced.test.ts +276 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.test.ts +473 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/{CustomCommand.tests.ts → CustomCommand.test.ts} +3 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/DirectoryConfig.test.ts +228 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/DrainOptions.test.ts +1 -1
- package/edit/provisioning.cattle.io.cluster/__tests__/index.test.ts +73 -0
- package/edit/provisioning.cattle.io.cluster/__tests__/rke2.test.ts +77 -13
- package/edit/provisioning.cattle.io.cluster/__tests__/utils/cluster.ts +391 -0
- package/edit/provisioning.cattle.io.cluster/import.vue +4 -4
- package/edit/provisioning.cattle.io.cluster/index.vue +126 -51
- package/edit/provisioning.cattle.io.cluster/rke2.vue +325 -791
- package/edit/provisioning.cattle.io.cluster/tabs/AddOnConfig.vue +137 -0
- package/edit/provisioning.cattle.io.cluster/tabs/Advanced.vue +217 -0
- package/edit/provisioning.cattle.io.cluster/{Basics.vue → tabs/Basics.vue} +123 -129
- package/edit/provisioning.cattle.io.cluster/tabs/DirectoryConfig.vue +132 -0
- package/edit/provisioning.cattle.io.cluster/{MachinePool.vue → tabs/MachinePool.vue} +1 -0
- package/edit/provisioning.cattle.io.cluster/{S3Config.vue → tabs/etcd/S3Config.vue} +1 -0
- package/edit/provisioning.cattle.io.cluster/tabs/etcd/index.vue +135 -0
- package/edit/provisioning.cattle.io.cluster/tabs/networking/index.vue +190 -0
- package/edit/provisioning.cattle.io.cluster/{RegistryConfigs.vue → tabs/registries/RegistryConfigs.vue} +3 -0
- package/edit/provisioning.cattle.io.cluster/tabs/registries/index.vue +148 -0
- package/edit/provisioning.cattle.io.cluster/tabs/upgrade/index.vue +76 -0
- package/edit/resources.cattle.io.backup.vue +139 -124
- package/edit/resources.cattle.io.restore.vue +146 -126
- package/edit/service.vue +13 -0
- package/edit/serviceaccount.vue +46 -4
- package/edit/token.vue +3 -1
- package/edit/workload/Upgrading.vue +3 -2
- package/edit/workload/__tests__/Job.test.ts +1 -3
- package/edit/workload/__tests__/Upgrading.test.ts +2 -2
- package/edit/workload/index.vue +2 -1
- package/edit/workload/mixins/workload.js +35 -2
- package/edit/workload/storage/emptyDir.vue +2 -2
- package/initialize/App.vue +75 -0
- package/initialize/app-extended.js +128 -0
- package/initialize/entry-helpers.js +546 -0
- package/initialize/entry.js +32 -0
- package/initialize/install-components.js +23 -0
- package/initialize/install-directives.js +59 -0
- package/initialize/install-plugins.js +123 -0
- package/list/__tests__/workload.test.ts +1 -1
- package/list/catalog.cattle.io.app.vue +1 -0
- package/list/cis.cattle.io.clusterscan.vue +16 -10
- package/list/group.principal.vue +2 -2
- package/list/management.cattle.io.feature.vue +16 -16
- package/list/management.cattle.io.setting.vue +1 -0
- package/list/management.cattle.io.user.vue +13 -4
- package/list/networking.k8s.io.ingress.vue +36 -0
- package/list/node.vue +212 -73
- package/list/provisioning.cattle.io.cluster.vue +17 -4
- package/list/ui.cattle.io.navlink.vue +2 -2
- package/list/workload.vue +22 -0
- package/machine-config/__tests__/vmwarevsphere-pool-config-merge.test.ts +30 -0
- package/machine-config/__tests__/vmwarevsphere.test.ts +1 -3
- package/machine-config/amazonec2.vue +1 -1
- package/machine-config/azure.vue +2 -1
- package/machine-config/generic.vue +11 -15
- package/machine-config/vmwarevsphere-pool-config-merge.ts +25 -0
- package/machine-config/vmwarevsphere.vue +31 -27
- package/middleware/authenticated.js +23 -399
- package/mixins/__tests__/chart.test.ts +48 -6
- package/mixins/__tests__/create-edit-view.test.ts +2 -3
- package/mixins/auth-config.js +5 -9
- package/mixins/brand.js +102 -96
- package/mixins/chart.js +27 -13
- package/mixins/create-edit-view/index.js +2 -2
- package/mixins/fetch.client.js +42 -48
- package/mixins/labeled-form-element.ts +27 -2
- package/mixins/page-actions.js +7 -5
- package/mixins/resource-fetch-api-pagination.js +304 -0
- package/mixins/resource-fetch-namespaced.js +1 -1
- package/mixins/resource-fetch.js +46 -5
- package/models/__tests__/cluster.test.ts +44 -0
- package/models/__tests__/fleet.cattle.io.cluster.test.ts +36 -0
- package/models/__tests__/management.cattle.io.cluster.test.ts +23 -0
- package/models/__tests__/management.cattle.io.node.ts +85 -0
- package/models/__tests__/management.cattle.io.nodepool.ts +83 -0
- package/models/__tests__/namespace.test.ts +49 -9
- package/models/__tests__/provisioning.cattle.io.cluster.test.ts +241 -0
- package/models/__tests__/schema.tests.ts +24 -0
- package/models/__tests__/secret.test.ts +37 -0
- package/models/__tests__/steve-schema.test.ts +73 -0
- package/models/__tests__/storage.k8s.io.storageclass.test.ts +22 -0
- package/models/__tests__/workload.test.ts +91 -0
- package/models/catalog.cattle.io.app.js +8 -0
- package/models/catalog.cattle.io.clusterrepo.js +9 -1
- package/models/catalog.cattle.io.uiplugin.js +7 -8
- package/models/cis.cattle.io.clusterscan.js +29 -8
- package/models/cloudcredential.js +9 -1
- package/models/cluster/node.js +8 -4
- package/models/cluster/schema.js +6 -0
- package/models/cluster.js +33 -0
- package/models/cluster.x-k8s.io.machine.js +1 -1
- package/models/cluster.x-k8s.io.machinedeployment.js +14 -0
- package/models/driver.js +63 -0
- package/models/fleet.cattle.io.cluster.js +27 -11
- package/models/fleet.cattle.io.gitrepo.js +66 -13
- package/models/helm.cattle.io.projecthelmchart.js +1 -1
- package/models/kontainerdriver.js +85 -0
- package/models/management/schema.js +6 -0
- package/models/management.cattle.io.authconfig.js +3 -2
- package/models/management.cattle.io.cluster.js +16 -7
- package/models/management.cattle.io.globalrole.js +2 -0
- package/models/management.cattle.io.kontainerdriver.js +1 -0
- package/models/management.cattle.io.node.js +18 -14
- package/models/management.cattle.io.nodepool.js +17 -0
- package/models/management.cattle.io.project.js +0 -36
- package/models/management.cattle.io.setting.js +11 -7
- package/models/management.cattle.io.user.js +2 -2
- package/models/monitoring.coreos.com.receiver.js +3 -1
- package/models/monitoring.coreos.com.route.js +1 -1
- package/models/namespace.js +1 -1
- package/models/networking.k8s.io.ingress.js +2 -1
- package/models/nodedriver.js +85 -0
- package/models/pod.js +20 -0
- package/models/provisioning.cattle.io.cluster.js +125 -10
- package/models/schema.js +28 -7
- package/models/secret.js +126 -18
- package/models/service.js +2 -0
- package/models/steve-schema.ts +254 -0
- package/models/storage.k8s.io.storageclass.js +1 -1
- package/models/workload.js +17 -0
- package/models/workload.service.js +18 -0
- package/package.json +18 -14
- package/pages/about.vue +12 -6
- package/pages/account/create-key.vue +0 -1
- package/pages/account/index.vue +7 -3
- package/pages/auth/login.vue +106 -103
- package/pages/auth/logout.vue +2 -4
- package/pages/auth/setup.vue +92 -66
- package/pages/auth/verify.vue +30 -24
- package/pages/c/_cluster/apps/charts/__tests__/install.helper.test.ts +2 -17
- package/pages/c/_cluster/apps/charts/chart.vue +54 -9
- package/pages/c/_cluster/apps/charts/index.vue +99 -69
- package/pages/c/_cluster/apps/charts/install.helpers.js +2 -13
- package/pages/c/_cluster/apps/charts/install.vue +12 -11
- package/pages/c/_cluster/auth/config/_id.vue +0 -6
- package/pages/c/_cluster/auth/config/index.vue +15 -9
- package/pages/c/_cluster/auth/roles/index.vue +8 -10
- package/pages/c/_cluster/ecm/index.vue +0 -2
- package/pages/c/_cluster/explorer/ConfigBadge.vue +13 -8
- package/pages/c/_cluster/explorer/EventsTable.vue +18 -0
- package/pages/c/_cluster/explorer/__tests__/index.test.ts +181 -0
- package/pages/c/_cluster/explorer/index.vue +253 -91
- package/pages/c/_cluster/explorer/tools/__tests__/index.test.ts +69 -0
- package/pages/c/_cluster/explorer/tools/index.vue +10 -6
- package/pages/c/_cluster/fleet/index.vue +89 -94
- package/pages/c/_cluster/longhorn/__tests__/longhorn.index.test.ts +89 -0
- package/pages/c/_cluster/longhorn/index.vue +52 -17
- package/pages/c/_cluster/manager/cloudCredential/index.vue +18 -25
- package/pages/c/_cluster/manager/drivers/kontainerDriver/_id.vue +12 -0
- package/pages/c/_cluster/manager/drivers/kontainerDriver/create.vue +15 -0
- package/pages/c/_cluster/manager/drivers/kontainerDriver/index.vue +91 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/_id.vue +12 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/create.vue +15 -0
- package/pages/c/_cluster/manager/drivers/nodeDriver/index.vue +60 -0
- package/pages/c/_cluster/manager/jwt.authentication/index.vue +235 -0
- package/pages/c/_cluster/manager/pages/_page.vue +4 -5
- package/pages/c/_cluster/monitoring/alertmanagerconfig/_alertmanagerconfigid/receiver.vue +4 -0
- package/pages/c/_cluster/monitoring/route-receiver/index.vue +2 -2
- package/pages/c/_cluster/neuvector/index.vue +1 -0
- package/pages/c/_cluster/settings/DefaultLinksEditor.vue +1 -0
- package/pages/c/_cluster/settings/banners.vue +86 -10
- package/pages/c/_cluster/settings/brand.vue +261 -38
- package/pages/c/_cluster/settings/index.vue +4 -6
- package/pages/c/_cluster/settings/links.vue +3 -2
- package/pages/c/_cluster/settings/performance.vue +71 -3
- package/pages/c/_cluster/uiplugins/AddExtensionRepos.vue +5 -2
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogLoadDialog.vue +12 -8
- package/pages/c/_cluster/uiplugins/CatalogList/CatalogUninstallDialog.vue +9 -6
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +10 -46
- package/pages/c/_cluster/uiplugins/DeveloperInstallDialog.vue +11 -5
- package/pages/c/_cluster/uiplugins/InstallDialog.vue +55 -19
- package/pages/c/_cluster/uiplugins/SetupUIPlugins.vue +36 -301
- package/pages/c/_cluster/uiplugins/UninstallDialog.vue +14 -6
- package/pages/c/_cluster/uiplugins/__tests__/SetupUIPlugins.test.ts +52 -106
- package/pages/c/_cluster/uiplugins/index.vue +38 -54
- package/pages/diagnostic.vue +2 -2
- package/pages/fail-whale.vue +103 -42
- package/pages/home.vue +81 -24
- package/pages/prefs.vue +8 -4
- package/pages/support/index.vue +14 -10
- package/pkg/auto-import.js +1 -1
- package/plugins/axios.js +0 -36
- package/plugins/back-button.js +3 -5
- package/plugins/clean-html-directive.js +5 -30
- package/plugins/clean-html.js +53 -0
- package/plugins/clean-tooltip-directive.js +6 -31
- package/plugins/codemirror-loader.js +1 -1
- package/plugins/codemirror.js +41 -9
- package/plugins/dashboard-store/__tests__/mutations.test.ts +389 -0
- package/plugins/dashboard-store/__tests__/resource-class.test.ts +49 -0
- package/plugins/dashboard-store/__tests__/utils/store-mocks.ts +7 -0
- package/plugins/dashboard-store/actions.js +132 -25
- package/plugins/dashboard-store/classify.js +1 -18
- package/plugins/dashboard-store/getters.js +154 -44
- package/plugins/dashboard-store/index.js +0 -111
- package/plugins/dashboard-store/mutations.js +150 -52
- package/plugins/dashboard-store/resource-class.js +77 -127
- package/plugins/directives.js +6 -39
- package/plugins/ember-cookie.js +13 -0
- package/plugins/global-formatters.js +26 -5
- package/plugins/i18n.js +89 -55
- package/plugins/int-number.js +6 -20
- package/plugins/plugin.js +3 -3
- package/plugins/positive-int-number.js +6 -17
- package/plugins/steve/__tests__/{getters.spec.ts → getters.test.ts} +81 -10
- package/plugins/steve/__tests__/mutations.test.ts +49 -0
- package/plugins/steve/__tests__/resource-utils.test.ts +159 -0
- package/plugins/steve/__tests__/steve-class.test.ts +59 -0
- package/plugins/steve/__tests__/subscribe.spec.ts +4 -1
- package/plugins/steve/__tests__/utils/mutation.test.helpers.ts +105 -0
- package/plugins/steve/__tests__/utils/steve-mocks.ts +31 -0
- package/plugins/steve/accept-or-reject-socket-message.ts +103 -0
- package/plugins/steve/actions.js +3 -38
- package/plugins/steve/getters.js +164 -61
- package/plugins/steve/hybrid-class.js +5 -1
- package/plugins/steve/mutations.js +24 -3
- package/plugins/steve/norman-class.js +142 -2
- package/{utils → plugins/steve}/projectAndNamespaceFiltering.utils.ts +28 -10
- package/plugins/steve/resource-utils.ts +38 -0
- package/plugins/steve/schema.d.ts +22 -0
- package/plugins/steve/steve-class.js +22 -0
- package/plugins/steve/steve-pagination-utils.ts +368 -0
- package/plugins/steve/subscribe.js +17 -76
- package/plugins/trim-whitespace.js +6 -34
- package/plugins/vue-js-modal.js +1 -1
- package/promptRemove/pod.vue +15 -7
- package/public/index.html +1 -0
- package/rancher-components/Accordion/Accordion.test.ts +45 -0
- package/rancher-components/Accordion/Accordion.vue +86 -0
- package/rancher-components/Accordion/index.ts +1 -0
- package/rancher-components/BadgeState/BadgeState.vue +3 -3
- package/rancher-components/Banner/Banner.test.ts +1 -5
- package/rancher-components/Banner/Banner.vue +2 -2
- package/rancher-components/Card/Card.vue +4 -4
- package/rancher-components/Form/Checkbox/Checkbox.vue +4 -3
- package/rancher-components/Form/LabeledInput/LabeledInput.test.ts +18 -1
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +57 -24
- package/rancher-components/Form/Radio/RadioButton.test.ts +1 -3
- package/rancher-components/Form/Radio/RadioButton.vue +13 -7
- package/rancher-components/Form/Radio/RadioGroup.vue +4 -3
- package/rancher-components/Form/TextArea/TextAreaAutoGrow.vue +6 -4
- package/rancher-components/Form/ToggleSwitch/ToggleSwitch.vue +7 -4
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +9 -4
- package/rancher-components/StringList/StringList.test.ts +270 -0
- package/rancher-components/StringList/StringList.vue +65 -26
- package/scripts/.gitlab/workflows/build-extension-catalog.gitlab-ci.yml +69 -0
- package/scripts/clean +1 -1
- package/scripts/extension/bundle +19 -7
- package/scripts/extension/helm/charts/ui-plugin-server/templates/_helpers.tpl +11 -0
- package/scripts/extension/helm/charts/ui-plugin-server/templates/cr.yaml +2 -0
- package/scripts/extension/helm/charts/ui-plugin-server/values.yaml +2 -0
- package/scripts/extension/helm/package/Dockerfile +1 -1
- package/scripts/extension/helm/scripts/package +11 -3
- package/scripts/extension/helm/scripts/patch +27 -0
- package/scripts/extension/parse-tag-name +4 -4
- package/scripts/extension/publish +25 -14
- package/scripts/publish-shell.sh +11 -1
- package/scripts/serve-pkgs +0 -2
- package/scripts/test-plugins-build.sh +87 -11
- package/scripts/vue-migrate.js +683 -0
- package/server/har-file.js +183 -0
- package/store/__tests__/catalog.test.ts +224 -0
- package/store/__tests__/type-map.test.ts +1122 -0
- package/store/auth.js +23 -4
- package/store/aws.js +53 -6
- package/store/catalog.js +22 -6
- package/store/cru-resource.ts +26 -0
- package/store/customisation.js +35 -0
- package/store/features.js +7 -4
- package/store/i18n.js +11 -0
- package/store/index.js +140 -49
- package/store/plugins.js +8 -4
- package/store/prefs.js +33 -38
- package/store/type-map.js +288 -213
- package/store/type-map.utils.ts +226 -0
- package/tsconfig.json +34 -9
- package/tsconfig.paths.json +21 -0
- package/types/components/labeledSelect.ts +50 -0
- package/types/resources/settings.d.ts +32 -0
- package/types/{userPreferences.d.ts → resources/userPreferences.d.ts} +0 -1
- package/types/shell/index.d.ts +1045 -770
- package/types/store/dashboard-store.types.ts +42 -0
- package/types/store/pagination.types.ts +457 -0
- package/types/store/type-map.ts +30 -0
- package/types/store/vuex.d.ts +9 -0
- package/types/vue-shim.d.ts +51 -0
- package/utils/__tests__/cluster.test.ts +20 -18
- package/utils/__tests__/create-yaml.test.ts +359 -2
- package/utils/__tests__/kontainer.test.ts +180 -0
- package/utils/__tests__/pod-security-admission.test.ts +1 -1
- package/utils/alertmanagerconfig.js +19 -0
- package/utils/array.ts +40 -1
- package/utils/async.ts +2 -0
- package/utils/auth.js +152 -4
- package/utils/axios.js +2 -21
- package/utils/azure.js +24 -0
- package/utils/banners.js +103 -0
- package/utils/clipboard.js +5 -0
- package/utils/cluster.js +1 -1
- package/utils/config.js +4 -0
- package/utils/create-yaml.js +59 -28
- package/utils/custom-validators.js +0 -2
- package/utils/error.js +41 -1
- package/utils/formatter.js +5 -3
- package/utils/git.ts +1 -1
- package/utils/install-redirect.js +1 -1
- package/utils/kontainer.ts +190 -0
- package/utils/object.js +24 -0
- package/utils/pagination-utils.ts +154 -0
- package/utils/pod-security-admission.ts +1 -1
- package/utils/router.js +86 -0
- package/utils/settings.ts +46 -0
- package/utils/time.js +2 -1
- package/utils/unit-tests/ChildRenderingRouterLinkStub.ts +36 -0
- package/utils/url.ts +1 -1
- package/utils/validators/formRules/__tests__/index.test.ts +70 -4
- package/utils/validators/formRules/index.ts +15 -9
- package/utils/validators/index.js +1 -0
- package/utils/validators/setting.js +6 -10
- package/utils/version.js +2 -1
- package/vue.config.js +377 -401
- package/.DS_Store +0 -0
- package/assets/images/providers/aks-black.svg +0 -28
- package/assets/images/providers/aks.svg +0 -31
- package/assets/styles/vendor/vue-js-modal.scss +0 -16
- package/components/ChartPsp.vue +0 -76
- package/components/EventsTable.vue +0 -67
- package/components/TabbedLinks/index.vue +0 -94
- package/components/__tests__/ChartPsp.test.ts +0 -75
- package/components/formatter/__tests__/ClusterProvider.test.ts +0 -28
- package/components/nuxt/nuxt-link.server.js +0 -16
- package/components/nuxt/nuxt.js +0 -101
- package/config/router.js +0 -408
- package/edit/provisioning.cattle.io.cluster/__tests__/Basics.tests.ts +0 -237
- package/initialize/App.js +0 -198
- package/initialize/client.js +0 -875
- package/initialize/index.js +0 -364
- package/initialize/layouts.ts +0 -26
- package/middleware/i18n.js +0 -10
- package/middleware/unauthenticated.js +0 -22
- package/mixins/fetch.server.js +0 -73
- package/pages/c/_cluster/apps/index.vue +0 -17
- package/pages/c/_cluster/auth/index.vue +0 -19
- package/pages/c/_cluster/index.vue +0 -17
- package/pages/c/_cluster/legacy/index.vue +0 -22
- package/pages/c/_cluster/manager/index.vue +0 -22
- package/pages/c/_cluster/mcapps/index.vue +0 -21
- package/pages/c/_cluster/uiplugins/RemoveUIPlugins.vue +0 -232
- package/pages/c/index.vue +0 -9
- package/pages/rio/mesh.vue +0 -508
- package/plugins/dashboard-store/__tests__/mutations.spec.ts +0 -406
- package/plugins/dashboard-store/rehydrate-all.js +0 -44
- package/plugins/portal-vue.js +0 -4
- package/plugins/portal.js +0 -4
- package/plugins/resize.js +0 -5
- package/plugins/shortkey.js +0 -4
- package/plugins/tooltip.js +0 -4
- package/plugins/transitions.js +0 -4
- package/plugins/v-select.js +0 -4
- package/plugins/vue-clipboard2.js +0 -4
- package/tsconfig.default.json +0 -46
- package/utils/group.js +0 -70
- package/utils/nuxt.js +0 -659
- package/utils/router.scrollBehavior.js +0 -80
- /package/components/__tests__/{Collapse.spec.ts → Collapse.test.ts} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{AgentConfiguration.vue → tabs/AgentConfiguration.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{MemberRoles.vue → tabs/MemberRoles.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{ACE.vue → tabs/networking/ACE.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{RegistryMirrors.vue → tabs/registries/RegistryMirrors.vue} +0 -0
- /package/edit/provisioning.cattle.io.cluster/{DrainOptions.vue → tabs/upgrade/DrainOptions.vue} +0 -0
- /package/models/__tests__/{node.ts → node.test.ts} +0 -0
- /package/plugins/dashboard-store/__tests__/{actions.spec.ts → actions.test.ts} +0 -0
- /package/plugins/dashboard-store/__tests__/{getters.spec.ts → getters.test.ts} +0 -0
- /package/plugins/steve/__tests__/{header-warnings.spec.ts → header-warnings.test.ts} +0 -0
- /package/rancher-components/BadgeState/{BadgeState.spec.ts → BadgeState.test.ts} +0 -0
- /package/types/{pod-security-admission.ts → resources/pod-security-admission.ts} +0 -0
package/config/table-headers.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { CATTLE_PUBLIC_ENDPOINTS } from '@shell/config/labels-annotations';
|
|
2
2
|
import { NODE as NODE_TYPE } from '@shell/config/types';
|
|
3
|
-
import { COLUMN_BREAKPOINTS } from '@shell/
|
|
3
|
+
import { COLUMN_BREAKPOINTS } from '@shell/types/store/type-map';
|
|
4
4
|
|
|
5
5
|
// Note: 'id' is always the last sort, so you don't have to specify it here.
|
|
6
6
|
|
|
@@ -15,6 +15,17 @@ export const STATE = {
|
|
|
15
15
|
formatter: 'BadgeStateFormatter',
|
|
16
16
|
};
|
|
17
17
|
|
|
18
|
+
export const USER_STATE = {
|
|
19
|
+
name: 'user-state',
|
|
20
|
+
labelKey: 'tableHeaders.userState',
|
|
21
|
+
sort: ['stateSort', 'nameSort'],
|
|
22
|
+
value: 'stateDisplay',
|
|
23
|
+
getValue: (row) => row.stateDisplay,
|
|
24
|
+
width: 72,
|
|
25
|
+
default: 'unknown',
|
|
26
|
+
formatter: 'BadgeStateFormatter',
|
|
27
|
+
};
|
|
28
|
+
|
|
18
29
|
export const DOWNLOAD = {
|
|
19
30
|
name: 'download',
|
|
20
31
|
labelKey: 'tableHeaders.download',
|
|
@@ -361,6 +372,13 @@ export const KEYS = {
|
|
|
361
372
|
value: 'keysDisplay',
|
|
362
373
|
};
|
|
363
374
|
|
|
375
|
+
export const SECRET_DATA = {
|
|
376
|
+
name: 'data',
|
|
377
|
+
labelKey: 'tableHeaders.data',
|
|
378
|
+
value: 'dataPreview',
|
|
379
|
+
formatter: 'SecretData'
|
|
380
|
+
};
|
|
381
|
+
|
|
364
382
|
export const TARGET_KIND = {
|
|
365
383
|
name: 'target-kind',
|
|
366
384
|
labelKey: 'tableHeaders.targetKind',
|
|
@@ -733,6 +751,29 @@ export const FLEET_SUMMARY = {
|
|
|
733
751
|
width: 100,
|
|
734
752
|
};
|
|
735
753
|
|
|
754
|
+
export const FLEET_REPO_CLUSTER_SUMMARY = {
|
|
755
|
+
name: 'clusterSummary',
|
|
756
|
+
labelKey: 'tableHeaders.clusterResources',
|
|
757
|
+
value: 'status.resourceCounts',
|
|
758
|
+
sort: false,
|
|
759
|
+
search: false,
|
|
760
|
+
formatter: 'FleetClusterSummaryGraph',
|
|
761
|
+
align: 'center',
|
|
762
|
+
width: 100,
|
|
763
|
+
};
|
|
764
|
+
|
|
765
|
+
export const FLEET_REPO_PER_CLUSTER_STATE = {
|
|
766
|
+
name: 'perClusterState',
|
|
767
|
+
labelKey: 'tableHeaders.repoPerClusterState',
|
|
768
|
+
tooltip: 'tableHeaders.repoPerClusterStateTooltip',
|
|
769
|
+
sort: ['stateSort', 'nameSort'],
|
|
770
|
+
width: 100,
|
|
771
|
+
default: 'unknown',
|
|
772
|
+
formatter: 'BadgeStateFormatter',
|
|
773
|
+
formatterOpts: { arbitrary: true }
|
|
774
|
+
|
|
775
|
+
};
|
|
776
|
+
|
|
736
777
|
export const APP_SUMMARY = {
|
|
737
778
|
name: 'summary',
|
|
738
779
|
labelKey: 'tableHeaders.resources',
|
|
@@ -998,6 +1039,30 @@ export const FLEET_BUNDLE_TYPE = {
|
|
|
998
1039
|
width: 100,
|
|
999
1040
|
};
|
|
1000
1041
|
|
|
1042
|
+
export const FLEET_REPO_CLUSTERS_READY = {
|
|
1043
|
+
name: 'clustersReady',
|
|
1044
|
+
labelKey: 'tableHeaders.clustersReady',
|
|
1045
|
+
value: 'status.readyClusters',
|
|
1046
|
+
sort: 'status.readyClusters',
|
|
1047
|
+
search: false,
|
|
1048
|
+
};
|
|
1049
|
+
|
|
1050
|
+
export const FLEET_REPO_TARGET = {
|
|
1051
|
+
name: 'target',
|
|
1052
|
+
labelKey: 'tableHeaders.target',
|
|
1053
|
+
value: 'targetInfo.modeDisplay',
|
|
1054
|
+
sort: ['targetInfo.modeDisplay', 'targetInfo.cluster', 'targetInfo.clusterGroup'],
|
|
1055
|
+
|
|
1056
|
+
};
|
|
1057
|
+
|
|
1058
|
+
export const FLEET_REPO = {
|
|
1059
|
+
name: 'repo',
|
|
1060
|
+
labelKey: 'tableHeaders.repo',
|
|
1061
|
+
value: 'repoDisplay',
|
|
1062
|
+
sort: 'repoDisplay',
|
|
1063
|
+
search: ['spec.repo', 'status.commit'],
|
|
1064
|
+
};
|
|
1065
|
+
|
|
1001
1066
|
export const UI_PLUGIN_CATALOG = [
|
|
1002
1067
|
{
|
|
1003
1068
|
name: 'state',
|
package/config/types.js
CHANGED
|
@@ -4,7 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
// Steve-specific virtual types
|
|
6
6
|
// Base: /v1
|
|
7
|
-
export const STEVE = {
|
|
7
|
+
export const STEVE = {
|
|
8
|
+
PREFERENCE: 'userpreference',
|
|
9
|
+
SCHEMA_DEFINITION: 'schemaDefinition'
|
|
10
|
+
};
|
|
8
11
|
|
|
9
12
|
// Old APIs via Norman
|
|
10
13
|
// Base: /v3
|
|
@@ -14,7 +17,7 @@ export const NORMAN = {
|
|
|
14
17
|
ETCD_BACKUP: 'etcdbackup',
|
|
15
18
|
CLUSTER: 'cluster',
|
|
16
19
|
CLUSTER_TOKEN: 'clusterregistrationtoken',
|
|
17
|
-
CLUSTER_ROLE_TEMPLATE_BINDING: '
|
|
20
|
+
CLUSTER_ROLE_TEMPLATE_BINDING: 'clusterroletemplatebinding',
|
|
18
21
|
CLOUD_CREDENTIAL: 'cloudcredential',
|
|
19
22
|
FLEET_WORKSPACES: 'fleetworkspace',
|
|
20
23
|
GLOBAL_ROLE: 'globalRole',
|
|
@@ -26,10 +29,13 @@ export const NORMAN = {
|
|
|
26
29
|
PRINCIPAL: 'principal',
|
|
27
30
|
PROJECT: 'project',
|
|
28
31
|
PROJECT_ROLE_TEMPLATE_BINDING: 'projectroletemplatebinding',
|
|
32
|
+
SETTING: 'setting',
|
|
29
33
|
SPOOFED: { GROUP_PRINCIPAL: 'group.principal' },
|
|
30
34
|
ROLE_TEMPLATE: 'roleTemplate',
|
|
31
35
|
TOKEN: 'token',
|
|
32
36
|
USER: 'user',
|
|
37
|
+
KONTAINER_DRIVER: 'kontainerDriver',
|
|
38
|
+
NODE_DRIVER: 'nodeDriver'
|
|
33
39
|
};
|
|
34
40
|
|
|
35
41
|
// Public (via Norman)
|
|
@@ -53,8 +59,6 @@ export const NODE = 'node';
|
|
|
53
59
|
export const NETWORK_POLICY = 'networking.k8s.io.networkpolicy';
|
|
54
60
|
export const POD = 'pod';
|
|
55
61
|
export const POD_DISRUPTION_BUDGET = 'policy.poddisruptionbudget';
|
|
56
|
-
export const PSP = 'policy.podsecuritypolicy';
|
|
57
|
-
export const PSPS = 'policy.podsecuritypolicies';
|
|
58
62
|
export const PV = 'persistentvolume';
|
|
59
63
|
export const PVC = 'persistentvolumeclaim';
|
|
60
64
|
export const RESOURCE_QUOTA = 'resourcequota';
|
|
@@ -126,19 +130,17 @@ export const MONITORING = {
|
|
|
126
130
|
SERVICEMONITOR: 'monitoring.coreos.com.servicemonitor',
|
|
127
131
|
THANOSRULER: 'monitoring.coreos.com.thanosruler',
|
|
128
132
|
SPOOFED: {
|
|
129
|
-
RECEIVER:
|
|
130
|
-
RECEIVER_SPEC:
|
|
131
|
-
RECEIVER_EMAIL:
|
|
132
|
-
RECEIVER_SLACK:
|
|
133
|
-
RECEIVER_WEBHOOK:
|
|
134
|
-
RECEIVER_PAGERDUTY:
|
|
135
|
-
RECEIVER_OPSGENIE:
|
|
136
|
-
RECEIVER_HTTP_CONFIG:
|
|
137
|
-
RESPONDER:
|
|
138
|
-
ROUTE:
|
|
139
|
-
ROUTE_SPEC:
|
|
140
|
-
ALERTMANAGERCONFIG_RECEIVER_SPEC: 'monitoring.coreos.com.v1alpha1.alertmanagerconfig.spec.receivers',
|
|
141
|
-
ALERTMANAGERCONFIG_ROUTE_SPEC: 'monitoring.coreos.com.v1alpha1.alertmanagerconfig.spec.route'
|
|
133
|
+
RECEIVER: 'monitoring.coreos.com.receiver',
|
|
134
|
+
RECEIVER_SPEC: 'monitoring.coreos.com.receiver.spec',
|
|
135
|
+
RECEIVER_EMAIL: 'monitoring.coreos.com.receiver.email',
|
|
136
|
+
RECEIVER_SLACK: 'monitoring.coreos.com.receiver.slack',
|
|
137
|
+
RECEIVER_WEBHOOK: 'monitoring.coreos.com.receiver.webhook',
|
|
138
|
+
RECEIVER_PAGERDUTY: 'monitoring.coreos.com.receiver.pagerduty',
|
|
139
|
+
RECEIVER_OPSGENIE: 'monitoring.coreos.com.receiver.opsgenie',
|
|
140
|
+
RECEIVER_HTTP_CONFIG: 'monitoring.coreos.com.receiver.httpconfig',
|
|
141
|
+
RESPONDER: 'monitoring.coreos.com.receiver.responder',
|
|
142
|
+
ROUTE: 'monitoring.coreos.com.route',
|
|
143
|
+
ROUTE_SPEC: 'monitoring.coreos.com.route.spec',
|
|
142
144
|
}
|
|
143
145
|
};
|
|
144
146
|
|
|
@@ -183,14 +185,13 @@ export const MANAGEMENT = {
|
|
|
183
185
|
TOKEN: 'management.cattle.io.token',
|
|
184
186
|
GLOBAL_ROLE: 'management.cattle.io.globalrole',
|
|
185
187
|
GLOBAL_ROLE_BINDING: 'management.cattle.io.globalrolebinding',
|
|
186
|
-
POD_SECURITY_POLICY_TEMPLATE: 'management.cattle.io.podsecuritypolicytemplate',
|
|
187
|
-
PSP_TEMPLATE_BINDING: 'management.cattle.io.podsecuritypolicytemplateprojectbinding',
|
|
188
188
|
PSA: 'management.cattle.io.podsecurityadmissionconfigurationtemplate',
|
|
189
189
|
MANAGED_CHART: 'management.cattle.io.managedchart',
|
|
190
190
|
USER_NOTIFICATION: 'management.cattle.io.rancherusernotification',
|
|
191
191
|
GLOBAL_DNS_PROVIDER: 'management.cattle.io.globaldnsprovider',
|
|
192
192
|
RKE_TEMPLATE: 'management.cattle.io.clustertemplate',
|
|
193
193
|
RKE_TEMPLATE_REVISION: 'management.cattle.io.clustertemplaterevision',
|
|
194
|
+
CLUSTER_PROXY_CONFIG: 'management.cattle.io.clusterproxyconfig'
|
|
194
195
|
};
|
|
195
196
|
|
|
196
197
|
export const CAPI = {
|
|
@@ -283,7 +284,8 @@ export const UI = { NAV_LINK: 'ui.cattle.io.navlink' };
|
|
|
283
284
|
export const VIRTUAL_TYPES = {
|
|
284
285
|
CLUSTER_MEMBERS: 'cluster-members',
|
|
285
286
|
PROJECT_NAMESPACES: 'projects-namespaces',
|
|
286
|
-
NAMESPACES: 'namespaces'
|
|
287
|
+
NAMESPACES: 'namespaces',
|
|
288
|
+
JWT_AUTHENTICATION: 'jwt.authentication'
|
|
287
289
|
};
|
|
288
290
|
|
|
289
291
|
// harvester
|
|
@@ -314,3 +316,16 @@ export const AUTH_TYPE = {
|
|
|
314
316
|
};
|
|
315
317
|
|
|
316
318
|
export const LOCAL_CLUSTER = 'local';
|
|
319
|
+
|
|
320
|
+
export const CLUSTER_REPO_TYPES = {
|
|
321
|
+
HELM_URL: 'helm-url',
|
|
322
|
+
GIT_REPO: 'git-repo',
|
|
323
|
+
OCI_URL: 'oci-url'
|
|
324
|
+
};
|
|
325
|
+
|
|
326
|
+
export const ZERO_TIME = '0001-01-01T00:00:00Z';
|
|
327
|
+
|
|
328
|
+
export const DEFAULT_GRAFANA_STORAGE_SIZE = '10Gi';
|
|
329
|
+
|
|
330
|
+
export const DEPRECATED = 'Deprecated';
|
|
331
|
+
export const EXPERIMENTAL = 'Experimental';
|
package/config/uiplugins.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import semver from 'semver';
|
|
2
2
|
|
|
3
3
|
// Version of the plugin API supported
|
|
4
|
-
|
|
4
|
+
// here we inject the current shell version that we read in vue.config
|
|
5
|
+
export const UI_EXTENSIONS_API_VERSION = process.env.UI_EXTENSIONS_API_VERSION;
|
|
5
6
|
export const UI_PLUGIN_HOST_APP = 'rancher-manager';
|
|
6
7
|
|
|
7
|
-
export const UI_PLUGIN_BASE_URL = '/
|
|
8
|
+
export const UI_PLUGIN_BASE_URL = '/v1/uiplugins';
|
|
8
9
|
|
|
9
10
|
export const UI_PLUGIN_NAMESPACE = 'cattle-ui-plugin-system';
|
|
10
11
|
|
|
@@ -90,6 +91,8 @@ export function uiPluginAnnotation(chart, name) {
|
|
|
90
91
|
return undefined;
|
|
91
92
|
}
|
|
92
93
|
|
|
94
|
+
// i18n-uses plugins.error.generic, plugins.error.api, plugins.error.host
|
|
95
|
+
|
|
93
96
|
// Should we load a plugin, based on the metadata returned by the backend?
|
|
94
97
|
// Returns error key string or false
|
|
95
98
|
export function shouldNotLoadPlugin(plugin, rancherVersion, loadedPlugins) {
|
|
@@ -98,9 +101,11 @@ export function shouldNotLoadPlugin(plugin, rancherVersion, loadedPlugins) {
|
|
|
98
101
|
}
|
|
99
102
|
|
|
100
103
|
// Plugin specified a required extension API version
|
|
101
|
-
|
|
104
|
+
// we are propagating the annotations in pkg/package.json for any extension
|
|
105
|
+
// inside the "spec.plugin.metadata" property of UIPlugin resource
|
|
106
|
+
const requiredAPI = plugin.spec?.plugin?.metadata?.[UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION];
|
|
102
107
|
|
|
103
|
-
if (requiredAPI && !semver.satisfies(
|
|
108
|
+
if (requiredAPI && !semver.satisfies(UI_EXTENSIONS_API_VERSION, requiredAPI)) {
|
|
104
109
|
return 'plugins.error.api';
|
|
105
110
|
}
|
|
106
111
|
|
|
@@ -141,7 +146,7 @@ export function isSupportedChartVersion(versionsData) {
|
|
|
141
146
|
// Plugin specified a required extension API version
|
|
142
147
|
const requiredAPI = version.annotations?.[UI_PLUGIN_CHART_ANNOTATIONS.EXTENSIONS_VERSION];
|
|
143
148
|
|
|
144
|
-
if (requiredAPI && !semver.satisfies(
|
|
149
|
+
if (requiredAPI && !semver.satisfies(UI_EXTENSIONS_API_VERSION, requiredAPI)) {
|
|
145
150
|
return false;
|
|
146
151
|
}
|
|
147
152
|
|
package/core/plugin-helpers.js
CHANGED
|
@@ -4,16 +4,14 @@ import { ucFirst, randomStr } from '@shell/utils/string';
|
|
|
4
4
|
import {
|
|
5
5
|
_EDIT, _CONFIG, _DETAIL, _LIST, _CREATE
|
|
6
6
|
} from '@shell/config/query-params';
|
|
7
|
-
import { getProductFromRoute } from '@shell/
|
|
7
|
+
import { getProductFromRoute } from '@shell/utils/router';
|
|
8
8
|
import { isEqual } from '@shell/utils/object';
|
|
9
9
|
|
|
10
|
-
function checkRouteProduct(
|
|
11
|
-
const product = getProductFromRoute(
|
|
12
|
-
name, params, query
|
|
13
|
-
});
|
|
10
|
+
function checkRouteProduct($route, locationConfigParam) {
|
|
11
|
+
const product = getProductFromRoute($route);
|
|
14
12
|
|
|
15
13
|
// alias for the homepage
|
|
16
|
-
if (locationConfigParam === 'home' && name === 'home') {
|
|
14
|
+
if (locationConfigParam === 'home' && $route.name === 'home') {
|
|
17
15
|
return true;
|
|
18
16
|
} else if (locationConfigParam === product) {
|
|
19
17
|
return true;
|
package/core/plugin-routes.ts
CHANGED
|
@@ -6,20 +6,8 @@ interface RouteInfo {
|
|
|
6
6
|
route: RouteConfig;
|
|
7
7
|
}
|
|
8
8
|
|
|
9
|
-
interface RouteInstallInfo {
|
|
10
|
-
plugin: string;
|
|
11
|
-
route: RouteConfig;
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
type RouteInstallHistory = {
|
|
15
|
-
[route: string]: RouteInstallInfo[]
|
|
16
|
-
}
|
|
17
|
-
|
|
18
9
|
export class PluginRoutes {
|
|
19
10
|
router: Router;
|
|
20
|
-
pluginRoutes: RouteConfig[] = [];
|
|
21
|
-
|
|
22
|
-
replacedRoutes: RouteInstallHistory = {};
|
|
23
11
|
|
|
24
12
|
constructor(router: Router) {
|
|
25
13
|
this.router = router;
|
|
@@ -34,70 +22,25 @@ export class PluginRoutes {
|
|
|
34
22
|
});
|
|
35
23
|
}
|
|
36
24
|
|
|
37
|
-
|
|
38
|
-
public uninstall(plugin: any) {
|
|
39
|
-
// List of routes we need to restore
|
|
40
|
-
const restore: RouteInfo[] = [];
|
|
41
|
-
|
|
42
|
-
Object.keys(this.replacedRoutes).forEach((routeName) => {
|
|
43
|
-
const info = this.replacedRoutes[routeName];
|
|
44
|
-
|
|
45
|
-
for (let index = 0; index < info.length; index++) {
|
|
46
|
-
const savedRoute = info[index];
|
|
47
|
-
|
|
48
|
-
if (savedRoute.plugin === plugin.id) {
|
|
49
|
-
// The plugin that is being uninstalled replaced an existing route that we will restore
|
|
50
|
-
if (index === 0) {
|
|
51
|
-
// Need to restore the previous route, since the plugin owned the active route
|
|
52
|
-
info.shift();
|
|
53
|
-
|
|
54
|
-
restore.push({ route: savedRoute.route });
|
|
55
|
-
|
|
56
|
-
break;
|
|
57
|
-
} else {
|
|
58
|
-
// Need to update the previous item so that when it is removed, it restores the correct route
|
|
59
|
-
const previous = info[index - 1];
|
|
60
|
-
|
|
61
|
-
previous.route = savedRoute.route;
|
|
62
|
-
info.splice(index, 1);
|
|
63
|
-
|
|
64
|
-
break;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
// Remove routes from pluginRoutes, update matcher (to avoid dupes when re-adding plugin routes)
|
|
71
|
-
this.pluginRoutes = this.pluginRoutes.filter((pR) => !plugin.routes.find((r: any) => pR === r.route));
|
|
72
|
-
this.updateMatcher([], [
|
|
73
|
-
...this.pluginRoutes,
|
|
74
|
-
...(this.router.options.routes || [])
|
|
75
|
-
]);
|
|
76
|
-
|
|
77
|
-
// Restore appropriate routes
|
|
78
|
-
if (restore.length > 0) {
|
|
79
|
-
this.addRoutes(null, restore);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
public addRoutes(plugin: any, routes: RouteInfo[]) {
|
|
25
|
+
public addRoutes(plugin: any, newRouteInfos: RouteInfo[]) {
|
|
84
26
|
const allRoutes = [
|
|
85
|
-
...this.pluginRoutes,
|
|
86
27
|
...(this.router.options.routes || [])
|
|
87
28
|
];
|
|
88
29
|
|
|
89
30
|
// Need to take into account if routes are being replaced
|
|
90
31
|
// Despite what the docs say, routes are not replaced, so we use a workaround
|
|
91
32
|
// Remove all routes that are being replaced
|
|
92
|
-
|
|
33
|
+
const newRoutes = newRouteInfos.map((ri) => ri.route);
|
|
34
|
+
|
|
35
|
+
this.forEachNestedRoutes(newRoutes, (r: RouteConfig) => {
|
|
93
36
|
// Patch colliding legacy routes that start /:product
|
|
94
|
-
if (r.
|
|
37
|
+
if (r.path?.startsWith('/:product')) {
|
|
95
38
|
// Legacy pattern used by extensions - routes may collide, so modify them not to
|
|
96
39
|
let productName;
|
|
97
40
|
|
|
98
41
|
// If the route has a name (which is always the case for the extensions we have written), use it to get the product name
|
|
99
|
-
if (r.
|
|
100
|
-
const nameParts = r.
|
|
42
|
+
if (r.name) {
|
|
43
|
+
const nameParts = r.name.split('-');
|
|
101
44
|
|
|
102
45
|
// First part of the route name is the product name
|
|
103
46
|
productName = nameParts[0];
|
|
@@ -107,74 +50,40 @@ export class PluginRoutes {
|
|
|
107
50
|
productName = productName || plugin.name;
|
|
108
51
|
|
|
109
52
|
// Replace the path - removing :product and using the actual product name instead - this avoids route collisions
|
|
110
|
-
r.
|
|
111
|
-
r.
|
|
112
|
-
|
|
113
|
-
r.route.meta.product = r.route.meta.product || productName;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// See if the route exists
|
|
117
|
-
let existing: any;
|
|
118
|
-
|
|
119
|
-
if (r.parent) {
|
|
120
|
-
const pExisting = allRoutes.findIndex((route: any) => route.name === r.parent) as any;
|
|
121
|
-
const path = `${ pExisting.path }${ r.route.path }`;
|
|
122
|
-
|
|
123
|
-
// TODO: Validate
|
|
124
|
-
existing = allRoutes.findIndex((route: any) => route.path === path);
|
|
125
|
-
} else {
|
|
126
|
-
// no parent route
|
|
127
|
-
existing = allRoutes.findIndex((route: any) => route.name === r.route.name);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
if (existing >= 0) {
|
|
131
|
-
const existingRoute = allRoutes[existing];
|
|
132
|
-
|
|
133
|
-
// Store the route so we can restore it on uninstall
|
|
134
|
-
if (plugin && existingRoute?.name) {
|
|
135
|
-
if (!this.replacedRoutes[existingRoute.name]) {
|
|
136
|
-
this.replacedRoutes[existingRoute.name] = [];
|
|
137
|
-
}
|
|
138
|
-
|
|
139
|
-
this.replacedRoutes[existingRoute.name].unshift({
|
|
140
|
-
plugin: plugin.id,
|
|
141
|
-
route: existingRoute
|
|
142
|
-
});
|
|
143
|
-
}
|
|
53
|
+
r.path = `/${ productName }${ r.path.substr(9) }`;
|
|
54
|
+
r.meta = r.meta || {};
|
|
144
55
|
|
|
145
|
-
|
|
56
|
+
r.meta.product = r.meta.product || productName;
|
|
146
57
|
}
|
|
147
58
|
});
|
|
148
59
|
|
|
149
|
-
this.updateMatcher(
|
|
60
|
+
this.updateMatcher(newRouteInfos, allRoutes);
|
|
150
61
|
}
|
|
151
62
|
|
|
152
63
|
private updateMatcher(newRoutes: RouteInfo[], allRoutes: RouteConfig[]) {
|
|
153
64
|
// Note - Always use a new router and replace the existing router's matching
|
|
154
|
-
// Using the existing router and adding routes to it will force nuxt middleware
|
|
65
|
+
// Using the existing router and adding routes to it will force nuxt middleware to
|
|
155
66
|
// execute many times (nuxt middleware boils down to router.beforeEach). This issue was seen refreshing in a harvester cluster with a
|
|
156
67
|
// dynamically loaded cluster
|
|
157
68
|
|
|
158
|
-
const pluginRoutesWithParents: any[] = [];
|
|
159
69
|
const orderedPluginRoutes: any[] = [];
|
|
160
70
|
|
|
161
|
-
// separate plugin routes that have parent and not
|
|
162
|
-
newRoutes.forEach((r: any) => {
|
|
71
|
+
// separate plugin routes that have parent and not, you want to push the new routes in REVERSE order to the front of the existing list so that the order of routes specified by the extension is preserved
|
|
72
|
+
newRoutes.reverse().forEach((r: any) => {
|
|
163
73
|
let foundParentRoute;
|
|
164
74
|
|
|
165
75
|
if (r.parent) {
|
|
166
|
-
foundParentRoute =
|
|
76
|
+
foundParentRoute = this.findInNestedRoutes(allRoutes, (route: RouteConfig) => route.name === r.parent);
|
|
167
77
|
|
|
168
78
|
if (foundParentRoute) {
|
|
169
|
-
|
|
79
|
+
foundParentRoute.children = foundParentRoute?.children || [];
|
|
80
|
+
foundParentRoute.children.unshift(r.route);
|
|
170
81
|
}
|
|
171
82
|
}
|
|
172
83
|
|
|
173
84
|
if (!foundParentRoute) {
|
|
174
|
-
orderedPluginRoutes.
|
|
85
|
+
orderedPluginRoutes.unshift(r.route);
|
|
175
86
|
}
|
|
176
|
-
|
|
177
|
-
this.pluginRoutes.push(r.route);
|
|
178
87
|
});
|
|
179
88
|
|
|
180
89
|
const newRouter: Router = new Router({
|
|
@@ -182,12 +91,45 @@ export class PluginRoutes {
|
|
|
182
91
|
routes: [...orderedPluginRoutes, ...allRoutes]
|
|
183
92
|
});
|
|
184
93
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
94
|
+
(this.router as any).matcher = (newRouter as any).matcher;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/**
|
|
98
|
+
* Traverse the entire tree of nested routes
|
|
99
|
+
*
|
|
100
|
+
* @param routes The routes we wish to traverse through
|
|
101
|
+
* @param fn -> Return true if you'd like to break the loop early (small)
|
|
102
|
+
* @returns {@boolean} -> Returns true if breaking early
|
|
103
|
+
*/
|
|
104
|
+
private forEachNestedRoutes(routes: RouteConfig[] = [], fn: (route: RouteConfig) => boolean | undefined | void) {
|
|
105
|
+
for (let i = 0; i < routes.length; ++i) {
|
|
106
|
+
const route = routes[i];
|
|
107
|
+
const result = fn(route);
|
|
108
|
+
|
|
109
|
+
if (result || this.forEachNestedRoutes(route.children, fn)) {
|
|
110
|
+
return true;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* Find a route that matches the criteria defined by fn.
|
|
117
|
+
*
|
|
118
|
+
* @param routes The routes we wish to search through
|
|
119
|
+
* @param fn -> Returns true if the passed in route matches the expected criteria
|
|
120
|
+
* @returns The found route or undefined
|
|
121
|
+
*/
|
|
122
|
+
private findInNestedRoutes(routes: RouteConfig[] = [], fn: (route: RouteConfig) => boolean): RouteConfig | undefined {
|
|
123
|
+
let found: any;
|
|
124
|
+
|
|
125
|
+
this.forEachNestedRoutes(routes, (route) => {
|
|
126
|
+
if (fn(route)) {
|
|
127
|
+
found = route;
|
|
128
|
+
|
|
129
|
+
return true;
|
|
130
|
+
}
|
|
188
131
|
});
|
|
189
132
|
|
|
190
|
-
|
|
191
|
-
(this.router as any).matcher = (newRouter as any).matcher;
|
|
133
|
+
return found;
|
|
192
134
|
}
|
|
193
135
|
}
|
package/core/plugin.ts
CHANGED
|
@@ -15,7 +15,6 @@ import {
|
|
|
15
15
|
PluginRouteConfig, RegisterStore, UnregisterStore, CoreStoreSpecifics, CoreStoreConfig, OnNavToPackage, OnNavAwayFromPackage, OnLogOut
|
|
16
16
|
} from './types';
|
|
17
17
|
import coreStore, { coreStoreModule, coreStoreState } from '@shell/plugins/dashboard-store';
|
|
18
|
-
import { registerLayout } from '@shell/initialize/layouts';
|
|
19
18
|
|
|
20
19
|
export type ProductFunction = (plugin: IPlugin, store: any) => void;
|
|
21
20
|
|
|
@@ -120,12 +119,27 @@ export class Plugin implements IPlugin {
|
|
|
120
119
|
const parent: string | undefined = hasParent ? parentOrRoute as string : undefined;
|
|
121
120
|
const route: RouteConfig = hasParent ? optionalRoute as RouteConfig : parentOrRoute as RouteConfig;
|
|
122
121
|
|
|
122
|
+
let parentOverride;
|
|
123
|
+
|
|
124
|
+
if (!parent) {
|
|
125
|
+
// TODO: Inspecting the route object in the browser clearly indicates it's not a RouteConfig. The type needs to be changed or at least extended.
|
|
126
|
+
const typelessRoute: any = route;
|
|
127
|
+
|
|
128
|
+
if (typelessRoute.component?.layout) {
|
|
129
|
+
console.warn(`Layouts have been deprecated. We still have parent routes which use the same name and styling as the previous layouts. \n\nFound a component ${ typelessRoute.component.name } with the '${ typelessRoute.component.layout }' layout specified `); // eslint-disable-line no-console
|
|
130
|
+
parentOverride = typelessRoute.component.layout.toLowerCase();
|
|
131
|
+
} else {
|
|
132
|
+
console.warn(`Layouts have been deprecated. We still have parent routes which use the same name and styling as the previous layouts. You should specify a parent, we're currently setting the parent to 'default'`); // eslint-disable-line no-console
|
|
133
|
+
parentOverride = 'default';
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
|
|
123
137
|
route.meta = {
|
|
124
138
|
...route?.meta,
|
|
125
139
|
pkg: this.name,
|
|
126
140
|
};
|
|
127
141
|
|
|
128
|
-
this.routes.push({ parent, route });
|
|
142
|
+
this.routes.push({ parent: parentOverride || parent, route });
|
|
129
143
|
}
|
|
130
144
|
|
|
131
145
|
private _addUIConfig(type: string, where: string, when: LocationConfig | string, config: any) {
|
|
@@ -250,11 +264,12 @@ export class Plugin implements IPlugin {
|
|
|
250
264
|
}
|
|
251
265
|
|
|
252
266
|
public register(type: string, name: string, fn: Function) {
|
|
267
|
+
const allowPaths = ['models', 'image'];
|
|
253
268
|
const nparts = name.split('/');
|
|
254
269
|
|
|
255
270
|
// Support components in a sub-folder - component_name/index.vue (and ignore other componnets in that folder)
|
|
256
271
|
// Allow store-scoped models via sub-folder - pkgname/models/storename/type will be registered as storename/type to avoid overwriting shell/models/type
|
|
257
|
-
if (nparts.length === 2 && type
|
|
272
|
+
if (nparts.length === 2 && !allowPaths.includes(type)) {
|
|
258
273
|
if (nparts[1] !== 'index') {
|
|
259
274
|
return;
|
|
260
275
|
}
|
|
@@ -268,14 +283,6 @@ export class Plugin implements IPlugin {
|
|
|
268
283
|
}
|
|
269
284
|
|
|
270
285
|
this.l10n[name].push(fn);
|
|
271
|
-
} else if (type === 'layouts') {
|
|
272
|
-
fn().then((component: any) => {
|
|
273
|
-
if (component.default) {
|
|
274
|
-
registerLayout(name, component.default);
|
|
275
|
-
} else {
|
|
276
|
-
console.error(`Failed to load layout ${ name } because the file didn't export a default component.`); // eslint-disable-line no-console
|
|
277
|
-
}
|
|
278
|
-
});
|
|
279
286
|
} else {
|
|
280
287
|
if (!this.types[type]) {
|
|
281
288
|
this.types[type] = {};
|
package/core/plugins-loader.js
CHANGED
|
@@ -20,14 +20,12 @@ export default function({
|
|
|
20
20
|
dynamicLoader.default($plugin);
|
|
21
21
|
}
|
|
22
22
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
window.Vue = Vue;
|
|
23
|
+
// The libraries we build have Vue externalised, so we need to expose Vue as a global for
|
|
24
|
+
// them to pick up - see: https://cli.vuejs.org/guide/build-targets.html#library
|
|
25
|
+
window.Vue = Vue;
|
|
27
26
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
}
|
|
27
|
+
// Global libraries - allows us to externalise these to reduce package bundle size
|
|
28
|
+
window.$ = $;
|
|
29
|
+
window.__jszip = JSZip;
|
|
30
|
+
window.__jsyaml = jsyaml;
|
|
33
31
|
}
|