up display; ajout scrap agendadulibre; qa évènements sans localisation

This commit is contained in:
Tykayn 2025-10-04 19:18:10 +02:00 committed by tykayn
parent 73f18e1d31
commit 6deed13d0b
25 changed files with 2165 additions and 53 deletions

View file

@ -1,5 +1,6 @@
import { Component, inject, OnInit, ViewChild, TemplateRef } from '@angular/core';
import { CommonModule } from '@angular/common';
import { FormsModule } from '@angular/forms';
import { OedbApi } from '../../services/oedb-api';
import { EditForm } from '../../forms/edit-form/edit-form';
import { CalendarModule, CalendarView, CalendarEvent } from 'angular-calendar';
@ -32,7 +33,7 @@ interface DayEvents {
@Component({
selector: 'app-agenda',
standalone: true,
imports: [CommonModule, EditForm, CalendarModule],
imports: [CommonModule, FormsModule, EditForm, CalendarModule],
templateUrl: './agenda.html',
styleUrl: './agenda.scss'
})
@ -42,13 +43,20 @@ export class Agenda implements OnInit {
@ViewChild('eventTitleTemplate', { static: true }) eventTitleTemplate!: TemplateRef<any>;
events: OedbEvent[] = [];
filteredEvents: OedbEvent[] = [];
calendarEvents: CalendarEvent[] = [];
selectedEvent: OedbEvent | null = null;
showSidePanel = false;
showFiltersPanel = false;
view: CalendarView = CalendarView.Month;
viewDate: Date = new Date();
oedbPresets = oedb.presets.what;
// Propriétés pour les filtres
hideTrafficEvents = true; // Par défaut, masquer les événements de type traffic
selectedEventTypes: string[] = [];
availableEventTypes: string[] = [];
// Exposer CalendarView pour l'utiliser dans le template
CalendarView = CalendarView;
@ -72,12 +80,44 @@ export class Agenda implements OnInit {
this.oedbApi.getEvents(params).subscribe((response: any) => {
this.events = Array.isArray(response?.features) ? response.features : [];
this.organizeEventsByDay();
this.updateAvailableEventTypes();
this.applyFilters();
});
}
updateAvailableEventTypes() {
const eventTypes = new Set<string>();
this.events.forEach(event => {
if (event?.properties?.what) {
eventTypes.add(event.properties.what);
}
});
this.availableEventTypes = Array.from(eventTypes).sort();
}
applyFilters() {
let filtered = [...this.events];
// Filtre par défaut : masquer les événements de type traffic
if (this.hideTrafficEvents) {
filtered = filtered.filter(event =>
!event?.properties?.what?.startsWith('traffic.')
);
}
// Filtre par types d'événements sélectionnés
if (this.selectedEventTypes.length > 0) {
filtered = filtered.filter(event =>
this.selectedEventTypes.includes(event?.properties?.what || '')
);
}
this.filteredEvents = filtered;
this.organizeEventsByDay();
}
organizeEventsByDay() {
this.calendarEvents = this.events.map(event => {
this.calendarEvents = this.filteredEvents.map(event => {
const eventDate = this.getEventDate(event);
const preset = this.getEventPreset(event);
@ -220,4 +260,33 @@ export class Agenda implements OnInit {
}: CalendarEventTimesChangedEvent): void {
console.log('Event times changed:', event, newStart, newEnd);
}
toggleFiltersPanel() {
this.showFiltersPanel = !this.showFiltersPanel;
}
onHideTrafficChange() {
this.applyFilters();
}
onEventTypeChange(eventType: string, checked: boolean) {
if (checked) {
if (!this.selectedEventTypes.includes(eventType)) {
this.selectedEventTypes.push(eventType);
}
} else {
this.selectedEventTypes = this.selectedEventTypes.filter(type => type !== eventType);
}
this.applyFilters();
}
isEventTypeSelected(eventType: string): boolean {
return this.selectedEventTypes.includes(eventType);
}
clearAllFilters() {
this.selectedEventTypes = [];
this.hideTrafficEvents = true;
this.applyFilters();
}
}