@rancher/shell 3.0.5-rc.5 → 3.0.5-rc.6
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 +1 -0
- package/assets/images/key.svg +17 -0
- package/assets/styles/base/_spacing.scss +2 -2
- package/assets/styles/global/_form.scss +1 -1
- package/assets/styles/global/_labeled-input.scss +1 -1
- package/assets/styles/themes/_dark.scss +3 -0
- package/assets/styles/themes/_light.scss +3 -0
- package/assets/styles/vendor/vue-select.scss +1 -1
- package/assets/translations/en-us.yaml +404 -64
- package/assets/translations/zh-hans.yaml +3 -4
- package/cloud-credential/gcp.vue +9 -1
- package/components/AppModal.vue +2 -0
- package/components/CodeMirror.vue +1 -1
- package/components/ConfigMapSettings/Settings.vue +377 -0
- package/components/ConfigMapSettings/index.vue +354 -0
- package/components/CruResource.vue +1 -2
- package/components/DetailText.vue +61 -11
- package/components/Drawer/Chrome.vue +116 -0
- package/components/Drawer/ResourceDetailDrawer/ConfigTab.vue +61 -0
- package/components/Drawer/ResourceDetailDrawer/YamlTab.vue +48 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/ConfigTab.test.ts +54 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/YamlTab.test.ts +80 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/composables.test.ts +82 -0
- package/components/Drawer/ResourceDetailDrawer/__tests__/helpers.test.ts +42 -0
- package/components/Drawer/ResourceDetailDrawer/composables.ts +50 -0
- package/components/Drawer/ResourceDetailDrawer/helpers.ts +10 -0
- package/components/Drawer/ResourceDetailDrawer/index.vue +110 -0
- package/components/GrowlManager.vue +16 -15
- package/components/IconOrSvg.vue +5 -0
- package/components/KeyValueView.vue +1 -1
- package/components/LocaleSelector.vue +9 -1
- package/components/ProgressBarMulti.vue +1 -0
- package/components/PromptModal.vue +6 -1
- package/components/RelatedResources.vue +4 -12
- package/components/Resource/Detail/Additional.vue +46 -0
- package/components/Resource/Detail/Metadata/Annotations/__tests__/index.test.ts +1 -1
- package/components/Resource/Detail/Metadata/Annotations/index.vue +5 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/__tests__/identifying-fields.test.ts +223 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/composable.ts +37 -254
- package/components/Resource/Detail/Metadata/IdentifyingInformation/identifying-fields.ts +298 -0
- package/components/Resource/Detail/Metadata/IdentifyingInformation/index.vue +27 -5
- package/components/Resource/Detail/Metadata/KeyValue.vue +25 -17
- package/components/Resource/Detail/Metadata/Labels/__tests__/index.test.ts +1 -1
- package/components/Resource/Detail/Metadata/Labels/index.vue +4 -0
- package/components/Resource/Detail/Metadata/__tests__/KeyValue.test.ts +1 -1
- package/components/Resource/Detail/Metadata/__tests__/Rectangle.test.ts +1 -1
- package/components/Resource/Detail/Metadata/__tests__/composables.test.ts +75 -0
- package/components/Resource/Detail/Metadata/composables.ts +60 -11
- package/components/Resource/Detail/Metadata/index.vue +12 -5
- package/components/Resource/Detail/Page.vue +15 -0
- package/components/Resource/Detail/ResourceRow.vue +37 -18
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/composables.test.ts +29 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/__tests__/index.test.ts +48 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/composables.ts +31 -0
- package/components/Resource/Detail/ResourceTabs/ConfigMapDataTab/index.vue +50 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/__tests__/composables.test.ts +66 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/composables.ts +21 -0
- package/components/Resource/Detail/ResourceTabs/KnownHostsTab/index.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Basic.vue +45 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/BasicAuth.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Certificate.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Registry.vue +22 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/ServiceAccountToken.vue +31 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/Ssh.vue +32 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Basic.test.ts +40 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/BasicAuth.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Certificate.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Registry.test.ts +27 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/ServiceAccountToken.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/Ssh.test.ts +33 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/auth-types.test.ts +186 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/__tests__/composables.test.ts +102 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/auth-types.ts +109 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/composeables.ts +52 -0
- package/components/Resource/Detail/ResourceTabs/SecretDataTab/index.vue +71 -0
- package/components/Resource/Detail/TitleBar/Title.vue +2 -1
- package/components/Resource/Detail/TitleBar/__tests__/Title.test.ts +1 -1
- package/components/Resource/Detail/TitleBar/__tests__/Top.test.ts +1 -1
- package/components/Resource/Detail/TitleBar/__tests__/composables.test.ts +63 -0
- package/components/Resource/Detail/TitleBar/__tests__/index.test.ts +1 -1
- package/components/Resource/Detail/TitleBar/composables.ts +44 -0
- package/components/Resource/Detail/TitleBar/index.vue +83 -11
- package/components/Resource/Detail/composables.ts +45 -0
- package/components/ResourceDetail/Masthead/__tests__/index.test.ts +70 -0
- package/components/ResourceDetail/{__tests__/Masthead.test.ts → Masthead/__tests__/legacy.test.ts} +3 -3
- package/components/ResourceDetail/Masthead/index.vue +65 -0
- package/components/ResourceDetail/Masthead/latest.vue +44 -0
- package/components/ResourceDetail/__tests__/index.test.ts +26 -5
- package/components/ResourceDetail/index.vue +30 -16
- package/components/ResourceDetail/legacy.vue +18 -1
- package/components/ResourceList/Masthead.vue +6 -0
- package/components/ResourceYaml.vue +14 -1
- package/components/SlideInPanelManager.vue +46 -7
- package/components/StateDot/index.vue +28 -0
- package/components/Tabbed/index.vue +11 -15
- package/components/Wizard.vue +4 -2
- package/components/__tests__/ConfigMapSettings.test.ts +376 -0
- package/components/__tests__/GrowlManager.test.ts +0 -25
- package/components/auth/login/ldap.vue +1 -1
- package/components/fleet/FleetApplications.vue +0 -7
- package/components/fleet/FleetClusterTargets/TargetsList.vue +66 -0
- package/components/fleet/FleetClusterTargets/index.vue +455 -0
- package/components/fleet/FleetClusters.vue +25 -6
- package/components/fleet/FleetGitRepoPaths.vue +476 -0
- package/components/fleet/FleetHelmOps.vue +8 -0
- package/components/fleet/FleetRepos.vue +1 -6
- package/components/fleet/FleetResources.vue +4 -5
- package/components/fleet/FleetValuesFrom.vue +295 -0
- package/components/fleet/__tests__/FleetClusterTargets.test.ts +1224 -0
- package/components/fleet/__tests__/FleetGitRepoPaths.test.ts +265 -0
- package/components/fleet/__tests__/FleetOCIStorageSecret.test.ts +13 -13
- package/components/fleet/__tests__/FleetValuesFrom.test.ts +300 -0
- package/components/fleet/dashboard/ResourceCard.vue +1 -0
- package/components/fleet/dashboard/ResourceCardSummary.vue +1 -5
- package/components/fleet/dashboard/ResourceDetails.vue +8 -10
- package/components/fleet/dashboard/ResourcePanel.vue +15 -8
- package/components/form/ArrayList.vue +13 -2
- package/components/form/ChangePassword.vue +3 -1
- package/components/form/Footer.vue +10 -4
- package/components/form/KeyValue.vue +81 -43
- package/components/form/LabeledSelect.vue +56 -16
- package/components/form/Labels.vue +90 -17
- package/components/form/MatchExpressions.vue +46 -5
- package/components/form/NameNsDescription.vue +1 -1
- package/components/form/ResourceSelector.vue +1 -0
- package/components/form/ResourceTabs/index.vue +5 -0
- package/components/form/SecretSelector.vue +9 -2
- package/components/form/Select.vue +57 -19
- package/components/form/SimpleSecretSelector.vue +9 -2
- package/components/form/Taints.vue +21 -2
- package/components/form/UnitInput.vue +8 -0
- package/components/form/ValueFromResource.vue +1 -1
- package/components/form/__tests__/LabeledSelect.test.ts +8 -4
- package/components/form/__tests__/Labels.test.ts +360 -0
- package/components/form/__tests__/MatchExpressions.test.ts +16 -13
- package/components/form/__tests__/Select.test.ts +5 -2
- package/components/formatter/FleetApplicationSource.vue +1 -1
- package/components/formatter/WorkloadHealthScale.vue +1 -1
- package/components/google/AccountAccess.vue +211 -0
- package/components/google/types/gcp.d.ts +136 -0
- package/components/google/types/index.d.ts +101 -0
- package/components/google/util/__mocks__/gcp.ts +465 -0
- package/components/google/util/formatter.ts +82 -0
- package/components/google/util/gcp.ts +134 -0
- package/components/google/util/index.d.ts +11 -0
- package/components/nav/Favorite.vue +1 -1
- package/components/nav/Group.vue +70 -47
- package/components/nav/Header.vue +5 -1
- package/components/nav/NamespaceFilter.vue +13 -1
- package/components/nav/NotificationCenter/Notification.vue +510 -0
- package/components/nav/NotificationCenter/NotificationHeader.vue +112 -0
- package/components/nav/NotificationCenter/index.vue +148 -0
- package/composables/drawer.ts +26 -0
- package/composables/resources.test.ts +63 -0
- package/composables/resources.ts +38 -0
- package/composables/useIsNewDetailPageEnabled.ts +17 -0
- package/config/labels-annotations.js +6 -0
- package/config/product/auth.js +16 -1
- package/config/product/{cis.js → compliance.js} +23 -26
- package/config/product/explorer.js +5 -1
- package/config/product/fleet.js +7 -0
- package/config/product/settings.js +22 -11
- package/config/query-params.js +3 -0
- package/config/roles.ts +1 -1
- package/config/router/navigation-guards/authentication.js +51 -2
- package/config/router/routes.js +27 -31
- package/config/settings.ts +21 -3
- package/config/store.js +2 -0
- package/config/system-namespaces.js +1 -1
- package/config/table-headers.js +2 -2
- package/config/types.js +15 -6
- package/core/plugin.ts +32 -7
- package/core/types.ts +18 -1
- package/detail/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +22 -18
- package/detail/management.cattle.io.fleetworkspace.vue +18 -27
- package/detail/management.cattle.io.oidcclient.vue +369 -0
- package/detail/node.vue +2 -2
- package/detail/pod.vue +2 -2
- package/detail/service.vue +10 -1
- package/detail/workload/index.vue +8 -2
- package/dialog/ExtensionCatalogUninstallDialog.vue +7 -4
- package/dialog/GenericPrompt.vue +1 -1
- package/dialog/ImportDialog.vue +8 -8
- package/dialog/OidcClientSecretDialog.vue +117 -0
- package/edit/__tests__/cis.cattle.io.clusterscan.test.ts +3 -3
- package/edit/__tests__/fleet.cattle.io.gitrepo.test.ts +5 -2
- package/edit/autoscaling.horizontalpodautoscaler/index.vue +4 -1
- package/edit/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +30 -31
- package/edit/{cis.cattle.io.clusterscanbenchmark.vue → compliance.cattle.io.clusterscanbenchmark.vue} +4 -4
- package/edit/{cis.cattle.io.clusterscanprofile.vue → compliance.cattle.io.clusterscanprofile.vue} +5 -5
- package/edit/configmap.vue +4 -1
- package/edit/constraints.gatekeeper.sh.constraint/index.vue +1 -0
- package/edit/fleet.cattle.io.gitrepo.vue +44 -222
- package/edit/fleet.cattle.io.helmop.vue +44 -269
- package/edit/helm.cattle.io.projecthelmchart.vue +1 -0
- package/edit/k8s.cni.cncf.io.networkattachmentdefinition.vue +1 -0
- package/edit/logging-flow/index.vue +1 -0
- package/edit/logging.banzaicloud.io.output/index.vue +1 -0
- package/edit/management.cattle.io.fleetworkspace.vue +1 -0
- package/edit/management.cattle.io.oidcclient.vue +162 -0
- package/edit/management.cattle.io.project.vue +4 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/index.vue +1 -1
- package/edit/monitoring.coreos.com.alertmanagerconfig/receiverConfig.vue +5 -0
- package/edit/monitoring.coreos.com.prometheusrule/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/auth.vue +30 -30
- package/edit/monitoring.coreos.com.receiver/index.vue +1 -0
- package/edit/monitoring.coreos.com.receiver/types/email.vue +1 -1
- package/edit/monitoring.coreos.com.route.vue +1 -0
- package/edit/namespace.vue +1 -0
- package/edit/networking.istio.io.destinationrule/index.vue +4 -1
- package/edit/networking.k8s.io.ingress/index.vue +4 -1
- package/edit/networking.k8s.io.networkpolicy/PolicyRules.vue +7 -2
- package/edit/networking.k8s.io.networkpolicy/index.vue +6 -2
- package/edit/node.vue +1 -0
- package/edit/persistentvolume/index.vue +4 -1
- package/edit/provisioning.cattle.io.cluster/rke2.vue +418 -382
- package/edit/provisioning.cattle.io.cluster/tabs/Basics.vue +27 -27
- package/edit/provisioning.cattle.io.cluster/tabs/MachinePool.vue +5 -0
- package/edit/resources.cattle.io.restore.vue +1 -1
- package/edit/secret/index.vue +1 -0
- package/edit/service.vue +4 -1
- package/edit/serviceaccount.vue +4 -1
- package/edit/storage.k8s.io.storageclass/index.vue +4 -1
- package/edit/workload/index.vue +5 -0
- package/list/{cis.cattle.io.clusterscan.vue → compliance.cattle.io.clusterscan.vue} +2 -2
- package/list/management.cattle.io.oidcclient.vue +108 -0
- package/list/node.vue +2 -0
- package/machine-config/amazonec2.vue +3 -24
- package/machine-config/components/GCEImage.vue +374 -0
- package/machine-config/google.vue +617 -0
- package/mixins/__tests__/brand.spec.ts +170 -0
- package/mixins/brand.js +16 -17
- package/mixins/create-edit-view/index.js +5 -0
- package/mixins/resource-fetch-api-pagination.js +16 -0
- package/mixins/vue-select-overrides.js +1 -0
- package/models/{cis.cattle.io.clusterscan.js → compliance.cattle.io.clusterscan.js} +8 -8
- package/models/{cis.cattle.io.clusterscanbenchmark.js → compliance.cattle.io.clusterscanbenchmark.js} +1 -1
- package/models/{cis.cattle.io.clusterscanprofile.js → compliance.cattle.io.clusterscanprofile.js} +5 -5
- package/models/{cis.cattle.io.clusterscanreport.js → compliance.cattle.io.clusterscanreport.js} +1 -1
- package/models/fleet-application.js +8 -79
- package/models/fleet.cattle.io.cluster.js +11 -0
- package/models/fleet.cattle.io.gitrepo.js +2 -2
- package/models/fleet.cattle.io.helmop.js +9 -39
- package/models/management.cattle.io.fleetworkspace.js +2 -1
- package/models/management.cattle.io.oidcclient.js +18 -0
- package/models/management.cattle.io.registration.js +3 -0
- package/models/provisioning.cattle.io.cluster.js +5 -5
- package/models/service.js +4 -0
- package/models/workload.js +5 -0
- package/package.json +1 -1
- package/pages/about.vue +4 -58
- package/pages/auth/login.vue +1 -1
- package/pages/c/_cluster/apps/charts/AddRepoLink.vue +0 -1
- package/pages/c/_cluster/apps/charts/index.vue +285 -81
- package/pages/c/_cluster/auth/user.retention/index.vue +87 -78
- package/pages/c/_cluster/explorer/index.vue +3 -3
- package/pages/c/_cluster/explorer/tools/pages/_page.vue +0 -1
- package/pages/c/_cluster/fleet/application/create.vue +3 -2
- package/pages/c/_cluster/fleet/index.vue +94 -56
- package/pages/c/_cluster/fleet/settings/index.vue +229 -0
- package/pages/c/_cluster/longhorn/index.vue +5 -2
- package/pages/c/_cluster/uiplugins/CatalogList/index.vue +16 -1
- package/pages/c/_cluster/uiplugins/PluginInfoPanel.vue +2 -2
- package/pages/explorer/resource/detail/configmap.vue +30 -7
- package/pages/explorer/resource/detail/secret.vue +50 -0
- package/pages/home.vue +9 -55
- package/pages/support/index.vue +4 -6
- package/plugins/dashboard-store/actions.js +19 -5
- package/plugins/dashboard-store/getters.js +4 -0
- package/plugins/dashboard-store/resource-class.js +16 -2
- package/plugins/steve/steve-pagination-utils.ts +26 -18
- package/plugins/steve/subscribe.js +6 -1
- package/rancher-components/Banner/Banner.vue +13 -0
- package/rancher-components/Form/Checkbox/Checkbox.vue +9 -4
- package/rancher-components/Form/LabeledInput/LabeledInput.vue +1 -1
- package/rancher-components/LabeledTooltip/LabeledTooltip.vue +1 -0
- package/rancher-components/RcItemCard/RcItemCard.vue +8 -3
- package/store/auth.js +2 -0
- package/store/catalog.js +23 -1
- package/store/growl.js +97 -8
- package/store/index.js +6 -0
- package/store/notifications.ts +426 -0
- package/store/prefs.js +0 -1
- package/store/type-map.js +19 -16
- package/store/uiplugins.ts +15 -1
- package/types/fleet.d.ts +24 -0
- package/types/notifications/index.ts +74 -0
- package/types/shell/index.d.ts +46 -32
- package/types/store/dashboard-store.types.ts +16 -0
- package/utils/__tests__/fleet.test.ts +148 -0
- package/utils/__tests__/object.test.ts +54 -1
- package/utils/__tests__/string.test.ts +273 -1
- package/utils/__tests__/time.test.ts +31 -0
- package/utils/auth.js +9 -2
- package/utils/crypto/encryption.ts +103 -0
- package/utils/cspAdaptor.ts +51 -0
- package/utils/fleet.ts +54 -65
- package/utils/object.js +36 -0
- package/utils/pagination-utils.ts +1 -1
- package/utils/release-notes.ts +48 -0
- package/utils/selector-typed.ts +7 -2
- package/utils/string.js +24 -0
- package/utils/{time.js → time.ts} +25 -6
- package/utils/uiplugins.ts +22 -0
- package/utils/validators/formRules/index.ts +3 -0
- package/components/Resource/Detail/TitleBar/composable.ts +0 -31
- package/config/product/legacy.js +0 -62
- package/pages/c/_cluster/legacy/pages/_page.vue +0 -29
- package/pages/c/_cluster/legacy/project/_page.vue +0 -57
- package/pages/c/_cluster/legacy/project/index.vue +0 -32
- package/pages/c/_cluster/legacy/project/pipelines.vue +0 -96
- /package/components/ResourceDetail/{Masthead.vue → Masthead/legacy.vue} +0 -0
|
@@ -736,6 +736,17 @@ export default class Resource {
|
|
|
736
736
|
);
|
|
737
737
|
}
|
|
738
738
|
|
|
739
|
+
get stateColorPair() {
|
|
740
|
+
return {
|
|
741
|
+
state: this.stateDisplay,
|
|
742
|
+
color: this.stateSimpleColor
|
|
743
|
+
};
|
|
744
|
+
}
|
|
745
|
+
|
|
746
|
+
get stateSimpleColor() {
|
|
747
|
+
return this.stateColor.replace('text-', '');
|
|
748
|
+
}
|
|
749
|
+
|
|
739
750
|
get stateBackground() {
|
|
740
751
|
return this.stateColor.replace('text-', 'bg-');
|
|
741
752
|
}
|
|
@@ -1868,10 +1879,13 @@ export default class Resource {
|
|
|
1868
1879
|
namespace,
|
|
1869
1880
|
labelSelector: { matchExpressions: parse(selector) }
|
|
1870
1881
|
},
|
|
1871
|
-
opts:
|
|
1882
|
+
opts: {
|
|
1883
|
+
transient: true,
|
|
1884
|
+
...opt,
|
|
1885
|
+
},
|
|
1872
1886
|
});
|
|
1873
1887
|
|
|
1874
|
-
addObjects(out, matching);
|
|
1888
|
+
addObjects(out, matching.data);
|
|
1875
1889
|
}
|
|
1876
1890
|
|
|
1877
1891
|
// Find all the resources that match the required id's
|
|
@@ -454,7 +454,6 @@ class StevePaginationUtils extends NamespaceProjectFilters {
|
|
|
454
454
|
|
|
455
455
|
// First check in our hardcoded list of supported filters
|
|
456
456
|
if (
|
|
457
|
-
process.env.NODE_ENV === 'dev' &&
|
|
458
457
|
!!schema &&
|
|
459
458
|
[
|
|
460
459
|
StevePaginationUtils.VALID_FIELDS[''], // Global
|
|
@@ -500,16 +499,25 @@ class StevePaginationUtils extends NamespaceProjectFilters {
|
|
|
500
499
|
// Check if the API supports filtering by this field
|
|
501
500
|
this.validateField(validateFields, schema, field.field);
|
|
502
501
|
|
|
503
|
-
const
|
|
502
|
+
const encodedValue = encodeURIComponent(field.value);
|
|
504
503
|
|
|
505
504
|
// = exact match (equals + exact)
|
|
506
505
|
// ~ partial match (equals + !exact)
|
|
507
506
|
// != not exact match (!equals + exact)
|
|
508
507
|
// !~ not partial match (!equals + !exact)
|
|
509
508
|
const operator = `${ field.equals ? '' : '!' }${ field.exact ? '=' : '~' }`;
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
509
|
+
let safeValue;
|
|
510
|
+
|
|
511
|
+
if (StevePaginationUtils.VALID_FIELD_VALUE_REGEX.test(field.value)) {
|
|
512
|
+
// Does not contain any protected characters, send as is
|
|
513
|
+
safeValue = encodedValue;
|
|
514
|
+
} else {
|
|
515
|
+
// Contains protected characters, wrap in quotes to ensure backend doesn't fail
|
|
516
|
+
// - replace reserver `"`/`%22` with empty string - see https://github.com/rancher/dashboard/issues/14549 for improvement
|
|
517
|
+
safeValue = `"${ encodedValue.replaceAll('%22', '') }"`;
|
|
518
|
+
}
|
|
519
|
+
|
|
520
|
+
return `${ this.convertArrayPath(field.field) }${ operator }${ safeValue }`;
|
|
513
521
|
}
|
|
514
522
|
|
|
515
523
|
return field.value;
|
|
@@ -658,19 +666,19 @@ export const PAGINATION_SETTINGS_STORE_DEFAULTS: PaginationSettingsStore = {
|
|
|
658
666
|
}
|
|
659
667
|
}
|
|
660
668
|
},
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
669
|
+
management: {
|
|
670
|
+
resources: {
|
|
671
|
+
enableAll: false,
|
|
672
|
+
enableSome: {
|
|
673
|
+
enabled: [
|
|
674
|
+
// { resource: CAPI.RANCHER_CLUSTER, context: ['home', 'side-bar'] }, // Disabled due to https://github.com/rancher/dashboard/issues/14493
|
|
675
|
+
// { resource: MANAGEMENT.CLUSTER, context: ['side-bar'] }, // Disabled due to https://github.com/rancher/dashboard/issues/14493
|
|
676
|
+
{ resource: CATALOG.APP, context: ['branding'] },
|
|
677
|
+
],
|
|
678
|
+
generic: false,
|
|
679
|
+
}
|
|
680
|
+
}
|
|
681
|
+
}
|
|
674
682
|
};
|
|
675
683
|
|
|
676
684
|
export default new StevePaginationUtils();
|
|
@@ -544,6 +544,9 @@ const sharedActions = {
|
|
|
544
544
|
return dispatch('send', msg);
|
|
545
545
|
},
|
|
546
546
|
|
|
547
|
+
/**
|
|
548
|
+
* @param {STEVE_WATCH_PARAMS} params
|
|
549
|
+
*/
|
|
547
550
|
unwatch(ctx, {
|
|
548
551
|
type, id, namespace, selector, all, mode
|
|
549
552
|
}) {
|
|
@@ -577,7 +580,7 @@ const sharedActions = {
|
|
|
577
580
|
dispatch('watch', obj); // Ask the backend to stop watching the type
|
|
578
581
|
} else if (all) {
|
|
579
582
|
getters['watchesOfType'](type).forEach((obj) => {
|
|
580
|
-
unwatch(obj);
|
|
583
|
+
unwatch({ ...obj, stop: true });
|
|
581
584
|
});
|
|
582
585
|
} else if (getters['watchStarted'](obj)) {
|
|
583
586
|
unwatch(obj);
|
|
@@ -752,6 +755,7 @@ const defaultActions = {
|
|
|
752
755
|
if (mode === STEVE_WATCH_MODE.RESOURCE_CHANGES) {
|
|
753
756
|
// Other findX use options (id/ns/selector) from the messages received over socket.
|
|
754
757
|
// However paginated requests have more complex params so grab them from store from the store.
|
|
758
|
+
// of type @StorePagination
|
|
755
759
|
const storePagination = getters['havePage'](resourceType);
|
|
756
760
|
|
|
757
761
|
if (!!storePagination) {
|
|
@@ -766,6 +770,7 @@ const defaultActions = {
|
|
|
766
770
|
type: resourceType,
|
|
767
771
|
opt: {
|
|
768
772
|
...opt,
|
|
773
|
+
namespaced: namespace,
|
|
769
774
|
// This brings in page, page size, filter, etc
|
|
770
775
|
...storePagination.request
|
|
771
776
|
}
|
|
@@ -3,6 +3,19 @@ import { defineComponent } from 'vue';
|
|
|
3
3
|
import { nlToBr, generateRandomAlphaString } from '@shell/utils/string';
|
|
4
4
|
import { stringify } from '@shell/utils/error';
|
|
5
5
|
|
|
6
|
+
/**
|
|
7
|
+
* These should eventually be used when making this component use the composable api but I need the props elsewhere so I'm defining them here.
|
|
8
|
+
*/
|
|
9
|
+
export interface Props {
|
|
10
|
+
color?: string;
|
|
11
|
+
label?: string | Error | Object;
|
|
12
|
+
labelKey?: string;
|
|
13
|
+
icon?: string;
|
|
14
|
+
closable?: boolean;
|
|
15
|
+
stacked?: boolean;
|
|
16
|
+
disabled?: boolean;
|
|
17
|
+
}
|
|
18
|
+
|
|
6
19
|
export default defineComponent({
|
|
7
20
|
props: {
|
|
8
21
|
/**
|
|
@@ -305,12 +305,15 @@ export default defineComponent({
|
|
|
305
305
|
:class="{ 'checkbox-primary': primary }"
|
|
306
306
|
>
|
|
307
307
|
<slot name="label">
|
|
308
|
-
<
|
|
308
|
+
<span
|
|
309
309
|
v-if="labelKey"
|
|
310
310
|
:id="idForLabel"
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
311
|
+
>
|
|
312
|
+
<t
|
|
313
|
+
:k="labelKey"
|
|
314
|
+
:raw="true"
|
|
315
|
+
/>
|
|
316
|
+
</span>
|
|
314
317
|
<span
|
|
315
318
|
v-else-if="label"
|
|
316
319
|
:id="idForLabel"
|
|
@@ -322,6 +325,7 @@ export default defineComponent({
|
|
|
322
325
|
class="checkbox-info icon icon-info icon-lg"
|
|
323
326
|
:data-testid="componentTestid + '-info-icon'"
|
|
324
327
|
:tabindex="isDisabled ? -1 : 0"
|
|
328
|
+
role="tooltip"
|
|
325
329
|
/>
|
|
326
330
|
<i
|
|
327
331
|
v-else-if="tooltip"
|
|
@@ -330,6 +334,7 @@ export default defineComponent({
|
|
|
330
334
|
class="checkbox-info icon icon-info icon-lg"
|
|
331
335
|
:data-testid="componentTestid + '-info-icon'"
|
|
332
336
|
:tabindex="isDisabled ? -1 : 0"
|
|
337
|
+
role="tooltip"
|
|
333
338
|
/>
|
|
334
339
|
</slot>
|
|
335
340
|
</span>
|
|
@@ -407,7 +407,7 @@ export default defineComponent({
|
|
|
407
407
|
:id="inputId"
|
|
408
408
|
ref="value"
|
|
409
409
|
v-stripped-aria-label="!hasLabel && ariaLabel ? ariaLabel : undefined"
|
|
410
|
-
role="textbox"
|
|
410
|
+
:role="type === 'number' ? undefined : 'textbox'"
|
|
411
411
|
:class="{ 'no-label': !hasLabel }"
|
|
412
412
|
v-bind="$attrs"
|
|
413
413
|
:maxlength="_maxlength"
|
|
@@ -80,7 +80,7 @@ interface RcItemCardProps {
|
|
|
80
80
|
image?: Image;
|
|
81
81
|
|
|
82
82
|
/** Optional actions that will be displayed inside an action-menu */
|
|
83
|
-
actions?: DropdownOption;
|
|
83
|
+
actions?: DropdownOption[];
|
|
84
84
|
|
|
85
85
|
/** Text content inside the card body. A slot is available for it too #item-card-content */
|
|
86
86
|
content?: Label;
|
|
@@ -149,6 +149,10 @@ const cardMeta = computed(() => ({
|
|
|
149
149
|
<div
|
|
150
150
|
ref="cardEl"
|
|
151
151
|
class="item-card"
|
|
152
|
+
:class="{
|
|
153
|
+
'clickable':
|
|
154
|
+
clickable
|
|
155
|
+
}"
|
|
152
156
|
:role="cardMeta.role"
|
|
153
157
|
:tabindex="cardMeta.tabIndex"
|
|
154
158
|
:aria-label="cardMeta.ariaLabel"
|
|
@@ -288,7 +292,7 @@ $image-medium-box-width: 48px;
|
|
|
288
292
|
border: 1px solid var(--border);
|
|
289
293
|
background: var(--body-bg);
|
|
290
294
|
|
|
291
|
-
|
|
295
|
+
&.clickable:hover {
|
|
292
296
|
border-color: var(--primary);
|
|
293
297
|
}
|
|
294
298
|
|
|
@@ -329,10 +333,11 @@ $image-medium-box-width: 48px;
|
|
|
329
333
|
|
|
330
334
|
&-left {
|
|
331
335
|
flex-grow: 1;
|
|
336
|
+
min-width: 0;
|
|
332
337
|
}
|
|
333
338
|
|
|
334
339
|
&-title {
|
|
335
|
-
max-width:
|
|
340
|
+
max-width: 80%;
|
|
336
341
|
font-size: 18px;
|
|
337
342
|
font-weight: 600;
|
|
338
343
|
margin-bottom: 0px;
|
package/store/auth.js
CHANGED
package/store/catalog.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { CATALOG, EXPERIMENTAL, DEPRECATED } from '@shell/config/types';
|
|
1
|
+
import { CATALOG, EXPERIMENTAL, DEPRECATED, CATALOG_SORT_OPTIONS } from '@shell/config/types';
|
|
2
2
|
import { CATALOG as CATALOG_ANNOTATIONS } from '@shell/config/labels-annotations';
|
|
3
3
|
import { addParams } from '@shell/utils/url';
|
|
4
4
|
import { allHash, allHashSettled } from '@shell/utils/promise';
|
|
@@ -536,6 +536,7 @@ function addChart(ctx, map, chart, repo) {
|
|
|
536
536
|
chartNameDisplay: chart.annotations?.[CATALOG_ANNOTATIONS.DISPLAY_NAME] || chart.name,
|
|
537
537
|
chartDescription: chart.description,
|
|
538
538
|
featured: chart.annotations?.[CATALOG_ANNOTATIONS.FEATURED],
|
|
539
|
+
featuredIndex: chart.annotations?.[CATALOG_ANNOTATIONS.FEATURED] ? Number(chart.annotations?.[CATALOG_ANNOTATIONS.FEATURED]) : Number.MAX_SAFE_INTEGER,
|
|
539
540
|
repoKey: repo._key,
|
|
540
541
|
versions: [],
|
|
541
542
|
categories: filterCategories(chart.keywords),
|
|
@@ -565,6 +566,10 @@ function addChart(ctx, map, chart, repo) {
|
|
|
565
566
|
}
|
|
566
567
|
|
|
567
568
|
obj.versions.push(chart);
|
|
569
|
+
|
|
570
|
+
if (!obj.durationSinceRelease) {
|
|
571
|
+
obj.durationSinceRelease = Date.now() - new Date(obj.versions[0].created).getTime();
|
|
572
|
+
}
|
|
568
573
|
}
|
|
569
574
|
|
|
570
575
|
function preferSameRepo(matching, repoType, repoName) {
|
|
@@ -648,6 +653,7 @@ export function filterAndArrangeCharts(charts, {
|
|
|
648
653
|
category,
|
|
649
654
|
tag,
|
|
650
655
|
searchQuery,
|
|
656
|
+
sort,
|
|
651
657
|
showDeprecated = false,
|
|
652
658
|
showHidden = false,
|
|
653
659
|
showPrerelease = true,
|
|
@@ -700,5 +706,21 @@ export function filterAndArrangeCharts(charts, {
|
|
|
700
706
|
return true;
|
|
701
707
|
});
|
|
702
708
|
|
|
709
|
+
if (sort === CATALOG_SORT_OPTIONS.RECOMMENDED) {
|
|
710
|
+
return sortBy(out, ['featuredIndex', 'certifiedSort', 'repoName', 'chartNameDisplay']);
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
if (sort === CATALOG_SORT_OPTIONS.LAST_UPDATED_DESC) {
|
|
714
|
+
return sortBy(out, ['durationSinceRelease', 'featuredIndex', 'certifiedSort', 'repoName', 'chartNameDisplay']);
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
if (sort === CATALOG_SORT_OPTIONS.ALPHABETICAL_ASC) {
|
|
718
|
+
return sortBy(out, ['chartNameDisplay', 'featuredIndex', 'certifiedSort', 'repoName']);
|
|
719
|
+
}
|
|
720
|
+
|
|
721
|
+
if (sort === CATALOG_SORT_OPTIONS.ALPHABETICAL_DESC) {
|
|
722
|
+
return sortBy(out, ['chartNameDisplay'], true);
|
|
723
|
+
}
|
|
724
|
+
|
|
703
725
|
return sortBy(out, ['certifiedSort', 'repoName', 'chartNameDisplay']);
|
|
704
726
|
}
|
package/store/growl.js
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { clear, findBy, removeObject } from '@shell/utils/array';
|
|
2
2
|
import { stringify } from '@shell/utils/error';
|
|
3
|
+
import { NotificationLevel } from '@shell/types/notifications';
|
|
3
4
|
|
|
4
5
|
const DEFAULT_TIMEOUT = 5000;
|
|
5
6
|
|
|
7
|
+
const MAX_GROWLS = 5;
|
|
8
|
+
|
|
6
9
|
export const state = function() {
|
|
7
10
|
return {
|
|
8
11
|
nextId: 1,
|
|
@@ -13,18 +16,28 @@ export const state = function() {
|
|
|
13
16
|
export const getters = {
|
|
14
17
|
find: (state) => ({ key, val }) => {
|
|
15
18
|
return findBy(state.stack, key, val);
|
|
19
|
+
},
|
|
20
|
+
|
|
21
|
+
// findBy is slow, so more efficient getter for id
|
|
22
|
+
byId: (state) => (id) => {
|
|
23
|
+
return state.stack.find((item) => item.id === id);
|
|
16
24
|
}
|
|
17
25
|
};
|
|
18
26
|
|
|
19
27
|
export const mutations = {
|
|
20
28
|
add(state, data) {
|
|
29
|
+
if (state.stack.length === MAX_GROWLS) {
|
|
30
|
+
// Remove the last one
|
|
31
|
+
state.stack.pop();
|
|
32
|
+
}
|
|
33
|
+
|
|
21
34
|
state.stack = [
|
|
22
|
-
...state.stack,
|
|
23
35
|
{
|
|
24
36
|
id: state.nextId++,
|
|
25
37
|
started: (new Date().getTime()),
|
|
26
38
|
...data
|
|
27
|
-
}
|
|
39
|
+
},
|
|
40
|
+
...state.stack
|
|
28
41
|
];
|
|
29
42
|
},
|
|
30
43
|
|
|
@@ -50,11 +63,29 @@ export const actions = {
|
|
|
50
63
|
commit('remove', id);
|
|
51
64
|
},
|
|
52
65
|
|
|
53
|
-
|
|
66
|
+
async close({ commit, dispatch, getters }, id ) {
|
|
67
|
+
const growl = getters.byId(id);
|
|
68
|
+
|
|
69
|
+
commit('remove', id);
|
|
70
|
+
|
|
71
|
+
// If the growl has a notification, mark it as read if the user dismisses the growl
|
|
72
|
+
if (growl.notification) {
|
|
73
|
+
await dispatch('notifications/markRead', growl.notification, { root: true });
|
|
74
|
+
}
|
|
75
|
+
},
|
|
76
|
+
|
|
77
|
+
async success({ commit, dispatch }, data) {
|
|
78
|
+
// Send a notification for the growl
|
|
79
|
+
const notification = await dispatch('notifications/fromGrowl', {
|
|
80
|
+
...data,
|
|
81
|
+
level: NotificationLevel.Success
|
|
82
|
+
}, { root: true });
|
|
83
|
+
|
|
54
84
|
commit('add', {
|
|
55
85
|
color: 'success',
|
|
56
86
|
icon: 'checkmark',
|
|
57
87
|
timeout: DEFAULT_TIMEOUT,
|
|
88
|
+
notification,
|
|
58
89
|
...data
|
|
59
90
|
});
|
|
60
91
|
},
|
|
@@ -68,31 +99,89 @@ export const actions = {
|
|
|
68
99
|
});
|
|
69
100
|
},
|
|
70
101
|
|
|
71
|
-
warning({ commit }, data) {
|
|
102
|
+
async warning({ commit, dispatch }, data) {
|
|
103
|
+
// Send a notification for the growl
|
|
104
|
+
const notification = await dispatch('notifications/fromGrowl', {
|
|
105
|
+
...data,
|
|
106
|
+
level: NotificationLevel.Warning
|
|
107
|
+
}, { root: true });
|
|
108
|
+
|
|
72
109
|
commit('add', {
|
|
73
110
|
color: 'warning',
|
|
74
111
|
icon: 'warning',
|
|
75
112
|
timeout: DEFAULT_TIMEOUT,
|
|
113
|
+
notification,
|
|
76
114
|
...data
|
|
77
115
|
});
|
|
78
116
|
},
|
|
79
117
|
|
|
80
|
-
error({ commit }, data) {
|
|
118
|
+
async error({ commit, dispatch }, data) {
|
|
119
|
+
// Send a notification for the growl
|
|
120
|
+
const notification = await dispatch('notifications/fromGrowl', {
|
|
121
|
+
...data,
|
|
122
|
+
level: NotificationLevel.Error
|
|
123
|
+
}, { root: true });
|
|
124
|
+
|
|
81
125
|
commit('add', {
|
|
82
126
|
color: 'error',
|
|
83
127
|
icon: 'error',
|
|
84
|
-
timeout:
|
|
128
|
+
timeout: DEFAULT_TIMEOUT, // Errors timeout since they will be available as a notification
|
|
129
|
+
notification,
|
|
85
130
|
...data
|
|
86
131
|
});
|
|
87
132
|
},
|
|
88
133
|
|
|
89
|
-
fromError({ commit }, { title, err }) {
|
|
134
|
+
async fromError({ commit, dispatch }, { title, err }) {
|
|
135
|
+
// Send a notification for the growl
|
|
136
|
+
const notification = await dispatch('notifications/fromGrowl', {
|
|
137
|
+
title,
|
|
138
|
+
message: stringify(err),
|
|
139
|
+
level: NotificationLevel.Error
|
|
140
|
+
}, { root: true });
|
|
141
|
+
|
|
90
142
|
commit('add', {
|
|
91
143
|
color: 'error',
|
|
92
144
|
icon: 'error',
|
|
93
|
-
timeout:
|
|
145
|
+
timeout: DEFAULT_TIMEOUT, // Errors timeout since they will be available as a notification
|
|
146
|
+
notification,
|
|
94
147
|
title,
|
|
95
148
|
message: stringify(err),
|
|
96
149
|
});
|
|
150
|
+
},
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Used to create a growl when a notification is sent
|
|
154
|
+
*
|
|
155
|
+
* Growls are only shown for Success, Warning and Error notifications
|
|
156
|
+
*/
|
|
157
|
+
notification({ commit }, notification) {
|
|
158
|
+
const growl = {
|
|
159
|
+
title: notification.title,
|
|
160
|
+
message: notification.message,
|
|
161
|
+
notification: notification.id,
|
|
162
|
+
timeout: DEFAULT_TIMEOUT,
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
switch (notification.level) {
|
|
166
|
+
case NotificationLevel.Success:
|
|
167
|
+
growl.color = 'success';
|
|
168
|
+
growl.icon = 'checkmark';
|
|
169
|
+
break;
|
|
170
|
+
case NotificationLevel.Warning:
|
|
171
|
+
growl.color = 'warning';
|
|
172
|
+
growl.icon = 'warning';
|
|
173
|
+
break;
|
|
174
|
+
case NotificationLevel.Error:
|
|
175
|
+
growl.color = 'error';
|
|
176
|
+
growl.icon = 'error';
|
|
177
|
+
break;
|
|
178
|
+
default:
|
|
179
|
+
growl.skip = true;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// We don't show growls for info, announcement, task
|
|
183
|
+
if (!growl.skip) {
|
|
184
|
+
commit('add', growl);
|
|
185
|
+
}
|
|
97
186
|
}
|
|
98
187
|
};
|
package/store/index.js
CHANGED
|
@@ -39,6 +39,7 @@ import { STORE, BLANK_CLUSTER } from '@shell/store/store-types';
|
|
|
39
39
|
import { isDevBuild } from '@shell/utils/version';
|
|
40
40
|
import { markRaw } from 'vue';
|
|
41
41
|
import paginationUtils from '@shell/utils/pagination-utils';
|
|
42
|
+
import { addReleaseNotesNotification } from '@shell/utils/release-notes';
|
|
42
43
|
|
|
43
44
|
// Disables strict mode for all store instances to prevent warning about changing state outside of mutations
|
|
44
45
|
// because it's more efficient to do that sometimes.
|
|
@@ -896,6 +897,11 @@ export const actions = {
|
|
|
896
897
|
setBrand(brand);
|
|
897
898
|
}
|
|
898
899
|
|
|
900
|
+
// Add the notification for the release notes
|
|
901
|
+
if (isRancher) {
|
|
902
|
+
await addReleaseNotesNotification(dispatch, getters);
|
|
903
|
+
}
|
|
904
|
+
|
|
899
905
|
if (systemNamespaces) {
|
|
900
906
|
const namespace = (systemNamespaces.value || systemNamespaces.default)?.split(',');
|
|
901
907
|
|