- groupingCriterion = 'application'">
+ groupingCriterion = 'application'"
+ :aria-label="t('term.group_by.application')"
+ :title="t('term.group_by.application')">
- groupingCriterion = 'group'">
+ groupingCriterion = 'group'"
+ :aria-label="t('term.group_by.group')"
+ :title="t('term.group_by.group')">
@@ -98,7 +102,7 @@
@@ -150,7 +154,7 @@ import Application from '@/services/application';
import NotificationFilter from '@/services/notification-filter';
import {anyValueMatches} from '@/utils/collections';
import {concatMap, mergeWith, Subject, timer} from '@/utils/rxjs';
-import {groupApplicationsBy, GroupingType} from "@/services/instanceGroupService";
+import {groupApplicationsBy, GroupingType, isGroupingType} from "@/services/instanceGroupService";
import ApplicationStats from "@/views/applications/ApplicationStats.vue";
import ApplicationNotificationCenter from "@/views/applications/ApplicationNotificationCenter.vue";
import ApplicationStatusHero from "@/views/applications/ApplicationStatusHero.vue";
@@ -171,8 +175,10 @@ const route = useRoute();
const {applications, applicationsInitialized, applicationStore} = useApplicationStore();
const notificationCenter = useNotificationCenter({});
const filter = ref(route.query.q?.toString());
-const expandedGroups = ref([]);
-const groupingCriterion = ref
('application');
+const expandedGroups = ref([route.params.selected]);
+
+const queryParamGroupBy = route.query?.groupBy?.toString();
+const groupingCriterion = ref(isGroupingType(queryParamGroupBy) ? queryParamGroupBy as GroupingType : 'application');
const notificationFilterSubject = new Subject();
const notificationFilters = ref([]);
const hasNotificationFiltersSupport = ref(NotificationFilter.isSupported());
@@ -220,16 +226,21 @@ watch(applicationsInitialized, (initialized) => {
}
})
+let to = {
+ name: 'applications',
+ params: {selected: props.selected},
+} as RouteLocationNamedRaw;
+
watch(filter, (q) => {
let to = {
- name: 'applications',
+ name: 'wallboard',
params: {selected: props.selected},
} as RouteLocationNamedRaw;
-
if (q && q.length > 0) {
to = {
...to,
query: {
+ ...route.query,
q
},
} as RouteLocationNamedRaw;
@@ -238,6 +249,20 @@ watch(filter, (q) => {
router.replace(to);
});
+watch(groupingCriterion, (groupBy) => {
+ if (groupBy && groupBy.length > 0) {
+ to = {
+ ...to,
+ query: {
+ ...route.query,
+ groupBy
+ },
+ } as RouteLocationNamedRaw;
+ }
+
+ router.replace(to);
+});
+
watch(groupNames, (newValue) => {
if (newValue.length === 1) {
groupingCriterion.value = 'application';
diff --git a/spring-boot-admin-server-ui/src/main/frontend/views/wallboard/hex-mesh.vue b/spring-boot-admin-server-ui/src/main/frontend/views/wallboard/hex-mesh.vue
index 981bb03a1ee..63efd162b48 100644
--- a/spring-boot-admin-server-ui/src/main/frontend/views/wallboard/hex-mesh.vue
+++ b/spring-boot-admin-server-ui/src/main/frontend/views/wallboard/hex-mesh.vue
@@ -17,34 +17,29 @@
-