agregado filtro de eventos por sala en la que se realizaron

This commit is contained in:
2025-08-27 23:23:17 -06:00
parent ffd97646ab
commit 5321870336
4 changed files with 162 additions and 14 deletions

View File

@@ -1,4 +1,4 @@
import { ref, computed, watch } from 'vue';
import { ref, computed } from 'vue';
export interface DetailedEvent {
kind: string;
@@ -6,17 +6,20 @@ export interface DetailedEvent {
gameVariant?: string;
playerUuid?: string;
playerName?: string;
roomId?: string;
}
export type DataSource = 'aggregated' | 'active-rooms';
export type RoundFilter = 'all' | 1 | 2 | 3;
export type GameFilter = 'all' | 'G1' | 'G2' | 'G3' | 'G4' | 'G5';
export type RoomFilter = 'all' | string;
export function useEventFilters() {
// Filter states
const dataSource = ref<DataSource>('aggregated');
const roundFilter = ref<RoundFilter>('all');
const gameFilter = ref<GameFilter>('all');
const roomFilter = ref<RoomFilter>('all');
// Event data stores
const detailedEventsAggregated = ref<DetailedEvent[]>([]);
@@ -33,7 +36,7 @@ export function useEventFilters() {
? detailedEventsAggregated.value
: detailedEventsActiveRooms.value;
// Filter events based on round and game
// Filter events based on round, game, and room
const filteredEvents = sourceEvents.filter(event => {
if (roundFilter.value !== 'all' && event.round !== roundFilter.value) {
return false;
@@ -41,6 +44,9 @@ export function useEventFilters() {
if (gameFilter.value !== 'all' && event.gameVariant !== gameFilter.value) {
return false;
}
if (roomFilter.value !== 'all' && event.roomId !== roomFilter.value) {
return false;
}
return true;
});
@@ -71,6 +77,7 @@ export function useEventFilters() {
function resetFilters() {
roundFilter.value = 'all';
gameFilter.value = 'all';
roomFilter.value = 'all';
}
// Computed properties
@@ -83,13 +90,14 @@ export function useEventFilters() {
);
const hasActiveFilters = computed(() =>
roundFilter.value !== 'all' || gameFilter.value !== 'all'
roundFilter.value !== 'all' || gameFilter.value !== 'all' || roomFilter.value !== 'all'
);
const filterSummary = computed(() => {
const parts = [];
if (roundFilter.value !== 'all') parts.push(`Round ${roundFilter.value}`);
if (gameFilter.value !== 'all') parts.push(`Game ${gameFilter.value}`);
if (roomFilter.value !== 'all') parts.push(`Room ${roomFilter.value.slice(0, 8)}`);
return parts.length > 0 ? parts.join(' + ') : 'Sin filtros';
});
@@ -98,6 +106,7 @@ export function useEventFilters() {
dataSource,
roundFilter,
gameFilter,
roomFilter,
detailedEventsAggregated,
detailedEventsActiveRooms,
globalEventCounts,