filtre agenda, page de stats, queryparam add
This commit is contained in:
parent
73e3b9e710
commit
5d636b0027
20 changed files with 2800 additions and 75 deletions
|
|
@ -34,7 +34,7 @@ export class Home implements OnInit, OnDestroy {
|
|||
|
||||
OedbApi = inject(OedbApi);
|
||||
route = inject(ActivatedRoute);
|
||||
private router = inject(Router);
|
||||
router = inject(Router);
|
||||
private osmAuth = inject(OsmAuth);
|
||||
|
||||
features: Array<any> = [];
|
||||
|
|
@ -45,6 +45,7 @@ export class Home implements OnInit, OnDestroy {
|
|||
showEditForm = false;
|
||||
showOptions = false;
|
||||
pleinAirMode = false;
|
||||
addMode: string | null = null;
|
||||
civilianMode = false;
|
||||
toasts: Array<{ id: number, type: 'success' | 'error' | 'info', message: string }> = [];
|
||||
|
||||
|
|
@ -107,18 +108,46 @@ export class Home implements OnInit, OnDestroy {
|
|||
this.route.queryParamMap.subscribe(map => {
|
||||
const id = (map.get('id') || '').trim();
|
||||
const what = (map.get('what') || 'culture').trim();
|
||||
const add = (map.get('add') || '').trim();
|
||||
const pleinAir = (map.get('pleinair') || '').trim().toLowerCase();
|
||||
const preset = (map.get('preset') || '').trim().toLowerCase();
|
||||
const limitParam = map.get('limit');
|
||||
const limit = limitParam ? Number(limitParam) : null;
|
||||
|
||||
// Gérer le paramètre add pour activer le formulaire de création
|
||||
if (add) {
|
||||
this.addMode = add;
|
||||
this.selectedWhatFilter = add;
|
||||
this.showEditForm = true;
|
||||
this.showOptions = true; // Afficher aussi le panel d'options
|
||||
// Créer un événement temporaire avec le type what défini
|
||||
this.selected = {
|
||||
id: null,
|
||||
properties: {
|
||||
what: add,
|
||||
label: '',
|
||||
description: '',
|
||||
start: new Date().toISOString(),
|
||||
stop: new Date(Date.now() + 24 * 3600 * 1000).toISOString()
|
||||
},
|
||||
geometry: { type: 'Point', coordinates: [0, 0] }
|
||||
};
|
||||
} else {
|
||||
this.addMode = null;
|
||||
// Si pas de paramètre add, s'assurer que showEditForm est géré correctement
|
||||
if (!this.selected) {
|
||||
this.showEditForm = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Charger selon les query params
|
||||
if (id) {
|
||||
this.loadSingleEvent(id);
|
||||
} else {
|
||||
this.loadEvents({what: what || undefined, limit: limit || undefined});
|
||||
}
|
||||
// Appliquer filtre par what côté client si fourni
|
||||
if (what) {
|
||||
// Appliquer filtre par what côté client si fourni (sauf si add est défini)
|
||||
if (what && !add) {
|
||||
this.selectedWhatFilter = what;
|
||||
}
|
||||
// Activer mode plein air via query param
|
||||
|
|
@ -137,6 +166,46 @@ export class Home implements OnInit, OnDestroy {
|
|||
this.enablePleinAirMode();
|
||||
}
|
||||
});
|
||||
|
||||
// Gérer aussi les paramètres du fragment (pour les URLs avec #)
|
||||
this.route.fragment.subscribe(fragment => {
|
||||
console.log('🔗 Fragment reçu:', fragment);
|
||||
if (fragment) {
|
||||
// Nettoyer le fragment en supprimant le & initial s'il existe
|
||||
const cleanFragment = fragment.startsWith('&') ? fragment.substring(1) : fragment;
|
||||
console.log('🧹 Fragment nettoyé:', cleanFragment);
|
||||
const params = new URLSearchParams(cleanFragment);
|
||||
const add = params.get('add');
|
||||
const what = params.get('what');
|
||||
console.log('🎯 Paramètre add extrait:', add);
|
||||
|
||||
// Gérer le paramètre add du fragment
|
||||
if (add) {
|
||||
this.addMode = add;
|
||||
this.selectedWhatFilter = add;
|
||||
this.showEditForm = true;
|
||||
this.showOptions = true; // Afficher aussi le panel d'options
|
||||
// Créer un événement temporaire avec le type what défini
|
||||
this.selected = {
|
||||
id: null,
|
||||
properties: {
|
||||
what: add,
|
||||
label: '',
|
||||
description: '',
|
||||
start: new Date().toISOString(),
|
||||
stop: new Date(Date.now() + 24 * 3600 * 1000).toISOString()
|
||||
},
|
||||
geometry: { type: 'Point', coordinates: [0, 0] }
|
||||
};
|
||||
console.log('✅ Formulaire de création activé pour:', add);
|
||||
} else if (what) {
|
||||
this.selectedWhatFilter = what;
|
||||
console.log('✅ Filtre what défini:', this.selectedWhatFilter);
|
||||
this.loadEvents({ what: what });
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
this.startAutoReload();
|
||||
|
||||
this.loadEvents({what: "culture", limit: 100});
|
||||
|
|
@ -475,7 +544,27 @@ export class Home implements OnInit, OnDestroy {
|
|||
|
||||
onCreated(_res: any) {
|
||||
this.selected = null;
|
||||
this.showEditForm = false;
|
||||
this.addMode = null;
|
||||
this.loadEvents();
|
||||
// Retirer le paramètre add de l'URL (query params ou fragment)
|
||||
if (this.route.snapshot.queryParams['add']) {
|
||||
this.router.navigate([], {
|
||||
relativeTo: this.route,
|
||||
queryParams: { ...this.route.snapshot.queryParams, add: null },
|
||||
queryParamsHandling: 'merge'
|
||||
});
|
||||
} else if (this.route.snapshot.fragment && this.route.snapshot.fragment.includes('add=')) {
|
||||
// Nettoyer le fragment s'il contient add
|
||||
const fragment = this.route.snapshot.fragment || '';
|
||||
const params = new URLSearchParams(fragment.startsWith('&') ? fragment.substring(1) : fragment);
|
||||
params.delete('add');
|
||||
const newFragment = params.toString();
|
||||
this.router.navigate([], {
|
||||
relativeTo: this.route,
|
||||
fragment: newFragment ? '?' + newFragment : undefined
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
onDeleted(_res: any) {
|
||||
|
|
@ -568,8 +657,52 @@ export class Home implements OnInit, OnDestroy {
|
|||
this.loadEvents();
|
||||
}
|
||||
|
||||
closeEditForm() {
|
||||
this.selected = null;
|
||||
this.showEditForm = false;
|
||||
this.addMode = null;
|
||||
// Retirer le paramètre add de l'URL si présent (query params ou fragment)
|
||||
if (this.route.snapshot.queryParams['add']) {
|
||||
this.router.navigate([], {
|
||||
relativeTo: this.route,
|
||||
queryParams: { ...this.route.snapshot.queryParams, add: null },
|
||||
queryParamsHandling: 'merge'
|
||||
});
|
||||
} else if (this.route.snapshot.fragment && this.route.snapshot.fragment.includes('add=')) {
|
||||
// Nettoyer le fragment s'il contient add
|
||||
const fragment = this.route.snapshot.fragment || '';
|
||||
const params = new URLSearchParams(fragment.startsWith('&') ? fragment.substring(1) : fragment);
|
||||
params.delete('add');
|
||||
const newFragment = params.toString();
|
||||
this.router.navigate([], {
|
||||
relativeTo: this.route,
|
||||
fragment: newFragment ? '?' + newFragment : undefined
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
onCanceled() {
|
||||
this.showEditForm = false;
|
||||
this.addMode = null;
|
||||
this.selected = null;
|
||||
// Retirer le paramètre add de l'URL si présent (query params ou fragment)
|
||||
if (this.route.snapshot.queryParams['add']) {
|
||||
this.router.navigate([], {
|
||||
relativeTo: this.route,
|
||||
queryParams: { ...this.route.snapshot.queryParams, add: null },
|
||||
queryParamsHandling: 'merge'
|
||||
});
|
||||
} else if (this.route.snapshot.fragment && this.route.snapshot.fragment.includes('add=')) {
|
||||
// Nettoyer le fragment s'il contient add
|
||||
const fragment = this.route.snapshot.fragment || '';
|
||||
const params = new URLSearchParams(fragment.startsWith('&') ? fragment.substring(1) : fragment);
|
||||
params.delete('add');
|
||||
const newFragment = params.toString();
|
||||
this.router.navigate([], {
|
||||
relativeTo: this.route,
|
||||
fragment: newFragment ? '?' + newFragment : undefined
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
ngAfterViewInit() {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue