filtros mejorados en leaderboard
This commit is contained in:
@@ -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
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user