filtros mejorados en leaderboard

This commit is contained in:
2025-08-28 03:49:37 -06:00
parent ba0f6265a7
commit 7de7263c41
5 changed files with 161 additions and 141 deletions

View File

@@ -10,16 +10,16 @@ export interface DetailedEvent {
}
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 type RoundFilterMulti = number[]; // empty means all
export type GameFilterMulti = string[]; // empty means all
export type RoomFilterMulti = string[]; // empty means all
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');
const roundFilter = ref<RoundFilterMulti>([]);
const gameFilter = ref<GameFilterMulti>([]);
const roomFilter = ref<RoomFilterMulti>([]);
// Event data stores
const detailedEventsAggregated = ref<DetailedEvent[]>([]);
@@ -38,13 +38,13 @@ export function useEventFilters() {
// Filter events based on round, game, and room
const filteredEvents = sourceEvents.filter(event => {
if (roundFilter.value !== 'all' && event.round !== roundFilter.value) {
if (roundFilter.value.length && !roundFilter.value.includes(Number(event.round))) {
return false;
}
if (gameFilter.value !== 'all' && event.gameVariant !== gameFilter.value) {
if (gameFilter.value.length && !gameFilter.value.includes(String(event.gameVariant))) {
return false;
}
if (roomFilter.value !== 'all' && event.roomId !== roomFilter.value) {
if (roomFilter.value.length && !roomFilter.value.includes(String(event.roomId))) {
return false;
}
return true;
@@ -75,9 +75,9 @@ export function useEventFilters() {
// Reset filters
function resetFilters() {
roundFilter.value = 'all';
gameFilter.value = 'all';
roomFilter.value = 'all';
roundFilter.value = [];
gameFilter.value = [];
roomFilter.value = [];
}
// Computed properties
@@ -90,14 +90,14 @@ export function useEventFilters() {
);
const hasActiveFilters = computed(() =>
roundFilter.value !== 'all' || gameFilter.value !== 'all' || roomFilter.value !== 'all'
roundFilter.value.length > 0 || gameFilter.value.length > 0 || roomFilter.value.length > 0
);
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)}`);
if (roundFilter.value.length) parts.push(`Round ${roundFilter.value.join(',')}`);
if (gameFilter.value.length) parts.push(`Game ${gameFilter.value.join(',')}`);
if (roomFilter.value.length) parts.push(`Rooms ${roomFilter.value.map(r => r.slice(0,8)).join(',')}`);
return parts.length > 0 ? parts.join(' + ') : 'Sin filtros';
});
@@ -125,4 +125,4 @@ export function useEventFilters() {
hasActiveFilters,
filterSummary
};
}
}