up display; ajout scrap agendadulibre; qa évènements sans localisation
This commit is contained in:
parent
73f18e1d31
commit
6deed13d0b
25 changed files with 2165 additions and 53 deletions
|
@ -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();
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue