|
59 | 59 | class="endpoint-group-header flex items-center justify-between p-4 bg-card border-b cursor-pointer hover:bg-accent/50 transition-colors" |
60 | 60 | > |
61 | 61 | <div class="flex items-center gap-3"> |
62 | | - <ChevronDown v-if="!collapsedGroups.has(group)" class="h-5 w-5 text-muted-foreground" /> |
| 62 | + <ChevronDown v-if="uncollapsedGroups.has(group)" class="h-5 w-5 text-muted-foreground" /> |
63 | 63 | <ChevronUp v-else class="h-5 w-5 text-muted-foreground" /> |
64 | 64 | <h2 class="text-xl font-semibold text-foreground">{{ group }}</h2> |
65 | 65 | </div> |
|
73 | 73 | </div> |
74 | 74 |
|
75 | 75 | <!-- Group Content --> |
76 | | - <div v-if="!collapsedGroups.has(group)" class="endpoint-group-content p-4"> |
| 76 | + <div v-if="uncollapsedGroups.has(group)" class="endpoint-group-content p-4"> |
77 | 77 | <div class="grid gap-3 grid-cols-1 sm:grid-cols-2 lg:grid-cols-3"> |
78 | 78 | <EndpointCard |
79 | 79 | v-for="endpoint in endpoints" |
@@ -169,7 +169,7 @@ const showRecentFailures = ref(false) |
169 | 169 | const showAverageResponseTime = ref(true) |
170 | 170 | const groupByGroup = ref(false) |
171 | 171 | const sortBy = ref(localStorage.getItem('gatus:sort-by') || 'name') |
172 | | -const collapsedGroups = ref(new Set()) |
| 172 | +const uncollapsedGroups = ref(new Set()) |
173 | 173 |
|
174 | 174 | const filteredEndpoints = computed(() => { |
175 | 175 | let filtered = [...endpointStatuses.value] |
@@ -356,26 +356,29 @@ const calculateUnhealthyCount = (endpoints) => { |
356 | 356 | } |
357 | 357 |
|
358 | 358 | const toggleGroupCollapse = (groupName) => { |
359 | | - if (collapsedGroups.value.has(groupName)) { |
360 | | - collapsedGroups.value.delete(groupName) |
| 359 | + if (uncollapsedGroups.value.has(groupName)) { |
| 360 | + uncollapsedGroups.value.delete(groupName) |
361 | 361 | } else { |
362 | | - collapsedGroups.value.add(groupName) |
| 362 | + uncollapsedGroups.value.add(groupName) |
363 | 363 | } |
364 | 364 | // Save to localStorage |
365 | | - const collapsed = Array.from(collapsedGroups.value) |
366 | | - localStorage.setItem('gatus:collapsed-groups', JSON.stringify(collapsed)) |
| 365 | + const uncollapsed = Array.from(uncollapsedGroups.value) |
| 366 | + localStorage.setItem('gatus:uncollapsed-groups', JSON.stringify(uncollapsed)) |
| 367 | + localStorage.removeItem('gatus:collapsed-groups') // Remove old key if it exists |
367 | 368 | } |
368 | 369 |
|
369 | 370 | const initializeCollapsedGroups = () => { |
370 | | - // Get saved collapsed groups from localStorage |
| 371 | + // Get saved uncollapsed groups from localStorage |
371 | 372 | try { |
372 | | - const saved = localStorage.getItem('gatus:collapsed-groups') |
| 373 | + const saved = localStorage.getItem('gatus:uncollapsed-groups') |
373 | 374 | if (saved) { |
374 | | - collapsedGroups.value = new Set(JSON.parse(saved)) |
| 375 | + uncollapsedGroups.value = new Set(JSON.parse(saved)) |
375 | 376 | } |
| 377 | + // If no saved state, uncollapsedGroups stays empty (all collapsed by default) |
376 | 378 | } catch (e) { |
377 | | - console.warn('Failed to parse saved collapsed groups:', e) |
378 | | - localStorage.removeItem('gatus:collapsed-groups') |
| 379 | + console.warn('Failed to parse saved uncollapsed groups:', e) |
| 380 | + localStorage.removeItem('gatus:uncollapsed-groups') |
| 381 | + // On error, uncollapsedGroups stays empty (all collapsed by default) |
379 | 382 | } |
380 | 383 | } |
381 | 384 |
|
|
0 commit comments