diff --git a/assets/translations/en-us.yaml b/assets/translations/en-us.yaml
index 418f9cfcb0..5992bd2117 100644
--- a/assets/translations/en-us.yaml
+++ b/assets/translations/en-us.yaml
@@ -1081,7 +1081,7 @@ tableHeaders:
namespaceNameUnlinked: Name
node: Node
nodeName: Name
- nodesReady: Clusters
+ nodesReady: Nodes
object: Object
output: Output
p95: 95%tile
diff --git a/config/product/explorer.js b/config/product/explorer.js
index f8f6074d15..5c7026a486 100644
--- a/config/product/explorer.js
+++ b/config/product/explorer.js
@@ -36,7 +36,7 @@ export function init(store) {
icon: 'compass'
});
- basicType(['cluster-overview', HELM_RELEASE]);
+ basicType(['cluster-dashboard', HELM_RELEASE]);
basicType([
NAMESPACE,
NODE,
@@ -163,10 +163,10 @@ export function init(store) {
// ]);
virtualType({
- label: 'Overview',
+ label: 'Cluster Dashboard',
group: 'Root',
namespaced: false,
- name: 'cluster-overview',
+ name: 'cluster-dashboard',
weight: 100,
route: { name: 'c-cluster-explorer' },
exact: true,
diff --git a/detail/management.cattle.io.fleetworkspace.vue b/detail/management.cattle.io.fleetworkspace.vue
new file mode 100644
index 0000000000..f0b66fbc5f
--- /dev/null
+++ b/detail/management.cattle.io.fleetworkspace.vue
@@ -0,0 +1,45 @@
+
+
+
+
+
diff --git a/list/fleet.cattle.io.clustergroup.vue b/list/fleet.cattle.io.clustergroup.vue
new file mode 100644
index 0000000000..b28f05cc1e
--- /dev/null
+++ b/list/fleet.cattle.io.clustergroup.vue
@@ -0,0 +1,130 @@
+
+
+
+
+
+
+
+
+
+
+ {{ row.status.clusterCount - row.status.nonReadyClusterCount }}/{{ row.status.clusterCount }}
+ {{ row.status.clusterCount }}
+
+
+
+
+
+
+
diff --git a/models/fleet.cattle.io.clustergroup.js b/models/fleet.cattle.io.clustergroup.js
index 172f1e543a..cc7e90fe10 100644
--- a/models/fleet.cattle.io.clustergroup.js
+++ b/models/fleet.cattle.io.clustergroup.js
@@ -1,3 +1,5 @@
+import { escapeHtml } from '@/utils/string';
+
export default {
applyDefaults() {
return () => {
@@ -9,4 +11,14 @@ export default {
spec.selector.matchExpressions = spec.selector.matchExpressions || [];
};
},
+
+ groupByLabel() {
+ const name = this.metadata.namespace;
+
+ if ( name ) {
+ return this.$rootGetters['i18n/t']('resourceTable.groupLabel.workspace', { name: escapeHtml(name) });
+ } else {
+ return this.$rootGetters['i18n/t']('resourceTable.groupLabel.notInAWorkspace');
+ }
+ },
};